Python's Archiver

為方便港臺同胞閱覽,Python中國特別推出簡繁體內容轉換功能

zjxplq 发表于 2008-11-14 22:36

写第一个Django app(一)

通过这个教程,创建一个简单的投票应用。
它包括两个部分:
  1、一个公共站点可以进行看到投票对象,并能为它投票
  2、一个admin站点能让你增加、修改与删除投票对象
假定你已安装了Django。

[size=4][b]建立一个project[/b][/size]

  如果是第一次使用Django,你得关心一些初始setup。建立一个django工程,需要自动生成一些代码,为django实例建立一些配置,包括数据库的配置,django的选项与应用相关的设置。
  在命令行方式下,使用cd进入想存放代码的文件夹,然后运行命令django-admin.py startproject mysite。这会在当前文件夹中创建名为mysite的文件夹。
  如果是通过python setup.py来安装django的话,django-admin.py会在系统路径中。如果没有加到环境变量path中,你能在site-package/django/bin中发现这个文件。
  让我们看看startproject创建了什么:[code]
  mysite/
    __init__.py
    manage.py
    settings.py
    urls.py
[/code]这些文件的介绍:
  __init__.py:这是个空文件,它告诉python这个文件夹作为一个python包。
  manage.py:是一个命令行工具,让你能用多种方式与django工程交互。详见[url=http://docs.djangoproject.com/en/dev/ref/django-admin/#ref-django-admin]django-admin.py and manage.py[/url]
  settings.py:是django工程的配置文件。Django settings告诉你设置如何工作。
  urls.py:是为django工程定义URL。详见[url=http://docs.djangoproject.com/en/dev/topics/http/urls/#topics-http-urls]URL dispatcher[/url]

[size=4][b]开发服务器[/b][/size]

  进入mysite文件夹,运行命令python manage.py runserver。在命令行中你会看到如下输出:[code]Validating models...
0 errors found.

Django version 1.0, using settings 'mysite.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
[/code]此文字说明 Django 服务器已启动,可以用浏览器访问 [url]http://127.0.0.1:8000/[/url] ,如果一切正常,你将会看到 Django 的起始页。It worked!
设置数据库
接下来,编辑 settings.py 文件。这个文件是一个普通的 Python 模块,包含模块级别的变量来规定 Django 设置。现在我们修改关于数据库的设置连接参数,去吻合你将使用的数据库。
DATABASE_ENGINE -- 数据库引擎,常见的有:"postgresql_psycopg2"、"mysql" 或 "sqlite3"。还可选择 "postgresql" 或 "oracle"。 DATABASE_NAME -- 数据库名称。若使用 SQLite3,数据库名称是数据库文件名和其保存的绝对路径。 DATABASE_USER -- SQLite3 不用修改,为空。 DATABASE_PASSWORD -- 默认为 localhost。SQLite3 不用修改。 DATABASE_HOST -- 默认为 default。SQLite3 不用修改。
使用 SQLite 数据库最简单,设置 DATABASE_ENGINE 为 sqlite3. 若使用其他类型的数据库,在此应通过命令创建新的数据库。 当你编辑 settings.py 文件时,顺便注意一下文件底部 INSTALLED_APPS 设置,默认包含如下 apps:
django.contrib.auth django.contrib.contenttypes django.contrib.sessions django.contrib.sites
这些是 Django 项目默认包含的应用,比如认证系统、内容类型框架、session 框架、多网站管理的应用,这些 app 独立存在,可以根据需要保留或删除,也可应用在其他项目中。 每个 app 至少对应一个数据库表,我们在 mysite 目录中运行如下命令来生成数据库表:
python manage.py syncdbsyncdb 会搜索 INSTALLED_APPS 中的所有 app,生成必要的书库据表。你会看到提示询问是否要为认证系统创建一个超级用户,输入 yes,根据提示完成。
创建模型
我们现在已经有了一个 mysite 的项目环境,接下来让我们做点事情。
你在 Django 写的每个应用都包含一个 Python package,以特定规则保存在你的 Python 目录中。Django 通过一个工具来自动生成 app 应用的基本目录,所以你可以专心编写代码而不用担心如何创建目录。
��目(project)与应用(app) 项目可以包含多个应用,一个应用可存在于多个项目中。应用,可以是 blog 系统,公共记录数据库,或是一个简单的投票系统等等。 在这个教程中,我们将在 mysite 中创建简单的投票 poll 应用。结果这个应用被绑定在项目中,也就是通过 mysite.polls 引用投票应用。在后面的教程中,我们会讨论如何包装发布这个应用。
为了创建名为 polls 的应用,确定在 mysite 的目录中,输入命令:
python manage.py startapp polls这会创建一个名为 polls 的目录包含应用基本文件,其中包括:
polls/    __init__.py    models.py    views.py我们通过修改 models.py 文件,来新建两个模型:Poll 和 Choice。模型 Poll 包含问题和发布时间。模型 Choice 包含选择文本和投票数;且每个选择被指定到一个投票上。事实上,即新建两个 Python 类。修改 models.py 文件为如下代码所示:
from django.db import modelsclass Poll(models.Model):    question = models.CharField(max_length=200)    pub_date = models.DateTimeField('date published')class Choice(models.Model):    poll = models.ForeignKey(Poll)    choice = models.CharField(max_length=200)    votes = models.IntegerField()注:在 Django 0.96 之前的版本中,max_length 应改为 maxlength。 代码很直观。每个模型即是一个类,是 django.db.models.Model 的子类。每个模型有不同数量的类变量,每个变量对应一个数据库字段。
每个字段是 Field 类的一个实例,比如,CharField 是字符字段,而 DateTimeField 是日期时间字段。这会告诉 Django 每个字段的类型。
每个字段实例的名称,比如 question 和 pub_date,也将是数据库中列的名称。
一些字段类需要参数。CharField,比如,就需要参数 max_length。这不仅应用在数据库表中,也是一个输入数据时验证条件。
最后,ForeignKey 表示数据库表的关系。这告诉 Django 每个 Choice 对应一个 Poll。Django 支持所有普遍的数据库关系:多对一、多对多和一对一关系。
激活模型
这么简短的模型代码告诉 Django 很多信息。有了它,Django 可以:
为这个应用创建数据库表; 创建 Python 数据库操作的 API,来调用 Poll 和 Choice 对象。 但是首先,我们需要告诉项目 polls 应用已被安装。
哲学 Django 的 app 是可插拔的:你可以将同一 app 应用在多个项目中,你也可以发布 app 为他人使用,因为 app 不必绑定至已有 Django 安装。 再次编辑 settings.py 文件,在 INSTALLED_APPS 中添加 mysite.polls,如下所示:
INSTALLED_APPS = (    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    'django.contrib.sites',    'mysite.polls')现在 Django 已经知道 mysite 包含了 polls 应用。让我们运行另一个命令:
python manage.py sql polls你应该会看到如下的代码(也就是 polls 对应的 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"),    "choice" varchar(200) NOT NULL,    "votes" integer NOT NULL);COMMIT;再次运行 syncdb 在数据库中创建模型表。
python manage.py syncdb命令会搜索 INSTALLED_APPS 中还未加入数据库的应用,并生成对应的数据库表。屏幕应会显示:
  Creating table polls_poll  Creating table polls_choice  Installing index for polls.Choice model

[[i] 本帖最后由 zjxplq 于 2008-11-20 09:50 编辑 [/i]]

spyler 发表于 2008-11-17 13:01

1、一个公共站点可以进行看到投票对象,并能为它投票
  2、一个admin站点能让你增加、修改与删除投票对象


后面怎么没有了?:L :L :L

zjxplq 发表于 2008-11-17 13:47

后面的会一点点翻译出来的,放心吧,兄弟

xieaotian 发表于 2008-11-17 18:07

如果你能坚持翻译的话,不如你做这个版块的版主算了。

zjxplq 发表于 2008-11-18 10:56

平时工作比较忙,只能慢慢来翻译一点,致于版主我做不好,因为水平有限,回答不了人家的问

[[i] 本帖最后由 zjxplq 于 2008-11-18 10:58 编辑 [/i]]

spyler 发表于 2008-11-20 10:54

楼主是个好人,向楼主学习。:victory: :victory: :victory:

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.