欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Python的Django框架中manage命令的使用與擴(kuò)展

 更新時(shí)間:2016年04月11日 16:17:03   作者:心內(nèi)求法  
這篇文章主要介紹了Python的Django框架中manage命令的使用與擴(kuò)展,manage.py使得用戶(hù)借助manage命令在命令行中能實(shí)現(xiàn)諸多簡(jiǎn)便的操作,需要的朋友可以參考下

【簡(jiǎn)介】

django-admin.py是Django的一個(gè)用于管理任務(wù)的命令行工具。本文將描述它的大概用法。

另外,在每一個(gè)Django project中都會(huì)有一個(gè)manage.py。manage.py是對(duì)django-admin.py的簡(jiǎn)單包裝,它額外幫助我們做了兩件事情:

它將你的project的包放到sys.path中
它將DJANGO_SETTINGS_MODULE環(huán)境變量設(shè)置為了你的project的setting.py文件的位置。
如果你是通過(guò)setup.py工具來(lái)安裝Django的,那么django-admin.py腳本應(yīng)該在你的系統(tǒng)目錄中。如果不存在,你可以到你的python安裝目錄下的site-package/django/bin中去找找看。

通常來(lái)說(shuō),如果你經(jīng)常是在一個(gè)獨(dú)立的Django project里工作,那么使用manage.py會(huì)更方便一些。但如果你有很多Django project,那么可以使用django-admin.py,同時(shí)需要經(jīng)常變更DJANGO_SETTINGS_MODULE或使用–settings選項(xiàng)來(lái)設(shè)置不同的setting.py。

本文中都會(huì)使用django-admin.py來(lái)給大家做演示,但所有的例子,都也可以使用manage.py來(lái)實(shí)現(xiàn)。

【用法】

djang-admin.py的語(yǔ)法為:

django-admin.py <subcommand> [options]
manage.py <subcommand> [options]

其中,subcommand是子命令;options是可選的,可以有0個(gè)到多個(gè)option。

獲得幫助的方法是使用help這個(gè)命令,共有兩種方法:

1 運(yùn)行django-admin.py help會(huì)顯示用法信息,并給出所有可用的subcommand列表

2 運(yùn)行django-admin.py help <subcommand>會(huì)顯示特定的subcommand的描述信息,以及所有可用的options

運(yùn)行django-admin.py –version可以顯示django的版本號(hào)。

如果使用django-admin.py時(shí)加入–verbosity,則會(huì)顯示大量通知信息和調(diào)試信息。

【runfcgi】- subcommand

用于啟動(dòng)一個(gè)支持FastCGI協(xié)議的進(jìn)程,以便接收WebServer發(fā)來(lái)的請(qǐng)求??梢允褂胒lup作為Python FastCGI模塊。

runfcgi的選項(xiàng)如下:

  • protocol:用于設(shè)定所使用的cgi協(xié)議,包括fcgi、scgi和ajp等,默認(rèn)是fcgi。
  • host:用于設(shè)置監(jiān)聽(tīng)所在的主機(jī)名
  • port:用于設(shè)定監(jiān)聽(tīng)的端口
  • socket:用于設(shè)置監(jiān)聽(tīng)的UNIX socket
  • method:可以設(shè)置為prefork或threaded。默認(rèn)是prefork。
  • maxrequests:一個(gè)子進(jìn)程所能處理的請(qǐng)求的最大數(shù)量。一旦超過(guò)此數(shù)量,則子進(jìn)程會(huì)被kill掉,并創(chuàng)建一個(gè)新進(jìn)程。設(shè)置為0意味著對(duì)子進(jìn)程無(wú)限制。
  • maxspare:空閑進(jìn)程/線程的最大數(shù)量
  • minspare:空閑進(jìn)程/線程的最小數(shù)量
  • maxchildren:進(jìn)程/線程數(shù)的硬限制值
  • daemonize:為boolean值,表示是否放到后臺(tái)運(yùn)行。
  • pidfile:設(shè)置一個(gè)文件,用于將產(chǎn)生的PID信息寫(xiě)入。
  • workdir:用于設(shè)置工作目錄
  • debug:為boolean值,用于設(shè)置是否開(kāi)啟flup的信息跟蹤
  • outlog:用于設(shè)置將標(biāo)準(zhǔn)輸出寫(xiě)入到的文件
  • errlog:用于設(shè)置將標(biāo)準(zhǔn)錯(cuò)誤輸出寫(xiě)入到的文件
  • umask:用于設(shè)置在進(jìn)程運(yùn)行時(shí)所用的umask。默認(rèn)是022.

舉例來(lái)說(shuō):

django-admin.py runfcgi socket=/tmp/fcgi.sock method=prefork daemonize=true \
  pidfile=/var/run/django-fcgi.pid

此命令用于在后臺(tái)啟動(dòng)fastCGI,并將pid寫(xiě)入文件中。

【runserver】- subcommand

用于在本機(jī)啟動(dòng)一個(gè)輕量級(jí)的Web server。默認(rèn)情況下,這個(gè)server會(huì)在127.0.0.1上監(jiān)聽(tīng)8000端口。你也可以傳入?yún)?shù)來(lái)改變默認(rèn)配置。

如果你并非特權(quán)用戶(hù),那么你所設(shè)置的端口號(hào)不能低于1024,因?yàn)樾∮?024的端口已經(jīng)被系統(tǒng)預(yù)定了。

一定不要用這個(gè)輕量級(jí)Server作為你的生產(chǎn)環(huán)境下的Server,因?yàn)樗荒苡糜陂_(kāi)發(fā)自測(cè)階段。它既沒(méi)有安全審計(jì)功能,而且又是單線程的。

另外,每來(lái)一個(gè)請(qǐng)求,Web Server都會(huì)從新載入一遍Python代碼,因此如果你的代碼有改動(dòng),不需要重啟Web Server即可生效。

你可以在一個(gè)project中啟動(dòng)多個(gè)fastcgi server,只要設(shè)置不同的端口就可以了。

如果你設(shè)定的IP為默認(rèn)的127.0.0.1,那么你只能從本機(jī)的瀏覽器來(lái)登錄瀏覽,無(wú)法從其他機(jī)器來(lái)訪問(wèn)。為了能讓其他機(jī)器瀏覽本機(jī),需要將IP設(shè)置為目標(biāo)機(jī)器的IP或者0.0.0.0(IPv4地址)或::(IPv6地址)。

在指定IP地址時(shí),也可以使用主機(jī)名或域名來(lái)代替。

【shell】- subcommand

用于開(kāi)啟一個(gè)Python解釋器。

Django默認(rèn)會(huì)使用IPython或bpython。但如果你沒(méi)有安裝它們或者就是要使用簡(jiǎn)裝版的話(huà),可以加上–plain選項(xiàng),即:

django-admin.py shell --plain

【startapp】- subcommand

在當(dāng)前路徑或指定目錄下創(chuàng)建一個(gè)Django app的文件夾結(jié)構(gòu)。

默認(rèn)情況下,文件夾中會(huì)包括module.py文件和其他必備文件。

如下命令用于在特定目錄下創(chuàng)建一個(gè)app:

django-admin.py startapp myapp /Users/jezdez/Code/myapp

【startproject】- subcommand

In Django, Projects can have many apps. Apps can be shared among many projects.

在當(dāng)前目錄或指定位置創(chuàng)建一個(gè)Django project文件夾結(jié)構(gòu)。

默認(rèn)情況下,新文件夾中會(huì)包括manage.py和一系列必備文件。

目標(biāo)位置參數(shù)是可選的參數(shù),可以設(shè)置project所創(chuàng)建的路徑。

例如,如下命令可以在指定位置創(chuàng)建一個(gè)project:

django-admin.py startproject myproject /Users/jezdez/Code/myproject_repo

和startapp命令一樣,--template命令準(zhǔn)許你指定一個(gè)文件夾,文件路徑,或者一個(gè)自定義項(xiàng)目模板的鏈接,關(guān)于對(duì)項(xiàng)目模板的支持可以查看startapp的文檔

下面的例子,在創(chuàng)建myproject項(xiàng)目的時(shí)候,會(huì)在指定的路徑查找模板

django-admin.py startproject --template=/users/jezdez/code/my_project_template myproject

When Django copies the project template files, it also renders certain files through the template engine: the files whose extensions match the --extension option (py by default) and the files whose names are passed with the --name option. The template context used is:

Any option passed to the startproject command
project_name -- the project name as passed to the command
project_directory -- the full path of the newly created project
secret_key -- a random key for the SECRET_KEY setting
Please also see the rendering warning as mentioned for startapp.

syncdb

django-admin.py syncdb

這個(gè)命令將為以安裝的(INSTALLED_APPS)apps創(chuàng)建數(shù)據(jù)表,如果數(shù)據(jù)表還沒(méi)創(chuàng)建的話(huà)。

【擴(kuò)展manage命令】
我們都用過(guò)Django的django-admin.py和manage.py。django-admin.py是一個(gè)命令行工具,可以執(zhí)行一些管理任務(wù),比如創(chuàng)建Django項(xiàng)目。而manage.py是在創(chuàng)建每個(gè)Django project時(shí)自動(dòng)添加在項(xiàng)目目錄下的,只是對(duì)manage.py的一個(gè)簡(jiǎn)單包裝,其功能是將Django project放到sys.path目錄中,同時(shí)設(shè)置DJANGO_SETTINGS_MODULE環(huán)境變量為當(dāng)前project的setting.py文件。


django-admin.py調(diào)用django.core.management來(lái)執(zhí)行命令:

#!/usr/bin/env python
from django.core import management
  
if __name__ == "__main__":
  management.execute_from_command_line()

excute_from_command_line()函數(shù)會(huì)根據(jù)命令行參數(shù)解析出命令的名稱(chēng),根據(jù)命令名稱(chēng)調(diào)用相應(yīng)的Command執(zhí)行命令。Command位于各個(gè)管理模塊的commands模塊下面。

所謂管理模塊,是指在app模塊下的名字為management的模塊。Django通過(guò)django.core.management.find_management_module函數(shù)發(fā)現(xiàn)"管理模塊":

django.core.management.find_management_module()
def find_management_module(app_name):
  """
  Determines the path to the management module for the given app_name,
  without actually importing the application or the management module.

  Raises ImportError if the management module cannot be found for any reason.
  """
  parts = app_name.split('.')
  parts.append('management')
  parts.reverse()
  part = parts.pop()
  path = None

然后通過(guò)django.core.management.find_commands函數(shù)找到命令類(lèi)。find_commands函數(shù)會(huì)在管理模塊下查找.py文件,并將.py文件的名稱(chēng)匹配到命令名稱(chēng):

def find_commands(management_dir):
  """
  Given a path to a management directory, returns a list of all the command
  names that are available.

  Returns an empty list if no commands are defined.
  """
  command_dir = os.path.join(management_dir, 'commands')
  try:
    return [f[:-3] for f in os.listdir(command_dir)
      if not f.startswith('_') and f.endswith('.py')]
  except OSError:
  return []

最后,通過(guò)django.core.management.load_command_class函數(shù)加載該.py文件中的Command類(lèi):

def load_command_class(app_name, name):
  """
  Given a command name and an application name, returns the Command
  class instance. All errors raised by the import process
  (ImportError, AttributeError) are allowed to propagate.
  """
  module = import_module('%s.management.commands.%s' % (app_name, name))
  return module.Command()

在執(zhí)行命令的時(shí)候,會(huì)執(zhí)行相應(yīng)Command類(lèi)的handle方法。所有的Command類(lèi)都應(yīng)該是django.core.management.base.BaseCommand的直接或間接子類(lèi)。

原理搞清楚了,擴(kuò)展manage命令就很容易了。創(chuàng)建一個(gè)app并加入到settings的INSTALLED_APPS中,在該app下面創(chuàng)建management.commands模塊,并創(chuàng)建hello.py文件:

from django.core.management.base import BaseCommand, CommandError
from django.db import models
#from placeholders import *
import os
  
class Command(BaseCommand):
   def handle(self, *args, **options):
     print 'hello, django!'


就可以使用hello命令了:

$ python manage.py hello
hello, django!

相關(guān)文章

  • python 解決selenium 中的 .clear()方法失效問(wèn)題

    python 解決selenium 中的 .clear()方法失效問(wèn)題

    這篇文章主要介紹了python 解決selenium 中的 .clear()方法失效問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • Django?使用VScode?創(chuàng)建工程的詳細(xì)步驟

    Django?使用VScode?創(chuàng)建工程的詳細(xì)步驟

    這篇文章主要介紹了Django?使用VScode?創(chuàng)建工程,創(chuàng)建Django 項(xiàng)目,可以和虛擬環(huán)境放在同一目錄,也可以放在虛擬環(huán)境的文件夾里,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • Python?property裝飾器使用案例介紹

    Python?property裝飾器使用案例介紹

    這篇文章主要介紹了Python?@property裝飾器的用法,在Python中,可以通過(guò)@property裝飾器將一個(gè)方法轉(zhuǎn)換為屬性,從而實(shí)現(xiàn)用于計(jì)算的屬性,下面文章圍繞主題展開(kāi)更多相關(guān)詳情,感興趣的小伙伴可以參考一下
    2022-10-10
  • python中正則的使用指南

    python中正則的使用指南

    正則表達(dá)式(RE)是一種小型的、高度專(zhuān)業(yè)化的編程語(yǔ)言,它內(nèi)嵌在Python中,并通過(guò)re模塊實(shí)現(xiàn)。下面我們就來(lái)詳細(xì)探討下Python中正則表達(dá)式的使用
    2016-12-12
  • python 爬蟲(chóng)如何實(shí)現(xiàn)百度翻譯

    python 爬蟲(chóng)如何實(shí)現(xiàn)百度翻譯

    這篇文章主要介紹了python 爬蟲(chóng) 簡(jiǎn)單實(shí)現(xiàn)百度翻譯的示例,幫助大家更好的理解和使用python 爬蟲(chóng),感興趣的朋友可以了解下
    2020-11-11
  • Python利用QQ郵箱發(fā)送郵件的實(shí)現(xiàn)方法(分享)

    Python利用QQ郵箱發(fā)送郵件的實(shí)現(xiàn)方法(分享)

    下面小編就為大家?guī)?lái)一篇Python利用QQ郵箱發(fā)送郵件的實(shí)現(xiàn)方法(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • 使用Python開(kāi)發(fā)個(gè)京東上搶口罩的小實(shí)例(僅作技術(shù)研究學(xué)習(xí)使用)

    使用Python開(kāi)發(fā)個(gè)京東上搶口罩的小實(shí)例(僅作技術(shù)研究學(xué)習(xí)使用)

    這篇文章主要介紹了使用Python開(kāi)發(fā)個(gè)京東上搶口罩的小實(shí)例(僅作技術(shù)研究學(xué)習(xí)使用),需要的朋友可以參考下
    2020-03-03
  • Python爬取網(wǎng)頁(yè)中的圖片(搜狗圖片)詳解

    Python爬取網(wǎng)頁(yè)中的圖片(搜狗圖片)詳解

    沒(méi)想到python是如此強(qiáng)大,令人著迷,以前看見(jiàn)圖片總是一張一張復(fù)制粘貼,現(xiàn)在好了,學(xué)會(huì)python就可以用程序?qū)⒁粡垙垐D片,保存下來(lái)。下面這篇文章主要給大家介紹了利用Python3.6爬取搜狗圖片網(wǎng)頁(yè)中圖片的相關(guān)資料,需要的朋友可以參考下。
    2017-03-03
  • python實(shí)現(xiàn)邏輯回歸的方法示例

    python實(shí)現(xiàn)邏輯回歸的方法示例

    這篇文章主要介紹了python實(shí)現(xiàn)邏輯回歸的方法示例,這是機(jī)器學(xué)習(xí)課程的一個(gè)實(shí)驗(yàn),整理出來(lái)共享給大家,需要的朋友可以參考學(xué)習(xí),下來(lái)要一起看看吧。
    2017-05-05
  • Python中關(guān)于logging模塊的學(xué)習(xí)筆記

    Python中關(guān)于logging模塊的學(xué)習(xí)筆記

    在本篇文章里小編給大家整理的是一篇關(guān)于Python中l(wèi)ogging模塊相關(guān)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們可以參考下。
    2020-06-06

最新評(píng)論