1引言
Django是Python 的一个开源Web开发框架,该框架遵循MVC 开发模式,内置多种Web 开发组件,同时还集成了一个轻量级WebServer,使开发人员可以最少的代码、最快的速度、方便高效地进行各种Web 应用的开发和调试。目前,在世界范围内,已有很多站点基于Django进行开发。本文将以一个留言板的开发为例,论述在Windows 系统中基于Django 进行快速Web 开发的基本原理和过程。
2 Django 的安装
从Django的官网(www.djangoproject.com)下载其最新版1.0.2 的安装包并解压,然后在安装有Python2.6 版的Windows 系统的命令提示符下执行其中的setup.pyinstall 命令即可。
3 建立Django 项目和应用
3.1建立Django 项目
基于Django进行Web 开发,首先要建立一个Django 项目:只需在命令提示符下将当前路径转换为要建立项目的位置,这里假设是C盘根目录,然后执行命令django-admin.py startproject mywebapp 即可建立一个名为mywebapp 的新项目,该命令执行后会在C盘生成项目文件夹mywebapp,并在此文件夹下建立四个文件:__init__.py、manage.py、settings.py 以及urls.py。
3.2建立Django 应用
项目建立好后,就可以继续在命令提示符下将当前路径转换为C:\mywebapp,然后执行命令manage.pystartappmessageboard 建立一个名为messageboard的新应用,该命令执行后会在C:\mywebapp 下生成应用文件夹messageboard,并在此文件夹下建立三个文件:__init__.py、views.py以及models.py。接着在c:\mywebapp\messageboard 文件夹下手工建立一个名为templates 的文件夹,用于以后存放各个模板文件。
最后在settings.py中找到变量INSTALLED_APPS,在其中添加如下内容,激活messageboard 应用:
INSTALLED_APPS={
……………….
‘mywebapp.messageboard’,
}
4 Django 应用的相关设置
4.1数据库的设置
通过安装Python下的数据库驱动,Django 可以支持多种数据库系统。本文论述的留言板将采用SQLite3 作为后端数据库。由于Python2.6已经内置了对SQLite3 的支持,只需在settings.py 中找到变量DATABASE_ENGINE 和DATABASE_NAME,将其值分别修改为’sqlite3’和’messagedb’即可,其中messagedb是留言板用到的数据库名称。
4.2本地化设置
Django内置多国语言支持,默认情况下Django 使用英文显示应用界面。可在settings.py 中将变量TIME_ZONE 和LANGUAGE_CODE分别修改为'CCT' 和'zh-cn’,实现应用界面的中文化。
5 Django 的MVC开发模式
Django应用开发遵循MVC 模式。models.py 代表数据模型,和数据库引擎交互,执行数据库数据存取操作;templates文件夹下的各个模板文件代表视图,用于数据内容的显示;urls.py 和views.py 代表控制器, 其中的urls.py 可以根据用户输入的url,调用views.py中相应函数与数据模型和视图交互,响应用户的请求。
6 留言板实例的具体实现
6.1数据模型Django应用
可以通过Django 框架提供的一套API 操作不同的数据库引擎,进行数据的存取。同时,Django借助Python 类描述数据表的结构,用类的属性描述表的字段,并将类的定义存放到models.py中,形成MVC 模式中数据模型(Model)部分。在这个留言板的数据库中要用到一张留言信息表,在models.py中定义如下:from django.db import models
classMsg(models.Model):
name= models.CharField(max_length=30)
title=models.CharField(max_length=60)
content= models.TextField()
datetime= models.DateTimeField(auto_now_add=True)
接着在命令提示符下将当前路径转换为c:\mywebapp,然后执行manage.pysyncdb 命令,就可以在messagedb 数据库中生成该表。
6.2留言信息分页显示
该功能可以分页的形式显示已发表留言的详细内容。实现该功能的步骤是:
1)在urls.py 的开头使用from messageboard.views import* 命令导入views.py 中定义的所有函数, 接着在urls.py中加入patterns函数的第二个参数,元组形式的url入口:(r'^$', message_list_page),并用逗号将其与前面的参数隔开。
2)在views.py 中加入函数message_list_page 的定义:
From models import * # 导入所有的模型类
#导入list_detail 函数
From django.views.generic importlist_detail
ITEMS_PER_PAGE=5
Def message_list_page(request):
returnlist_detail.object_list(request,
#将留言信息表中的的记录按id 字段排序后
#保存到queryset 变量中,供模板文件使用
queryset=Msg.objects.order_by('id'),
#设置每页显示的留言数量
paginate_by=ITEMS_PER_PAGE,
#要使用的模板文件
template_name='message_list_page.html',
#在模板文件中表示留言信息表中所有
#记录的变量名,其名称后自动加
_listtemplate_object_name='message',
)
3) 在templates文件夹下建立一个base.html 模板文件,该模板文件是其他模板文件的父模板文件:
<html>
<head>
<title>留言板| {% block title%}{% endblock %}</title>
<style><! --input,textarea{display: block}</style>
</head>
<body>
<div>
<a href="/">首页</a> |
<ahref="/messagepost/">发表留言</a> |
</div>
<h4>{% block head %}{% endblock%}</h4>
{% block content %}{% endblock %}
</body>
</html>
4) 在templates文件夹下建立一个messasge_list_page.html 模板文件:
<! --继承base.html 模板文件的内容-->
{% extends "base.html" %}
{% block title %}留言列表{% endblock %}
{% block content %}
<table border="1">
<caption><h3>留言板</h3></caption>
{% for message in message_list %}
<tr><td>昵称:{{message.name}}</td>
<td>时间:{{message.datetime|date:"Y-m-dH:i:s"}}</td></tr>
<tr><tdcolspan="3">主题:{{message.title}}</td></tr>
<tr><tdcolspan="3">内容:{{message.content}}</td></tr>
{% endfor %}
</table>
{% if is_paginated %}
<div>
{% if has_previous %}
<ahref="?page={{previous}}">«上一页</a>
{% endif %}
{% if has_next %}
<ahref="?page={{next}}">下一页»</a>
{% endif %}
第{{page}}页,共{{pages}}页
</div>
{% endif %}
{% endblock %}
6.3 留言信息的发表
该功能可以验证用户提交的留言信息,并将合法的留言信息保存到messagedb数据库中。实现该功能的步骤是:
1) 在urls.py 中加入patterns 函数的三个参数,元组形式的url 入口:(r'^messagepost/$', message_post_page),并用逗号将其与前面
的参数隔开。
2) 在views.py 中加入函数message_post_page 的定义:
def message_post_page(request):
if request.method == 'POST':
form = MessagePostForm(request.POST)
if form.is_valid(): # 验证表单数据的合法性
newmessage = Msg(
name=form.cleaned_data['name'],
title=form.cleaned_data['title'],
content=form.cleaned_data['content']
)
# 将合法的表单数据保存到数据库
newmessage.save()
return HttpResponseRedirect('/') # 重定向到首页
else:
form = MessagePostForm()
# 使用message_post_page.html模板显示表单
returnrender_to_response('message_post_page.html', {'form': form})
3) 在c:\mywebapp\messageboard文件夹下新建一个表单定义文件form.py,具体内容为:
# -*- coding: utf-8 -*-
from django import forms
class MessagePostForm(forms.Form):
name = forms.CharField(label=' 昵称',
widget=forms.TextInput(attrs={'size':30,'max_length':30}))
title = forms.CharField(label=' 标题',
widget=forms.TextInput(attrs={'size':30, 'max_lenth':30}))
content = forms.CharField(label=' 内容',
widget=forms.Textarea(attrs={'size':10000}))
4) 在templates 文件夹下建立一个message_post_page.html 模板文件:
{% extends "base.html" %}
{% block title %}发表留言{% endblock %}
{% block head %}发表留言{% endblock %}
{% block content %}
<form method="post"action=".">
{{form.as_p}}
<input type="submit"value="发表">
</form>
{% endblock %}
7 结束语
综上所述,Django 作为Python 的一个优秀的Web 开发框架, 其发展潜力非常巨大, 并且随着Jython 和IronPython 新版本的发布,Django 在J2EE 服务器和.NET 平台上顺利运行已不是什么难事,这都将进一步推进Django 的发展和扩大Django 的应用范围。
原文转自:刘班:基于Django 快速开发Web 应用