您的位置:首页 > 编程语言 > Go语言

基于Django快速开发Web 应用

2012-11-28 19:12 323 查看
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 应用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: