笨鸟编程-零基础入门Pyhton教程

 找回密码
 立即注册

编写你的第一个 Django 程序 第1部分

发布者: 三寸日光



激活模型

刚才那点模型代码提供给 Django 大量信息。有了这些 Django 就可以做:

  • 为该应用创建对应的数据库架构 (CREATE TABLE statements) 。
  • 为 Poll 和 Choice 对象创建 Python 访问数据库的 API 。

但首先,我们需要告诉我们的项目已经安装了 polls 应用。

哲理

Django 应用是“可插拔的”:你可以在多个项目使用一个应用,你还可以分发应用,因为它们没有被捆绑到一个给定的 Django 安装环境中。

再次编辑 settings.py 文件,在 INSTALLED_APPS 设置中加入 'polls' 字符。因此结果如下所示:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    # 'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
    'polls',
)

现在 Django 已经知道包含了 polls 应用。让我们运行如下命令:

python manage.py sql polls

你将看到类似如下所示内容 ( 有关投票应用的 CREATE TABLE SQL 语句 ):

BEGIN;
CREATE TABLE "polls_poll" (
    "id" serial NOT NULL PRIMARY KEY,
    "question" varchar(200) NOT NULL,
    "pub_date" timestamp with time zone NOT NULL
);
CREATE TABLE "polls_choice" (
    "id" serial NOT NULL PRIMARY KEY,
    "poll_id" integer NOT NULL REFERENCES "polls_poll" ("id") DEFERRABLE INITIALLY DEFERRED,
    "choice_text" varchar(200) NOT NULL,
    "votes" integer NOT NULL
);
COMMIT;

请注意如下事项:

  • 确切的输出内容将取决于您使用的数据库会有所不同。
  • 表名是自动生成的,通过组合应用名 (polls) 和小写的模型名 – poll 和 choice 。 ( 你可以重写此行为。)
  • 主键 (IDs) 是自动添加的。( 你也可以重写此行为。)
  • 按照惯例,Django 会在外键字段名上附加 "_id" 。 ( 是的,你仍然可以重写此行为。)
  • 外键关系由 REFERENCES 语句显示声明。
  • 生成 SQL 语句时针对你所使用的数据库,会为你自动处理特定于数据库的字段,例如 auto_increment (MySQL), serial (PostgreSQL), 或 or integer primary key (SQLite) 。 在引用字段名时也是如此 – 比如使用双引号或单引号。 本教材的作者所使用的是 PostgreSQL,因此例子中输出的是 PostgreSQL 的语法。
  • 这些 sql 命令其实并没有在你的数据库中运行过 - 它只是在屏幕上显示出来,以便让你了解 Django 认为什么样的 SQL 是必须的。 如果你愿意,可以把 SQL 复制并粘帖到你的数据库命令行下去执行。 但是,我们很快就能看到, Django 提供了一个更简单的方法来执行此 SQL 。

如果你感兴趣,还可以运行以下命令:

  • python manage.py validate – 检查在构建你的模型时是否有错误。
  • python manage.py sqlcustom polls – 输出为应用定义的任何 custom SQL statements ( 例如表或约束的修改 ) 。
  • python manage.py sqlclear polls – 根据存在于你的数据库中的表 (如果有的话) ,为应用输出必要的 DROP TABLE 。
  • python manage.py sqlindexes polls – 为应用输出 CREATE INDEX 语句。
  • python manage.py sqlall polls – 输出所有 SQL 语句:sql, sqlcustom, 和 sqlindexes 

看看这些输出的命令可以帮助你理解框架底层实际上处理了些什么。

现在,再次运行 syncdb 命令在你的数据库中创建这些模型对应的表:

python manage.py syncdb

syncdb 命令会给在 INSTALLED_APPS 中有但数据库中没有对应表的应用执行 sqlall 操作。 该操作会为你上一次执行 syncdb 命令以来在项目中添加的任何应用创建对应的表、初始化数据和创建索引。 syncdb 命令只要你喜欢就可以任意调用,并且它仅会创建不存在的表。

请阅读 django-admin.py documentation 文档了解 manage.py 工具更多的功能。


Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )

GMT+8, 2024-9-8 11:31 , Processed in 0.211881 second(s), 17 queries .

© 2001-2020

返回顶部