1. 程式人生 > >django-admin和manage.py

django-admin和manage.py

目錄

一、Django內建命令選項

  1. check
  2. dbshell
  3. diffsettings
  4. flush
  5. makemigrations
  6. migrate
  7. runserver
  8. shell
  9. startapp
  10. startproject
  11. test

二、app提供的命令

  1. changepassword
  2. createsuperuser
  3. clearsessions
  4. collectstatic

三、 共有引數

  1. --pythonpath PYTHONPATH
  2. --settings SETTINGS
  3. --traceback
  4. --verbosity {0,1,2,3}, -v {0,1,2,3}
  5. --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)