65.9K
CodeProject 正在变化。 阅读更多。
Home

24 小时学会 Django:第 2 小时:创建你的第一个网站

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.78/5 (5投票s)

2008年4月23日

CPOL

18分钟阅读

viewsIcon

101654

学习使用 Django 框架和 MySQL 实现和配置一个功能性的数据库驱动网站。

Cover image

标题 Sams Teach Yourself Django in 24 Hours
作者 Brad Dayley
出版社 Sams Publishing
出版日期 2008 年 2 月
ISBN 067232959X
价格 34.99 美元
页数 528

本小时内容概览

  • 如何开始创建 Django 项目
  • 如何启动和停止内置 Web 服务器
  • 配置 Django 访问数据库的步骤
  • 如何创建和安装一个应用程序
  • 将模型应用于应用程序的步骤
  • 在 Django 中激活模型的步骤
  • 如何配置 Django 以接受特定的 URL 请求
  • 如何为 Web 浏览器创建一个简单的视图

在第 1 小时“理解 Django”中,你学习了一些关于 Django 框架 的基础知识。本小时将指导你完成创建名为 iFriends 的功能性网站的步骤。尽管这个网站会比较基础,但它将成为未来几小时在此基础上构建的基础,你将逐步了解 Django 框架的各个方面。

创建 Django 项目

让我们通过创建一个 Django 项目来开始创建工作网站的过程。Django 项目是一组定义 Django 特定实例的设置。这些设置包括数据库配置、URL 配置以及你在接下来的课程中将了解到的其他选项。

动手尝试

创建你的第一个 Django 项目

从命令提示符创建 Django 项目相对简单。在本节中,你将创建一个名为 iFriends 的项目。

  1. 从命令提示符,更改到你想存储 iFriends 项目代码的目录。
  2. 创建一个名为 iFriends 的目录。这将是 iFriends 项目的根目录。
  3. 进入 iFriends 目录。
  4. 键入以下命令来创建 iFriends 项目

    python django-admin.py startproject iFriends


注意 - 由于项目将充当 Python 包,请避免使用与任何现有内置 Python 包冲突的项目名称。可以在 https://pythonlang.cn 找到内置 Python 包的文档。



注意 - 无需将项目代码放在 Web 服务器的文档根目录下。Django 框架将负责执行代码。事实上,将代码存储在 Web 服务器根目录之外的某个位置是个更好的主意。这样,你的代码将免受直接从 Web 浏览器访问的风险。


startproject 命令首先创建一个名为 iFriends 的目录,然后将启动项目所需的 Python 文件集存储在 iFriends 目录中。startproject 命令创建以下文件

  • __init__.py 是一个空文件,它告诉 Python 该网站目录应被视为一个 Python 包。
  • manage.py 是命令行实用程序,允许管理员启动和管理 Django 项目。
  • settings.py 是控制 Django 项目行为的配置文件。
  • urls.py 是一个 Python 文件,它定义了用于访问网站的 URL 的语法并配置其行为。

这些文件的基本目的是设置一个 Python 包,Django 可以使用它来定义网站的结构和行为。我们将在本小时以及后续小时中更详细地讨论这些文件,随着网站变得越来越复杂。

启动开发服务器

创建 Django 项目后,你应该能够启动开发服务器进行测试。开发服务器是 Django 项目中包含的一个轻量级 Web 服务器。它可以让你在无需处理生产 Web 服务器的配置和管理问题的情况下开发和测试你的网站。

动手尝试

启动开发服务器

在本节中,你将学习如何启动开发服务器。

  1. 从命令提示符,更改到 iFriends 项目的根目录。
  2. 输入以下命令来启动开发服务器,如图 2.1 所示
        python manage.py runserver

    图 2.1
    从命令行启动开发服务器。


    注意 - manage.py 实用程序由本小时前面讨论的 createproject 命令复制到你的项目根目录中。manage.py 实用程序首先验证项目并报告任何错误。如果没有遇到严重错误,你将收到开发服务器正在 http://127.0.0.1:8000/ 运行的通知。


  3. 通过打开 Web 浏览器并输入以下地址,验证开发服务器是否正常工作
        http://127.0.0.1:8000/

如果开发服务器正常启动(并且你未更改 debug 设置),你应该会看到一个与图 2.2 所示类似的页面。

图 2.2
Django 网站的初始浏览器视图。


注意 - 如果端口 8000 已被占用,你可以通过在命令行中添加端口号来让开发服务器使用不同的端口。以下示例显示了将开发服务器配置为在端口 8008 上运行的语法

manage.py runserver 8008


提示 - 要停止开发服务器,请按 Ctrl+Break 或 Ctrl+C。


配置数据库

在验证了你可以启动和停止开发服务器之后,是时候配置数据库访问了。本节将引导你完成创建和配置示例项目将使用的数据库的访问过程。


注意 - Django 可以动态地提供网页,而无需使用数据库存储信息。但是,Django 的最佳优点之一是它能够实现数据库支持的网站。


配置数据库涉及三个主要步骤。第一个是创建数据库并分配权限。第二个是修改 settings.py 文件以指定数据库类型、名称、位置和访问凭据。第三个步骤是将 Django 项目与数据库同步,以创建 Django 引擎所需的初始表。

Django 支持多种不同类型的数据库引擎。本书中使用的项目使用的是 MySQL 数据库。本节假设你已经安装、配置并启动了数据库引擎,并且开发服务器可以访问它。


提示 - MySQL 数据库不允许你在创建表时使用区分大小写的名称。如果你想在项目中定义包含大写字符的对象,则需要通过在 <django installation path>/django/db/backends/__init__.py 文件中使用以下设置来关闭 Django 框架中的区分大小写

uses_case_insensitive_names = True

动手尝试

创建数据库并授予权限

本节将引导你完成从 SQL 数据库命令控制台创建数据库、创建管理员用户以及授予权限的步骤。你还将修改 Django 框架中的 uses_case_insensitive_names 设置,以便你可以使用大写字符命名对象。此步骤对于其他一些“动手尝试”部分至关重要。

  1. 从你的 SQL 数据库命令控制台,输入以下命令来创建一个名为 iFriends 的数据库
        CREATE DATABASE iFriendsDB;
  2. 输入以下命令开始使用 iFriends 数据库
        USE iFriendsDB;
  3. 输入以下命令来创建一个名为 dAdmin 的管理员用户,密码为 test
        CREATE USER 'dAdmin'@'localhost' IDENTIFIED BY 'test';
  4. 输入以下命令将 iFriends 数据库的所有权限授予 dAdmin 用户
        GRANT ALL ON *.* TO 'dAdmin'@'localhost';

    注意 - 如果你的数据库引擎有图形界面允许你管理数据库和用户,你也可以使用该界面来创建数据库和管理员用户并分配权限。


  5. 在编辑器中打开 <django installation path>/django/db/backends/__init__.py 文件。
  6. 将以下设置添加到文件中以禁用 MySQL 数据库的区分大小写
        uses_case_insensitive_names = True
  7. 保存 __init__.py 文件。

在 settings.py 中配置数据库访问

创建数据库并设置好 Django 用户帐户后,你需要配置 Django 项目中的 settings.py 文件来访问该数据库。每个 Django 项目都有自己的 settings.py 文件。settings.py 文件是一个 Python 脚本,用于配置各种项目设置。

Django 使用 settings.py 文件中的以下设置来控制数据库访问

  • DATABASE_ENGINE 是数据库引擎的类型。Django 支持 postgresql_psycopg2postgresqlmysqlmysql_oldsqlite3ado_mssql
  • DATABASE_NAME 是数据库的名称。对于 SQLite,你需要指定完整路径。
  • DATABASE_USER 是连接数据库时使用的用户帐户。SQLite 不需要用户。
  • DATABASE_PASSWORDDATABASE_USER 的密码。SQLite 不需要密码。
  • DATABASE_HOST 是存储数据库的主机。对于 localhost,可以留空。SQLite 不需要指定主机。
  • DATABASE_PORT 是连接数据库时使用的端口。可以留空以使用默认端口。SQLite 不需要指定端口。

动手尝试

配置 Django 访问 iFriends 数据库

以下部分将引导你完成修改 settings.py 文件中数据库和用户设置的步骤(在上节中创建的 MySQL 数据库名为 iFriendsDB,用户名是 dAdmin,密码是 test,运行在 localhost 和默认端口)。在文本编辑器中打开 iFriends\settings.py 文件。

  1. 找到 DATABASE_ENGINE 设置,并将值更改为以下内容

    DATABASE_ENGINE = 'mysql'


    注意 - 如果你选择使用 MySQL 以外的 SQL 数据库,则需要在此处使用该数据库类型而不是 mysql


  2. DATABASE_NAME 设置的值更改为以下内容

    DATABASE_NAME = 'iFriendsDB'

  3. DATABASE_USER 设置的值更改为以下内容

    DATABASE_USER = 'dAdmin'

  4. DATABASE_PASSWORD 设置的值更改为以下内容

    DATABASE_PASSWORD = 'test'

  5. 验证 DATABASE_HOSTDATABASE_PORT 设置是否为空
        DATABASE_HOST = ''
        DATABASE_PORT = ''

注意 -DATABASE_HOSTDATABASE_PORT 设置为空时,它们默认为 localhost 和默认端口。如果数据库位于远程服务器上或运行在非默认端口上,则需要相应地设置这些选项。


同步项目到数据库

settings.py 文件中配置好数据库访问后,你就可以将项目同步到数据库了。Django 的同步过程会在数据库中创建项目所需的表。

表是根据 settings.py 文件中 INSTALLED_ APPS 设置指定的应用程序创建的。以下是在 INSTALLED_APPS 设置中已指定的默认设置

INSTALLED_APPS = (
  'django.contrib.auth',
  'django.contrib.contenttypes',
  'django.contrib.sessions',
  'django.contrib.sites',
)

以下列表描述了默认安装在 Django 项目中的应用程序

  • django.contrib.auth 是 Django 包含的默认身份验证系统。
  • django.contrib.contenttypes 是内容类型的框架。
  • django.contrib.sessions 是用于管理会话的框架。
  • django.contrib.sites 是用于通过单个 Django 安装管理多个站点的框架。

动手尝试

将 iFriends 项目同步到 iFriends 数据库

本节将引导你完成将 Django 项目同步到数据库的步骤。在此过程中,Django 将创建默认表,并提示你为网站管理员帐户输入用户名、电子邮件地址和密码。你指定的用户名和密码允许你访问 Django 身份验证系统。

  1. 确保开发服务器已停止,方法是在控制台提示符下按 Ctrl+Break。
  2. 更改到 iFriends 项目的根目录。
  3. 在控制台提示符下输入以下命令以开始同步,如图 2.3 所示

    python manage.py syncdb

    图 2.3
    从命令行同步初始 Django 项目与数据库。

  4. 在提示符下,输入网站管理员帐户的用户名。
  5. 在提示符下,输入网站管理员帐户的密码。

数据库现在已配置好适当的表,以允许 Django 正确使用其身份验证、内容、会话和站点框架。

安装应用程序

配置并同步数据库后,你可以开始在其上安装应用程序。安装应用程序只是创建一个应用程序目录,定义一个模型,然后激活该应用程序,以便 Django 可以在数据库中访问它。

动手尝试

创建你的第一个应用程序

你将创建的第一个应用程序是名为 People 的应用程序,它将用于跟踪使用该网站的个人。

  1. 从控制台提示符,更改到 iFriends 项目的根目录。
  2. 输入以下命令来创建一个名为 People 的空白应用程序
        python manage.py startapp People

startapp 命令在 iFriends 目录中创建一个 People 目录,然后用以下文件填充它

  • __init__.py 是应用程序作为 Python 包使用的必需文件。
  • models.py 包含定义模型的 Python 代码。
  • views.py 包含定义模型视图的 Python 代码。

应用程序目录中的文件定义了应用程序的信息如何在数据库中存储和访问。它们还定义了从网站访问模型中的信息时如何显示。

创建模型

创建应用程序后,你需要为应用程序中要存储的数据创建一个模型。模型只是应用程序中对象类的定义、属性和关系。

要创建模型,你需要修改应用程序目录中的 models.py 文件。models.py 文件是一个 Python 脚本,用于定义将添加到数据库以存储模型中对象的表。

models.py 文件最初只有一行,它从 django.db 包导入 models 对象。要定义模型,你需要定义一个或多个类。每个类代表数据库中的一个对象类型。

动手尝试

为 People 应用程序创建模型

在本节中,你将通过修改 People 应用程序的 Python 脚本 models.py 来在 People 模型中创建 Person 类。最初,脚本是空的。本节将指导你添加 Python 代码来定义模型中的类。

  1. 在编辑器中打开 iFriends\People\models.py 文件。
  2. 将以下代码行添加到文件中,以将 Django models 包导入应用程序

    from django.db import models

  3. 添加以下代码片段来定义具有 name、email、headshot 和 text 属性的 Person
        class Person(models.Model):
          name = models.CharField('name', maxlength=200)
          email = models.EmailField('Email', blank=True)
          headshot = models.ImageField(upload_to='img', blank=True)
          text = models.TextField('Desc', maxlength=500, blank=True)
          def __str__(self):
            return '%s' % (self.name)
  4. 保存文件。

列表 2.1 显示了 iFriends\People\models.py 文件的完整代码。

列表 2.1 iFriends\People\models.py 文件的完整内容

from django.db import models

class Person(models.Model):
  name = models.CharField('name', max_length=200)
  text = models.TextField('Desc', max_length=500, blank=True)

  def __str__(self):
    return '%s' % (self.name)

注意 - __str__ 的定义定义了一个对象的字符串表示形式,可以在视图或其他 Python 脚本中使用。Django 在多个地方使用 __str__ 方法来显示对象。


动手尝试

激活 Person 模型

本节将引导你完成激活 Person 模型的过程,方法是将其添加到 settings.py 文件中的 INSTALLED_APPS 设置,然后同步数据库。

  1. 在编辑器中打开 iFriends\settings.py 文件。
  2. 找到 INSTALLED_APPS 设置,并将其添加 iFriends.People 应用程序,如下面的代码片段所示
    INSTALLED_APPS = (
      'django.contrib.auth',
      'django.contrib.contenttypes',
      'django.contrib.sessions',
      'django.contrib.sites',
      'iFriends.People',
)
  1. 保存文件。
  2. 使用 iFriends 项目根目录的以下命令,将 People 应用程序同步到 iFriends 数据库,如图 2.4 所示
        python manage.py syncdb

图 2.4
从命令行将新的 People 应用程序与数据库同步。

syncdb 命令会在 iFriends 数据库中创建 People 应用程序所需的表。模型现已激活,此时可以通过 Django 添加和检索数据到数据库。

使用 API 添加数据

本节简要介绍了如何使用 Django shell 接口和数据库 API 快速将单个 Person 对象添加到 People 表。Django shell 是一个 Python shell,它提供对 Django 包含的数据库 API 的访问。数据库 API 是一组 Python 方法,允许你从数据模型访问项目数据库。

动手尝试

将 Person 对象添加到 iFriends 数据库

打开 Django shell,然后按照以下步骤将你自己作为 Person 对象添加到 iFriends 数据库的 People 模型中。

  1. 从控制台提示符,更改到 iFriends 项目的根目录。
  2. 输入以下命令来调用 Django shell

    python manage.py shell

  3. 在 shell 提示符下,输入以下命令将 Person 类从 People 包导入

    from iFriends.People.models import Person

  4. 输入以下命令创建一个名为 pPerson 对象

    p = Person(name="<your name>", email="<your eMail>")

  5. 使用以下命令保存刚刚创建的 Person 对象

    p.save()

  6. 通过使用 Person.objects.all() 函数(该函数返回所有 Person 对象的列表)来验证对象是否已创建,然后打印列表
        lst = Person.objects.all()
        print lst

    图 2.5 显示了这些命令。

图 2.5
使用 Python shell 将对象添加到数据库。

现在已经在 iFriends 数据库中创建了一个 Person 对象。稍后我们将更深入地讨论如何访问数据库和使用数据库 API。

设置 URLConf 文件

本节讨论配置 URLConf 文件,以定义如何从 Web 访问已安装的应用程序。URLConf 文件是一个 Python 脚本,它允许你定义基于 Web 浏览器发送的 URL 访问的特定视图。当 Django 服务器收到 URL 请求时,它会根据 URLConf 文件中包含的模式解析请求。解析后的请求将转换为将在 views.py 文件(稍后讨论)中执行的特定 Python 函数。


注意 - URLConf 文件的位置由 settings.py 文件中的 ROOT_URLCONF 设置定义。默认位置是项目根目录的名称。对于 iFriends 项目,ROOT_URLCONF 的值将设置为以下值,其中 'iFriends.urls' 等同于 iFriends/urls.py

ROOT_URLCONF = 'iFriends.urls'

动手尝试

为 People 视图添加一个 URL 模式

在此示例中,你将通过修改 iFriends/urls.py 文件中的 urlpatterns 设置来为 People 应用程序设置一个简单的 URL 模式。

  1. 在编辑器中打开 iFriends\urls.py 文件。
  2. 找到 urlpatterns 设置,并将其添加 iFriends.People.views.index 模式
        urlpatterns = patterns('',
          (r'^People/$', 'iFriends.People.views.index')
        )
  3. 保存文件。

注意 - 在前面的代码片段中,iFriends.People.views.index 指的是位于 iFriends/People/views.py 文件中的 index() 函数,该函数将在下一节讨论。


创建简单的视图

配置完 URLConf 文件后,你需要向应用程序添加视图。应用程序的视图存储在应用程序目录的 views.py 文件中的函数。当 Django 服务器收到 URL 请求时,它会根据 URLConf 文件中包含的模式解析请求,并确定要执行哪个函数来生成 Web 视图。

动手尝试

为 People 应用程序创建 Index 视图

本节将引导你完成在 iFriends 项目中为 People 应用程序创建 index 视图存根的步骤。创建视图后,你将启动开发服务器并查看生成的网页。

  1. 在编辑器中打开 iFriends/People/views.py 文件。views.py 文件最初是空的。
  2. 使用编辑器将以下代码片段添加到文件中
        from django.shortcuts import HttpResponse
        from iFriends.People.models import Person
        
        def index(request):
          html = "<H1>People</H1><HR>"
          return HttpResponse(html)
  3. 保存文件。
  4. 从命令提示符,更改到 iFriends 项目的根目录。
  5. 输入以下命令来启动开发服务器

    python manage.py runserver

  6. 访问 http://127.0.0.1:8000/People URL。你应该会看到一个与图 2.6 所示类似的网页。

图 2.6
从 Web 浏览器访问 Django 项目中的自定义索引视图。

摘要

在本小时,你创建了一个名为 iFriends 的 Django 项目。你为该项目配置了 MySQL 数据库访问。你创建了一个名为 People 的应用程序,添加了一个 Person 类,并用一个 Person 对象填充了数据库。然后,你配置了 URL 行为以支持 index 视图,并在该视图中添加了必要的代码来显示 Person 类对象的列表。

你本小时所采取的步骤有助于展示使用 Django 框架设置网站的便捷性。后续小时将在此框架的基础上构建,以实现功能齐全的网站。

问答

  1. 同步到数据库后,我该如何修改模型?
  1. 目前,Django 无法可靠地更新模型。修改现有模型最安全、最简单的方法是更改模型,然后使用 SQL drop 命令删除与模型相关的所有数据库表。最后,使用 syncdb 命令将模型同步到数据库。
  1. 在尝试同步到数据库之前,是否有办法检查模型中的错误?
  1. Django 有一个实用程序,可以在同步到数据库之前验证模型的内容。从项目根目录,输入 python manage.py validatevalidate 实用程序会检查模型的语法和逻辑并报告任何问题。

工作坊

研讨会包含一组问答,旨在巩固你对本小时所涵盖内容的理解。在查看答案之前,请尝试回答这些问题。

测验

  1. 哪个文件包含 Django 连接数据库所需的信息?
  2. 哪个默认文件包含 Django 用于解析位置 URL 的配置?
  3. 哪个文件包含实现 iFriends 项目中 People 应用程序的 index 视图的代码?

测验答案

  1. settings.py
  2. urls.py
  3. iFriends/People/views.py

练习

请尝试创建和激活一个简单的应用程序。创建一个名为 Comments 的应用程序。在模型中添加一个名为 Note 的类,它有两个 CharField 属性,分别称为 TitleText。然后,通过将其添加到 settings.py 文件中的 INSTALLED_APPS 设置来激活模型。将模型同步到数据库。使用 Django shell 向数据库添加对象来测试你的应用程序。


此示例内容摘自书籍 Sams Teach Yourself Django in 24 Hours,作者 Brad Dayley,出版于 2008 年 2 月,ISBN 067232959X。 版权所有 © 2008 Sams Publishing。 更多信息请访问: www.informit.com/title/067232959X
© . All rights reserved.