附录 G 管理实用工具

优质
小牛编辑
135浏览
2023-12-01

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

一般情况下,通过 manage.py 这个接口来间接使用 django-admin.py 。 manage.py 由每个

Django 项目自动创立,对 django-admin.py 做了简单的包装。在将委托传递给 django-admin.py 之前,``manage.py``完成两项工作:

  • 将你项目所在路径加入 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 章关于缓存的部分

    dbshell 對資料庫下指令的 shell

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

    System Message: WARNING/2 (<string>, line 126); 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 155); backlink

Inline literal start-string without end-string.

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

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

注意,如果你曾留意过标准的完整列表,就可以发现 Django 的标准 settings 存在于

``django.conf.global_settings``,

dumpdata [appname appname ] 將某個應用程式的資料下載回來輸出檔案到標準輸出。關於這個應用程式資料庫裏的所有資料。

默认的,数据库会被导出为 JSON 格式。如果你导出其它格式,使用``—format``选项( 例如,

``format=xml`` )。你可以指定任何 Django 序例后端(包括任何用户自定义的序例后端 ,定义在``SERIALIZATION_MODULES``中 ). --indent 选项,用来更优美的显示输出.

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

``dumpdata``的输出文件,可以用做``loaddata``的输入文件。 System Message: WARNING/2 (<string>, line 180); backlink

Inline literal start-string without end-string.刷新

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

检查数据库

將所有的資料表指出來,按你指名的資料庫名稱設定,輸出一個 Django 模型的模組。(a

``models.py``檔) 到標準的輸出。

System Message: WARNING/2 (<string>, line 196); 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 304); backlink

Inline literal start-string without end-string.

已命名的填補可以包含子目錄,這些目錄將被 包含進搜尋的路徑裏。如下,舉例 django-admin.py loaddata foo/bar/mydata.json

will search <appname>/fixtures/foo/bar/mydata.json for each installed application,

<dirname>/foo/bar/mydata.json for each directory in FIXTURE_DIRS , and the literal path 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.

This command requires the Python FastCGI module from flup (http://www.djangoproject.com/r/flup/).

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 474); backlink

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

关闭自动加载

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

shell

启动 Python 交互解释器.

Django will use IPython (http://ipython.scipy.org/) if its installed. If you have IPython installed and want to force use of the plain Python interpreter, use the

--plain option, like so: django-admin.py shell --plain

sql [appname appname ]

Prints the CREATE TABLE SQL statements for the given app names.

sqlall [appname appname ]

Prints the CREATE TABLE and initial-data SQL statements for the given app names.

Refer to the description of sqlcustom for an explanation of how to specify initial data.

sqlclear [appname appname ]

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

sqlcustom [appname appname ]

Prints the custom SQL statements for the given app names.

For each model in each specified app, this command looks for the file

<appname>/sql/<modelname>.sql , where <appname> is the given app name and <modelname> is the models name in lowercase. For example, if you have an app news that includes a Story model, sqlcustom will attempt to read a file news/sql/story.sql and append it to the output of this command.

Each of the SQL files, if given, is expected to contain valid SQL. The SQL files are piped directly into the database after all of the models table-creation statements have been executed. Use this SQL hook to make any table modifications, or insert any SQL functions into the database.

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

sqlindexes [appname appname ]

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

sqlreset [appname appname ]

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

sqlsequencereset [appname appname ]

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

Youll need this SQL only if youre using PostgreSQL and have inserted data by hand. When you do that, PostgreSQLs primary key sequences can get out of sync from whats in the database, and the SQL emitted by this command will clear it up.

startapp [appname]

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

startproject [projectname]

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

syncdb

為所有的應用在``INSTALLED_APPS``中不存在的表,創建數據庫表用這命令當你增加新的應用到你的項目,想要安裝他們到數據庫,當你開始一個新的項目,運行這個命令安裝到默認的應用

If youre installing the django.contrib.auth application, syncdb will give you the option of creating a superuser immediately. syncdb will also search for and install any fixture named initial_data . See the documentation for loaddata for details on the specification of fixture data files.

test

Discovers and runs tests for all installed models. Testing was still under development when this book was being written, so to learn more youll need to read the documentation online at http://www.djangoproject.com/documentation/0.96/testing/.

验证

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

可用选项

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

示例用法:

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

Explicitly specifies the settings module to use. The settings module should be in Python package syntax (e.g., mysite.settings ). If this isnt provided,

django-admin.py will use the DJANGO_SETTINGS_MODULE environment variable.

注意这个选项在 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

Specifies the number of spaces that will be used for indentation when pretty-printing output. By default, output will not be pretty-printed. Pretty-printing will only be enabled if the indent option is provided.

noinput

Indicates you will not be prompted for any input. This is useful if the django-admin script will be executed as an unattended, automated script.

noreload

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

version

显示当前的 Django 版本.示例输出:

0.9.1

      1. (SVN)

        verbosity

        示例用法:

        django-admin.py syncdb --verbosity=2

        Determines the amount of notification and debug information that will be printed to the console. 0 is no output, 1 is normal output, and 2 is verbose output.

        adminmedia

        示例用法:

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

        用来告诉 Django 当使用自带的开发服务器的时候,如何为 admin 界面去寻找不同的 CSS 和

        JavaScript 文件。通常这些文件都是存放在 Django 的源代码树的中,但是因为有些设计者为他们自己的网站使用定制了这些文件,而这个选项允许 你试着取消这些定制的版本。