django-admin和manage.py
目錄
一、Django內建命令選項
- check
- dbshell
- diffsettings
- flush
- makemigrations
- migrate
- runserver
- shell
- startapp
- startproject
- test
二、app提供的命令
- changepassword
- createsuperuser
- clearsessions
- collectstatic
三、 共有引數
- --pythonpath PYTHONPATH
- --settings SETTINGS
- --traceback
- --verbosity {0,1,2,3}, -v {0,1,2,3}
- --no-color
四、顏色控制
五、在程式碼中呼叫管理命令
django-admin是用於管理Django的命令列工具集,當我們成功安裝Django後,在作業系統中就會有這個命令,但是根據安裝方式或者系統環境的不同,你可能需要配置一下呼叫路徑。在Linux下,該命令一般位於site-packages/django/bin
,最好做一個連結到/usr/local/bin
,方便呼叫。Windows下可以配置系統環境變數,參考教程開始部分。
manage.py則是每個Django專案中自動生成的一個用於管理專案的指令碼檔案,需要通過python命令執行。
有三種方式,可以執行Django提供的內建命令:
$ django-admin <command> [options]
$ manage.py <command> [options]
$ python -m django <command> [options]
其中的command是Django內建的或者你自定義的命令。
有三種獲取幫助資訊的辦法:
django-admin help
:顯示使用資訊和命令列表。
django-admin help --commands
:所有可用命令的列表。
django-admin help <command>
:命令的介紹及其可用的引數列表。
django-admin version
:獲取當前使用的Django版本。
使用--verbosity
引數指定django-admin
將通知和除錯資訊列印到控制檯。
一、Django內建命令選項
Django為我們提供了一系列命令選項,有一些天天都用,有一些很重要,有一些基本用不到。下面列出了一些重要的:
呼叫方式:django-admin 命令選項 額外引數
1. check
檢查整個Django專案是否存在常見問題。
預設情況下,所有應用都將被選中。可以通過提供app的名字檢查指定的應用:
django-admin check auth admin myapp
如果你沒有指定任何一個應用,那麼將對全部的應用進行檢查。
2. dbshell
執行ENGINE設定中指定的資料庫引擎的命令列客戶端,其中USER,PASSWORD等指定連線引數。
--database DATABASE
指定開啟某個資料庫的shell。 預設為default。
3. diffsettings
django-admin diffsettings
顯示當前設定檔案與Django的預設設定之間的差異。
4. flush
django-admin flush
從資料庫中刪除所有資料。已應用的遷移不會被清除。只刪除具體資料,不刪除資料表!
如果您希望從空資料庫啟動並重新執行所有遷移,則應該刪除並重新建立資料庫,然後再執行migrate,這樣會連原來的資料表都刪了。
5. makemigrations
django-admin makemigrations [app_label [app_label ...]]
根據檢測到的模型建立新的遷移。遷移的作用,更多的是將資料庫的操作,以檔案的形式記錄下來,方便以後檢查、呼叫、重做等等。尤其是對於Git版本管理,它無法獲知資料庫是如何變化的,只能通過遷移檔案中的記錄來追溯和儲存。
6. migrate
django-admin migrate [app_label] [migration_name]
使資料庫狀態與當前模型集和遷移集同步。說白了,就是將對資料庫的更改,主要是資料表設計的更改,在資料庫中真實執行。例如,新建、修改、刪除資料表,新增、修改、刪除某資料表內的欄位等等。
7. runserver
django-admin runserver [addrport]
啟用Django為我們提供的輕量級的開發用的Web伺服器。預設情況下,伺服器執行在IP地址127.0.0.1的8000埠上。如果要自定義伺服器埠和地址,可以顯式地傳遞一個IP地址和埠號給它。
在Linux中,如果你以一個普通使用者的身份來執行指令碼,你可能沒有許可權在低位埠上執行。低埠數(即1024以下)是預留出來給超級使用者(root)的。
這個伺服器使用的WSGI application物件是在WSGI_APPLICATION
中設定的。
不要在生產環境中使用這個伺服器。
通常,每當我們寫的程式碼有變化時,這個伺服器會自動重啟,但這不是絕對的,所以,為了不出意外,每次測試時,還是手動重啟一下吧。
當你啟動伺服器之後,在伺服器執行過程中每當你的Python程式碼有變更時,系統的檢測框架將會檢查整個專案中是否存在一些直觀的錯誤,如果檢測到了錯誤,這些錯誤資訊將會輸出至標準輸出。
可以同時啟動多個伺服器,只要它們在不同的埠上,多次執行django-admin runserver ...
即可。
注意:預設的IP為127.0.0.1,它是不可被網路中的其它主機所訪問的,只能本機。要使網路上的其他計算機可以訪問你的開發伺服器,請使用自己的IP地址(例如192.168.2.1)或0.0.0.0或 :: (啟用IPv6)。也可以使用只包含ASCII碼的主機名.
Django開發伺服器,預設支援多執行緒,可以通過--nothreading
引數關閉。
下面是使用不同埠和地址的示例:
埠8000在IP地址127.0.0.1:
django-admin runserver
埠8000在IP地址1.2.3.4:
django-admin runserver 1.2.3.4:8000
埠7000在IP地址127.0.0.1:
django-admin runserver 7000
埠7000在IP地址1.2.3.4:
django-admin runserver 1.2.3.4:7000
埠8000在IPv6地址::1:
django-admin runserver -6
埠7000在IPv6地址::1:
django-admin runserver -6 7000
埠7000在IPv6地址2001:0db8:1234:5678::9:
django-admin runserver [2001:0db8:1234:5678::9]:7000
埠8000在主機的IPv4地址localhost:
django-admin runserver localhost:8000
埠8000在主機的IPv6地址localhost:
django-admin runserver -6 localhost:8000
8. shell
django-admin shell
啟動帶有Django環境的Python互動式直譯器,也就是命令列環境。預設使用基本的python互動式直譯器。這個命令非常常用,是我們測試和開發過程中不可或缺的部分!
--interface {ipython,bpython,python}, -i {ipython,bpython,python}
指定要使用的shell。 預設情況下,Django將使用IPython或bpython。如果同時安裝了兩個,請指定您想要的那個,如下所示:
使用IPython:
django-admin shell -i ipython
使用bpython:
django-admin shell -i bpython
9. startapp
django-admin startapp name [directory]
建立新的app。
預設情況下,會在這個新的app目錄下建立一系列檔案模版,比如models.py、views.py、admin.py等等。
10. startproject
django-admin startproject name [directory]
新建工程。預設情況下,新目錄包含manage.py指令碼和專案包(包含settings.py和其他檔案)。
11. test
django-admin test [test_label [test_label ...]]
執行所有已安裝的app的測試程式碼。
二、app提供的命令
前面是Django核心提供的命令項,下面則是一些內建app,比如auth等提供的命令項。它們只在對應的app啟用的時候才可用。
下面是最重要的幾個:
1. changepassword
此命令僅在安裝了Django的authentication system(django.contrib.auth)時可用。
該命令用於更改使用者的密碼。它會提示為給定使用者輸入兩次新密碼。如果兩次輸入相同,則立即成為新密碼。 如果不提供使用者名稱,該命令將嘗試更改與當前使用者匹配的使用者名稱的密碼。
用法示例:
django-admin changepassword tom
2. createsuperuser
此命令僅在安裝了Django的authentication system(django.contrib.auth)時可用。
建立超級使用者帳戶(具有所有許可權的使用者)。如果你需要建立初始超級使用者帳戶,或者需要以程式設計方式為你的網站生成超級使用者帳戶,這將非常有用。
以互動方式執行時,此命令將提示輸入新超級使用者的密碼。
當以非互動方式執行時,將不會設定密碼,並且超級使用者帳戶將無法登入,直到為其手動設定密碼。
可以使用命令列上的--username
和--email
引數提供新帳戶的使用者名稱和電子郵件地址。如果未提供其中任何一個,則createsuperuser將在以互動方式執行時提示輸入。
3. clearsessions
清除過期的會話。可以作為cron定期作業或直接執行。
4. collectstatic
僅當安裝了static files application(django.contrib.staticfiles)時,此命令才可用。
用於在線上環境,當DEBUG設定為False時,將靜態檔案等統一集中到一個目錄下,為Web伺服器提供靜態檔案支援。
這是一個不起眼,但非常重要的命令!
三、 共有引數
每種命令都有自己特定的引數選項,但下面幾個是所有命令都可以使用的引數:
1. --pythonpath PYTHONPATH
將給定的檔案系統路徑新增到Python的模組匯入搜尋路徑(import search path)。
如果未提供,django-admin將使用PYTHONPATH環境變數的值。
用法示例:
django-admin migrate --pythonpath='/home/djangoprojects/myproject'
2. --settings SETTINGS
指定要使用的配置檔案。例如mysite.settings。如果未提供,django-admin將使用DJANGO_SETTINGS_MODULE
環境變數的值。
用法示例:
django-admin migrate --settings=mysite.settings
3. --traceback
當引發CommandError時,顯示完整的錯誤棧資訊。預設情況下,django-admin將顯示一個簡單的錯誤訊息。
用法示例:
django-admin migrate --traceback
4. --verbosity {0,1,2,3}, -v
指定向控制檯列印訊息的方式。
- 0表示無輸出。
- 1表示正常輸出(預設)。
- 2表示詳細輸出。
- 3表示非常詳細輸出。
用法示例:
django-admin migrate --verbosity 2
5. --no-color
禁用彩色的輸出資訊。 一些命令會給它輸出的內容新增色彩。例如,錯誤將以紅色列印到控制檯,SQL語句將突出顯示語法。
用法示例:
django-admin runserver --no-color
四、顏色控制
如果你的終端支援ANSI顏色輸出,則django-admin
或者manage.py命令將使用漂亮的顏色輸出。如果你將命令的輸出傳遞到另一個程式,它不會使用顏色程式碼。
在Windows下,本機控制檯不支援ANSI轉義序列,因此預設情況下沒有顏色輸出。但是,可以安裝ANSICON第三方工具,Django命令將檢測其存在,並使用帶顏色的輸出,就像在基於Unix的平臺上。
用於語法高亮的顏色可以自定義。Django自帶三個調色盤:
- dark,適用於在黑色背景上顯示白色文字的終端。 這是預設調色盤。
- light,適用於在白色背景上顯示黑色文字的終端。
- nocolor,禁用語法高亮顯示。
可以通過設定DJANGO_COLORS環境變數來指定要使用的調色盤。 例如,要在Unix或OS/X BASH shell下指定light調色盤,可以執行以下命令:
export DJANGO_COLORS="light"
還可以自定義要使用的顏色,以下是基本規則:
error - 主要錯誤。 notice - 一個小錯誤。 success - 成功。 warning - 警告。 sql_field - SQL中模型欄位的名稱。 sql_coltype - SQL中的模型欄位的型別。 sql_keyword - 一個SQL關鍵字。 sql_table - SQL中模型的名稱。 http_info - 1XX HTTP資訊伺服器響應。 http_success - 2XX HTTP成功伺服器響應。 http_not_modified - 304 HTTP未修改伺服器響應。 http_redirect - 除304之外的3XX HTTP重定向伺服器響應。 http_not_found - 404 HTTP未找到伺服器響應。 http_bad_request - 除404之外的4XX HTTP錯誤請求伺服器響應。 http_server_error - 5XX HTTP Server錯誤響應。 migrate_heading - 遷移管理命令中的標題。 migrate_label - 遷移名稱。
可以從以下列表中分配特定的前景和背景顏色:
black red green yellow blue magenta cyan white
可以使用以下顯示選項修改每種顏色:
bold underscore blink reverse conceal
顏色的配置規範遵循以下模式之一:
role=fg
role=fg/bg role=fg,option,option role=fg/bg,option,option
其中role是有效顏色配置的名稱,fg是前景顏色,bg是背景顏色,每個option是一個顏色修改選項(用分號分隔)。 像這樣:
export DJANGO_COLORS="error=yellow/blue,blink;notice=magenta"
或者:
export DJANGO_COLORS="light;error=yellow/blue,blink;notice=magenta"
五、在程式碼中呼叫管理命令
django.core.management.call_command(name, args, *options)
要在程式碼中呼叫管理命令,需要使用call_command方法,它接受下面的引數:
name
:
要呼叫的命令的名稱或命令物件。
*args
:
該命令接受的引數列表。 例如,call_command('flush', ' - verbosity = 0')
。
**options
:
傳遞給命名的選項。 例如,call_command('flush', verbosity = 0)
。
例子:
from django.core import management
from django.core.management.commands import loaddata management.call_command('flush', verbosity=0, interactive=False) management.call_command('loaddata', 'test_data', verbosity=0) management.call_command(loaddata.Command(), 'test_data', verbosity=0)
命名引數可以通過使用以下語法之一傳遞:
# Similar to the command line management.call_command('dumpdata', '--natural-foreign') # Named argument similar to the command line minus the initial dashes and # with internal dashes replaced by underscores management.call_command('dumpdata', natural_foreign=True) # `use_natural_foreign_keys` is the option destination variable management.call_command('dumpdata', use_natural_foreign_keys=True)
有多個引數時,傳遞列表:
management.call_command('dumpdata', exclude=['contenttypes', 'auth'])
可以重定向標準輸出和錯誤流,因為所有命令都支援stdout和stderr選項。 例如:
with open('/path/to/command_output') as f: management.call_command('dumpdata', stdout=f)