The Django Book

附录G 管理实用工具

django-admin.py 是Django管理任务的命令行工具。本附录简述它的多个特性。

LNVKgB <a href=”http://vbksqrondtwn.com/“>vbksqrondtwn</a>, [url=http://bmvlidwwfxwa.com/]bmvlidwwfxwa[/url], [link=http://hpsplsneovpa.com/]hpsplsneovpa[/link], http://txkxvkmiotqh.com/

  • 将你项目所在路径加入 sys.path .

  • 设置环境变量 DJANGO_SETTINGS_MODULE , 使其指向你项目中的 settings.py

如果你是使用 setup.py 来安装Django的,那么 django-admin.py 应该已经在你的系统路径中了. 如果没有,你可以在你python安装路径下的 site-packages/django/bin 中找到它. 可以在某个系统路径上建立一个指向该文件的符号链接,如在 /usr/local/bin

对于不能建立符号链接的Windows用户, 可以把 django-admin.py 拷贝到环境变量 PATH 对应的某个目录中,或者编辑环境变量 PATH (在控制面板->系统->高级->环境变量), 添加 django-admin.py 所在路径.

一般来说,在单一的Django项目中,使用 manage.py 比较方便。如果需要在多个Django 项目(setting files)中切换,可以使用 django-admin.py , 结合环境变量 DJANGO_SETTINGS_MODULE 或选项 --settings

为保持一致,在本附录中的例子中均使用 django-admin.py , 所有例子都可以换用 manage.py

用法

基本用法如下:

django-admin.py action [options]

或者:

manage.py action [options]

其中 action 是稍后给出的 action 列表中的一个, options 为可选项,可以留空或者是稍后给出的 options 列表中的一个

运行 django-admin.py --help 可以看到帮助信息,其中带有精简的 action 和 option 列表

多数 action 接受 app name 的列表为参数, app name 是指包含你各个模块的包的 base name。 比方说,如果你的环境变量 INSTALLED_APPS 中含有 'mysite.blog' , 那么app name就是 blog .

可选的 action

以下列出了可以使用的action

adminindex [appname appname ]

显示指定程序的admin-index模版代码。如果你想定制自已风格的admin首页,可以使用admin-index模板代码。

createcachetable [tablename] 新增快取資料表[表的名稱]

为数据库缓存后台创建名为 tablename 的缓存表,详见第13章关于缓存的部分

FLfYG4 <a href=”http://vaezfkqrgtwi.com/“>vaezfkqrgtwi</a>, [url=http://akxjprqekcvy.com/]akxjprqekcvy[/url], [link=http://mygpmoogexng.com/]mygpmoogexng[/link], http://kdkspxlzpjin.com/

为你在`DATABASE_ENGINE` 中定义的数据库运行一个命令行客户端。连接所需要的参数定义在`DATABASE_USER`` , ``DATABASE_PASSWORD``中。如下。

System Message: WARNING/2 (<string>, line 125); backlink

Inline literal start-string without end-string.

  • 对于 PostgreSQL, 它运行``psql`` 命令

  • 对于 MySQL, 它运行``mysql`` 命令

  • 对于SQLite, 它运行``sqlite3`` 命令

这个命令假设这些程序都在你的``PATH``中,所以只要简单的调用程序名(psql , mysql , 或 sqlite3 )就可以找到它们。无法手工定义这些程序的位置。

diffsettings

显示当前settings文件和Django的标准settings文件的不同。

没有在标准settings文件中出现的设置后面会跟着``”###”`。例如,标准settings没有定义``ROOT_URLCONF``,因此,在``diffsettings``的输出中``ROOT_URLCONF``之后会跟着“###”```

System Message: WARNING/2 (<string>, line 154); backlink

Inline literal start-string without end-string.

System Message: WARNING/2 (<string>, line 154); backlink

Inline interpreted text or phrase reference start-string without end-string.

RhfDXL <a href=”http://nwekewqwmpmf.com/“>nwekewqwmpmf</a>, [url=http://urrjvbmxkjzs.com/]urrjvbmxkjzs[/url], [link=http://ukjmwtvftncx.com/]ukjmwtvftncx[/link], http://zizkdnkhaixj.com/

dumpdata [appname appname ] 將某個應用程式的資料下載回來

輸出檔案到標準輸出。關於這個應用程式資料庫裏的所有資料。

默认的,数据库会被导出为JSON格式。如果你导出其它格式,使用``—format``选项( 例如,``format=xml`` )。你可以指定任何Django序例后端(包括任何用户自定义的序例后端 ,定义在``SERIALIZATION_MODULES``中 ). --indent 选项,用来更优美的显示输出.

如果没有指定程序名,那么所有安装的程序都会被导出

``dumpdata``的输出文件,可以用做``loaddata``的输入文件。

System Message: WARNING/2 (<string>, line 179); backlink

Inline literal start-string without end-string.

刷新

讓資料庫回到一個初始狀況,約是在syncdb 被執行之後。這表示所有資料將從資料裏被移除,任何postsynchronization 處理將會被再處理。然後初始資料將會再被寫入一次。

检查数据库

將所有的資料表指出來,按你指名的資料庫名稱設定,輸出一個Django 模型的模組。(a ``models.py``檔) 到標準的輸出。

System Message: WARNING/2 (<string>, line 195); backlink

Inline literal start-string without end-string.

用它。假如你已經有一個老字號的資料庫在用,且你想用Django.這個指令檔將偵測這個資料庫,然後為每一個資料表新建一個模型

你可能期待,這個新建的模型將有表裏所有欄位所對應的屬性。注意:inspectdb有一些特別的狀況在欄位名稱的輸出上。

假如inspectdb不能標定行的型別和模型裏欄位的型別,它將用TextField,然後寫入一個Python 註解,這欄位型別我是用猜的。在這生成的模型的欄位旁邊

假如資料庫的欄位名稱是Python的保留字(如 pass,class,for),那inspectdb會加上_field到這個性質名稱的後面。例如,假如一個表有一個欄位叫做for,這產生的模型就會有一個欄位叫做for_field,對應到db_column的性質是for,inspectdb將會填入Python註解,欄位被改名字了,因為這是Python的保留字。加上旁邊

這項特質是表示捷徑,不是有受限的模型產生,在你執行完後,你將想要關心一下這自動產生的模型來客製化。特別是,你將需要從新安排這些模型,建立之間的關係,和恰當的排序

主鍵值是自動偵測的,對PostgreSQL, MySQL, and SQLite,在這種情況下,Django 會視需要將這些設定設為primary_key=True。

inspectdb,在連上PostgreSQL, MySQL, and SQLite時,外鍵偵測只做用在PostgreSQL 及MySQL 資料表裏的某些特定型態!

載入數據【填補 填充】

尋找和載入一些已命名的填充的內容到資料庫裏

一個填補,是一個檔案的收集,包含著資料庫裏的連續資料。每一個填補,有一個唯一的名稱,然而,填補裏的檔可以放在多個檔案夾裏,給多個應用程式補資料用。

Django 會找關於填補的三個地方:

在每一個已安裝的程式裏的fixtures目錄

在FIXTURE_DIRS設定下的,任何目錄

在字面上的路徑是取名為fixture的

Django 將載入所有的填補,在這些位置裏被發現到,且符合所提供的填補的名字。

假如 已命名的填補有一個副檔名,只有格式對的填補會被載入。例如下列

django-admin.py loaddata mydata.json

將只會載入JSON 填補叫做mydata。這個填補的延伸符合這序列子登錄的名稱(例如json或xml)

假如你省略這個副檔名,Django 將尋找所有的可能的填補型態,對於一個符合的填補。例如,下列

django-admin.py loaddata mydata

將會尋找任何填補命名為mydata。假如一個填補的目錄夾有一個mydata.json。這個填補將被載入用, JSON的方式。然而,假如兩個填補取一樣的名字,但有不一樣的填補副檔名,如(mydata.json` and ``mydata.xml在同一個目錄下被發現),填補的安裝動作將會取消,然後其他的已安裝數據在loaddata呼叫時,將會從數據庫被移除掉。

System Message: WARNING/2 (<string>, line 303); backlink

Inline literal start-string without end-string.

已命名的填補可以包含子目錄,這些目錄將被 包含進搜尋的路徑裏。如下,舉例

django-admin.py loaddata foo/bar/mydata.json

上面的语句将会查询每一个已经安装的应用的``<appname>/fixtures/foo/bar/mydata.json`` ,``FIXTURE_DIRS`` 中的每一个``<dirname>/foo/bar/mydata.json`` ,以及原义路径``foo/bar/mydata.json`` 的值

Note that the order in which fixture files are processed is undefined. However, all fixture data is installed as a single transaction, so data in one fixture can reference data in another fixture. If the database back-end supports row-level constraints, these constraints will be checked at the end of the transaction.

The dumpdata command can be used to generate input for loaddata .

MySQL and Fixtures

Unfortunately, MySQL isnt capable of completely supporting all the features of Django fixtures. If you use MyISAM tables, MySQL doesnt support transactions or constraints, so you wont get a rollback if multiple transaction files are found, or validation of fixture data. If you use InnoDB tables, you wont be able to have any forward references in your data files MySQL doesnt provide a mechanism to defer checking of row constraints until a transaction is committed.

reset [appname appname ]

Executes the equivalent of sqlreset for the given app names.

runfcgi [options]

Starts a set of FastCGI processes suitable for use with any Web server that supports the FastCGI protocol. See Chapter 20 for more about deploying under FastCGI.

此命令需要Python的FastCGI模块,来自“flup”(`http://www.djangoproject.com/r/flup/`)。

System Message: WARNING/2 (<string>, line 385); backlink

Inline interpreted text or phrase reference start-string without end-string.

runserver [optional port number, or ipaddr:port]

在本地启动轻量级的开发Web服务器。默认情况下,该服务器监听127.0.0.1的8000端口,可以传入参数指定监听的IP地址与端口号

如果你使用普通用户权限运行该命令(推荐方式),你可能会没有权限来监听低端口。低端口往往只有超级用户(root)才能监听。

注意:

不要在最终产品中使用该服务器 . 该服务器没有通过安全与性能测试,并且也不打算通过。Django开发者的主要任务是制作web框架,而不是web服务器,改进该服务器使之可以在最终产品中应用超出了Django的范围。

在需要的时候,该开发服务器会为每个请求自动重新加载Python代码。所以当你改动代码之后不需要重新启动它就可以生效。

该服务器启动后,在服务器运行的同时更改Python代码时,该服务器会验证你安装的所有模块(参考马上就要讲到的 validate 命令). 如果发现错误,服务器会把它们输出到标准输出,但是服务器并不会停止。

你可以同时运行许多个服务器实例,只要它们各自监听不同的端口。要运行多个服务器实例,只要多次执行 django-admin.py runserver 就可以了。

值得一提的是默认的IP地址 127.0.0.1 无法从网络上的其他机器访问到,要使服务器可以被网络中的其他服务器访问到,使用真实IP地址(例如192.168.2.1)或者0.0.0.0

例如,要在127.0.0.1的7000端口运行该服务器,使用如下方法:

django-admin.py runserver 7000

或者在IP地址1.2.3.4的7000端口运行,使用:

django-admin.py runserver 1.2.3.4:7000

使用开发服务器支持静态文件访问

开发中的服务器默认不对你站点的任何静态文件提供服务(如CSS文件,图片,在“MEDIA_ROOT_URL”下的文件,等等)。如果要指定Django对这些静态文件服务,请参阅`http://www.djangoproject.com/documentation/0.96/static_files/`

System Message: WARNING/2 (<string>, line 468); backlink

Inline interpreted text or phrase reference start-string without end-string.

关闭自动加载

在开发服务器运行情况下,如果要关闭代码自动载入,用 --noreload 选项, 像这样:

django-admin.py runserver --noreload

shell

启动Python交互解释器.

Django将使用IPython(http://ipython.scipy.org/)(如果已经安装了IPython)。如果应经安装了IPython,但是想使用平常的Python解释器,可以使用’‘—plain’‘选项,就像这样:

django-admin.py shell --plain

sql [appname appname ]

为指定应用名称打印“CREATE TABLE” 的sql声明。

sqlall [appname appname ]

为指定应用名称打印“CREATE TABLE”和初始化数据的sql声明。

参见“sqlcustom”关于如何指定初始化数据的解释描述。

sqlclear [appname appname ]

为给定的应用名打印``DROP TABLE``SQL语句。

sqlcustom [appname appname ]

为给定应用名称打印自定义的sql声明。

对于每个指定应用中的每个模型,此命令查找文件“<appname>/sql/<modelname>.sql”,这里“<appname>”是给定的应用名称,“<modelname>”是小写的模型名称。比如,如果你有一个应用“news”,包含一个“Story”模型,那么”sqlcustom”将会尝试读取文件“news/sql/story.sql”并追加其到此命令的输出。

每个给出的sql文件应该包含合法的sql。当所有的模型数据表创建声明都已经执行完成时sql文件会直接传送至数据库。使用这个sql钩子以修改任何数据表,或者输入任何sql函数到数据库。

注意:SQL文件的处理顺序并没有定义。

sqlindexes [appname appname ]

为给定的应用名打印 CREATE INDEX SQL 语句.

sqlreset [appname appname ]

对给定的应用名,打印``DROP TABLE``SQL语句,然后是``CREATE TABLE``SQL语句。

sqlsequencereset [appname appname ]

对给定的应用名,打印重置序列的SQL语句。

只有当你使用PostgreSQL并且已经手动输入数据时,你将需要这些sql。当你那样做时,PostgreSQL的主键序列不会从数据库同步,并且此命令所提交的sql将会清除它。

startapp [appname]

在当前目录为给定的应用名创建Django应用程序目录结构.

startproject [projectname]

在当前目录为给定的项目名创建Django项目目录结构.

syncdb

為所有的應用在``INSTALLED_APPS``中不存在的表,創建數據庫表

用這命令當你增加新的應用到你的項目,想要安裝他們到數據庫,

當你開始一個新的項目,運行這個命令安裝到默認的應用

如果你正在安装“django.contrib.auth”应用,“syncdb”将会给出立即创建超级用户的选项。“syncdb”也将会搜索并安装任何命名为“initial_data”的夹具 。关于夹具数据文件的规范参见“loaddata”文档。

测试 。。。。

为所有已安装模型发现和执行测试。当写作本书时测试工作仍然处于开发阶段,因此想了解更多你需要阅读在线文档:`http://www.djangoproject.com/documentation/0.96/testing/` 。

验证

根据 INSTALLED_APPS 的设置值, 验证所有的安装模块, 并将 验证错误打印到标准输出上.

可用选项

下面的这些节将会列举 django-admin.py 工具可以带的各个选项.

設置

示例用法:

django-admin.py syncdb --settings=mysite.settings

显示地指定所用的设置模块。该设置模块应该遵循 Python包语法(例如,“mysite.settings”)。如果不指定,“django-admin.py”将会使用环境变量“DJANGO_SETTINGS_MODULE”。

注意这个选项在 manage.py 中不是必须的, 因为它负责为您设定``DJANGO_SETTINGS_MODULE`` .

python的目录

示例用法:

django-admin.py syncdb --pythonpath='/home/djangoprojects/myproject'

添加给定路径到Python的导入搜索路径. 如果没有提供, django-admin.py 将使用 PYTHONPATH 环境变量.

注意, 这个选项在 manage.py 中不是必须的, 因它负责为您设定Python路径.

格式化

示例用法:

django-admin.py dumpdata --format=xml

指定一个要使用的输出格式. 提供的名字必须是一个注册的serializer的名字.

help

显示一个包含所有可用功能和选项的简要列表.

缩进

示例用法:

django-admin.py dumpdata --indent=4

指定友好输出(优美输出/格式化输出)时用于缩进的空格数量。默认的输出将不会是友好输出。友好输出只在提供缩进选项时可用。

noinput

表示将不会提示你做任何输入。这一点在“django-admin”脚本作为一个无人值守的自动脚本执行时很有用。

noreload

当运行开发服务器的时候, 禁止使用自动加载器.

version

显示当前的Django版本.

示例输出:

0.9.1
0.9.1 (SVN)

verbosity

示例用法:

django-admin.py syncdb --verbosity=2

确定通知数量和打印到控制台的调试信息。0代表没有输出,1代表正常输出,2代表详细输出。

adminmedia

示例用法:

django-admin.py --adminmedia=/tmp/new-admin-style/

用来告诉Django当使用自带的开发服务器的时候,如何为admin界面去寻找不同的CSS和JavaScript文件。通常这些文件都是存放在Django的源代码树的中,但是因为有些设计者为他们自己的网站使用定制了这些文件,而这个选项允许你试着取消这些定制的版本。

Copyright 2006 Adrian Holovaty and Jacob Kaplan-Moss.
This work is licensed under the GNU Free Document License.
Hosting graciously provided by media temple
Chinese translate hosting by py3k.cn.