基于Django快速开发Web 应用

来源:互联网 发布:ubuntu网页加载慢 编辑:程序博客网 时间:2024/06/05 09:47

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}}">&laquo;上一页</a>

{% endif %}

{% if has_next %}

<ahref="?page={{next}}">下一页&raquo;</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 应用