 您现在所在的位置:首页 >学习资源 > Python全栈+人工智能入门教材 > Python基础入门教程68:Django 项目和应用程序
 您现在所在的位置:首页 >学习资源 > Python全栈+人工智能入门教材 > Python基础入门教程68:Django 项目和应用程序
要启动 Django 项,请使用 django-adminstartproject命令,如下所示:清单 3 启动项目1~ dev$ django-admin py startproject djpr
startproject 命令,如下所示:
| 1 | ~/dev$ django-admin.py startproject djproject | 
上面这个命令会创建一个 djproject 目录,其中包含了运行 Django 项目所需要的基本配置文件:
| 1 2 3 4 | __init__.pymanage.pysettings.pyurls.py | 
对于这个项目来说,我们要构建一个职位公告板应用程序 “jobs”。要创建应用程序,可以使用 manage.py 脚本,这是一个特定于项目的 django-admin.py 脚本,其中 settings.py 文件可以自动提供:
| 1 2 | ~/dev$ cd djproject~/dev/djproject$ python manage.py startapp jobs | 
这将创建一个应用程序骨架,其中模型有一个 Python 模块,视图有另外一个 Python 模块。jobs 目录中包含以下文件:
| 1 2 3 | __init__.pymodels.pyviews.py | 
提供应用程序在项目中的位置纯粹是为新 Django 开发人员建立的一种惯例,并不是必需的。一旦开始在几个项目中混合使用应用程序,就可以将应用程序放到自己的命名空间中,并使用设置和主 URL 文件将它们绑定在一起。现在,请按照下面给出的步骤执行操作。
为了使 Django 认识到新应用程序的存在,还需要向 settings.py 文件中的 INSTALLED_APPS 添加一个条目。对于这个职位公告板应用程序来说,我们必须添加字符串 djproject.jobs:
| 1 2 3 4 5 6 7 | INSTALLED_APPS = (    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    'django.contrib.sites',    'djproject.jobs',) | 
Django 提供了自己的对象关系型数据映射组件(object-relational mapper,ORM)库,它可以通过 Python 对象接口支持动态数据库访问。这个 Python 接口非常有用,功能十分强大,但如果需要,也可以灵活地不使用这个接口,而是直接使用 SQL。
ORM 目前提供了对 PostgreSQL、MySQL、SQLite 和 Microsoft® SQL 数据库的支持。
这个例子使用 SQLite 作为后台数据库。SQLite 是一个轻量级数据库,它不需要进行任何配置,自身能够以一个简单文件的形式存在于磁盘上。要使用 SQLite,可以简单地使用 setuptools 来安装 pysqlite(有关 setuptools 的更多资料,尤其是有关 easy_install 工具(需要单独安装)的资料,请参阅 参考资料):
easy_install pysqlite
在使用这个模型之前,需要在设置文件中对数据库进行配置。SQLite 只需要指定数据库引擎和数据库名即可。
| 1 2 3 4 5 6 | DATABASE_ENGINE = 'sqlite3'DATABASE_NAME = '/path/to/dev/djproject/database.db'DATABASE_USER = ''DATABASE_PASSWORD = ''DATABASE_HOST = ''DATABASE_PORT = '' | 
这个职位公告板应用程序有两种类型的对象:Location 和 Job。Location 包含 city、state(可选)和 country 字段。Job 包含 location、title、description 和 publish date 字段。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | from django.db import modelsclass Location(models.Model):    city = models.CharField(maxlength=50)    state = models.CharField(maxlength=50, null=True, blank=True)    country = models.CharField(maxlength=50)    def __str__(self):        if self.state:            return "%s, %s, %s" % (self.city, self.state, self.country)        else:            return "%s, %s" % (self.city, self.country)class Job(models.Model):    pub_date = models.DateField()    job_title = models.CharField(maxlength=50)    job_description = models.TextField()    location = models.ForeignKey(Location)    def __str__(self):        return "%s (%s)" % (self.job_title, self.location) | 
__str__ 方法是 Python 中的一个特殊类,它返回对象的字符串表示。Django 在 Admin 工具中显示对象时广泛地使用了这个方法。
要设置这个模型的模式,请返回 manage.py 的 sql 命令。此时模式尚未确定。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | ~/dev/djproject$ python manage.py sql jobsBEGIN;CREATE TABLE "jobs_job" (    "id" integer NOT NULL PRIMARY KEY,    "pub_date" date NOT NULL,    "job_title" varchar(50) NOT NULL,    "job_description" text NOT NULL,    "location_id" integer NOT NULL);CREATE TABLE "jobs_location" (    "id" integer NOT NULL PRIMARY KEY,    "city" varchar(50) NOT NULL,    "state" varchar(50) NULL,    "country" varchar(50) NOT NULL);COMMIT; | 
为了初始化并安装这个模型,请运行数据库命令 syncdb:
~/dev/djproject$ python manage.py syncdb
注意,syncdb 命令要求我们创建一个超级用户帐号。这是因为 django.contrib.auth 应用程序(提供基本的用户身份验证功能)默认情况下是在 INSTALLED_APPS 设置中提供的。超级用户名和密码用来登录将在下一节介绍的管理工具。记住,这是 Django 的超级用户,而不是系统的超级用户。