1.2 实战演练:开发Django站点
用Django开发网站需要遵循Django的一套开发流程。本节通过建立一个消息录入页面演示Django的开发流程及相关技术。
1.2.1 建立项目
在进行项目之前,需要先用django-admin建立Django项目,语法如下:
#django-admin startproject 项目名称
其中django-admin是安装好的Django组件后再Python目录中生成的Django项目管理工具,比如,建立一个叫做djangosite的开发项目,命令如下:
#django-admin startproject djangosite
该命令在当前目录中建立了一个子目录djangosite,并在其中生成了Django开发默认的文件,djangosite的目录内容如下:
djangosite/
manange.py
djangosite/
__init__.py
settings.py
urls.py
wsgi.py
默认生成的几个文件都非常重要,在今后的开发中要一直使用或者维护它们,对它们的意义解释如下:
· manage.py:Django用于管理本项目的命令行工具,之后进行项目运行,数据库自动生成,静态文件收集等要通过该文件完成。
· 内层djangosite/目录中包含了本项目的实际文件,同时因为其中包含__init__.py文件,所以该项目也是一个Python包。
· djangosite/__init__.py:告诉Python该项目是一个Python包,其中暂无内容。
· djangosite/settings.py:Django的项目配置文件。默认时,在其中定义了本项目引用的Django组件、Django项目名等,在之后的开发中,还需要在其中配置数据库参数,导入其他的Python包。
· django/urls.py:维护项目的URL路由映射,即定义客户端访问的URL由哪一个Python木模块解释并提供反馈。在默认的情况下,其中只定义了"/admin"即管理员站点的解释器。
· djangosite/wsgi.py:定义了WSGI的接口信息,用于其他Web服务集成,一般文件在生成后无须改动
1.2.2 建立连接
为了在项目中开发符合MVC架构的实际应用程序,我们需要在项目中建立Django应用。每个Django项目可以包含多个Django应用。建立应用的语法如下:
#python3 manage.py startapp 应用名称
其中的manage.py是建立项目时在项目目录中生产的命令行工具,startapp是命令的关键字,举例如下:
#cd djangosite
#python3 manage.py startapp app
命令行完成后会在项目目录中建立如下目录文件结构:
app/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
对其中的功能解析如下:
· __init__.py:其中暂无内容,该文件的而存在使得app成为一个Python包。
· admin.py:管理站点模型的声明文件,默认为空
· apps.py:应用信息定义文件。在其中生成了类AppConfig,该类用于定义应用名等Meta数据
· migrations包:用于在之后定义引用迁移功能。
· models.py:添加模型层数据类的文件。
· test.py:测试代码文件。
· views.py:定义URL响应函数
以上所有文件在应用刚建立的时没有实际内容,需要在开发者进一步编写代码完成其功能。
1.2.3 基本视图
在完成Django项目和应用的建立后,即可开始编写网站的应用代码,这里通过为注册页面显示一个欢迎标签,来演示Django的路由映射功能。
(1)首先在djangosite/app/views.py中建立一个路由响应函数。
from django.http import HttpResponse
def weclome(request):
return HttpResponse('<1>welcome to my tiny teitter!</h1>')
该代码定义了一个函数weclome(),简单地返回一条被HttpResponse()封装的Weclome信息。
(2)接下来,要通过URL映射将影虎的HTTP访问与该函数绑定起来。
在djangosite/app/目录中新建一个urls.py文件,管理应用app中的所有URL映射,其文件内容为:
from django.conf.urls import url
from . import views
urlpatterns = p[
url(r'',views.weclome),
]
在其中第一行引入了django.conf.url中的url()函数,Django中的所有路由映射由该函数生成。第2行代码引入了views.py模块。之后定义了关键变量urlpatterns,改变了是一个列表,保存了所有由url()函数生成的路由映射。本代码中只设置了一个映射,即,把所有路由映射到views.py中的weclome函数。
(3)在项目URL文件djangosite/urls的urlpatterns中增加一项,声明对应用app中url.py文件引用,代码如下:
from django.conf.urls import url
from django.contrib import admin
from django.conf.urls import include
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'app/',include('app.urls'))
]
首先通过import语句引入django.conf.urls.include()函数,之后再urlpatterns列表中增加一个路径app/,将其转接到app.urls包,即djangosite/app/urls.py文件。这样通过incluede()函数将两个urlpatterns链接了起来。
注意:url()函数的第一个参数用正则表达式来表达URL路由,本例中^app/的含义是所有以app开头的路由