基于Python Django技术构建web系统实践

来源:互联网 发布:淘宝刷单清洗之后降权 编辑:程序博客网 时间:2024/06/08 17:23

 

基于Python Django技术构建web系统实践

 

 

1   引言

Python语言是一门动态类型开发语言,在数学计算、数学分析、系统运维中有广泛的应用。在web框架开发中,基于Java语言的struts web框架在业界应用较多,struts框架中分层分域进行开发,用户通过jsp提交请求到action控制器,action对应相应的Form接收数据,同时action调用 domain域的form类及相应的服务及数据库的连接操作来实现相应的功能;涉及java、bean、jstl、jsp、tomcat、xml等技术的综合应用。

相比其他web框架开发,Django作为python语言开发的web框架,基于MVC模型,模型(Model)、模板(Template)和视图(Views)。模型(Model)数据存取层,处理数据库相关的事务,数据库模型定义、数据存取、数据库表关系定义等;模板(Template)表现层在用户web页面展示相应的页面。视图(View)业务逻辑层定义业务逻辑的控制,类似于strutsweb框架的action控制器。Django 框架定义了一套adminweb应用,基于Django的现有框架,开发者能快速开发出符合需求的web系统。

 作为任务单工作流的应用场景,任务单从填写申请、审核、归档需要一个流程。从任务单的流程需求分析,基于pythonDjango的快速开发能力,通过业务需求模型分析、数据库建模、web开发,从Djangoweb 框架的admin 应用着手,快速开发实现了任务单web系统的原型。

2   开发环境搭建安装

从python、django、mysql的官网中下载安装包,在windows系统中安装python、django、mysql数据库,在命令行语句中输入python,显示python版本号验证安装成功;在python提示符中输入importdjango,验证django安装成功;mysql数据库安装完成以后,登录mysql5.7 command line client查看数据库。

1、       在Django中创建一个新WebManage应用项目。进入python\scripts目录,

以命令行方式创建新应用项目django-admin.pystartproject  WebManage,新项目创建以后,在python\scripts目录下自动生成WebManage的子目录,包含__init__.py、manage.py、settings.py、urls.py文件。

2、在Django中WebManage项目中创建应用。进入python\scripts目录, 创建新应用pythonmanage.py startapp WebSource,应用创建以后,自动生成WebSource子目录,包含__init__.py、models.py、tests.py、views.py文件

3、DjangoWebManage项目及应用创建以后,在命令行方式下输入netstart mysql57,启动Mysql数据库。

4、Django 内建有web服务器,切换到WebManage的目录,命令行输入pythonmanage.py runserver 0.0.0.0:8000,在本机8000端口启动web服务,使用网页浏览器http://127.0.0.1:8000/ 可以打开页面 。

 

系统运行环境:

操作系统:windows系统

数据库:Mysql 5.7

开发工具:eclipse,windowsie

版本管理:sourcetree、git

开发语言:python 2.7.8,javascripte,html

WEB框架:django1.4.5

 

3   系统建模

系统建模步骤包括对需求进行数据分析,需求分析以后进行数据表结构设计,然后在Django Model模型中定义数据库表。

 

1.1   3.1系统需求分析

   设计一个任务单的web原型系统,分析任务单的工作场景包括以下内容:用户数据(如部门、人员定义)、任务单数据(任务分类、任务单的具体内容)、流程数据(流转部门、进展情况等)

   

1.2   3.2 数据库表结构设计

根据系统需求分析内容,进行系统的数据库结构设计,分别包括任务表、进展表、分类表、部门表、人员表、状态表等数据库表。数据库各表的序列号在model模型与Mysql数据库同步操作时,由数据库系统自动生成,每增加新的记录自动增加序列号。

   数据库表中任务表、进展表涉及人员及部门的字段,定义外键分别对应于人员表及部门表。

   数据库表中任务表、进展表通过任务单编号进行关联。

 

 

 系统使用Django Web框架进行系统开发,Django使用MVC(模型-视图-控制器)软件开发模式。模型定义数据库表及数据库访问,视图定义用户显示、控制器定义系统的请求逻辑。在系统需求分析及数据库表结构设计时,已经梳理清楚系统的数据库表之间的逻辑关系,实现系统的需求需要定义的数据表详细字段内容及字段之间的关联。数据库表逻辑理清楚以后,我们在Django Model 模型中实施物理定义数据模型,引入from django.db importmodels,分别在Models.py中定义classTaskstatus(models.Model)class Supervise(models.Model)class Depart(models.Model)class Staff(models.Model)class Task(models.Model)classProcess(models.Model)等数据库类,以class Task(models.Model)为例说明数据库model的定义如下:

 

class Task(models.Model):

    meeting_date=models.DateField(verbose_name='会议日期')

    task_no= models.CharField(max_length=300,verbose_name='编号')

    status=models.ForeignKey(Taskstatus,verbose_name='办结状态')

    task= models.TextField(verbose_name='工作任务及要求')

    origin= models.CharField(max_length=300,verbose_name='来源')

    leader= models.ManyToManyField(Staff,blank=True,verbose_name=u'牵头领导')

    depart1=models.ManyToManyField(Depart,related_name='depart1_task',verbose_name=u'主办部门')

    depart2=models.ManyToManyField(Depart,related_name='depart2_task',blank=True,verbose_name=u'协办部门')

    ufinish_date=models.DateField(verbose_name='预计完成时间')

   Supervise=models.ForeignKey(Supervise,verbose_name='分类')

    defget_leader(self):

         return','.join([ ileader.Staffnamefor ileader in self.leader.all()])

    get_leader.short_description ='牵头领导'     

    defget_depart1(self):

         return','.join([ idepart1.Departnamefor idepart1 in self.depart1.all()])

    get_depart1.short_description ='主办部门'

    defget_depart2(self):

         return','.join([ idepart2.Departnamefor idepart2 in self.depart2.all()])

    get_depart2.short_description ='协办部门'

    classMeta:

        verbose_name = '工作任务单'

        verbose_name_plural = '工作任务单' 

    def__unicode__(self):

       return'%s %s %s' % (self.task_no,self.task[:30],'...')

    

DjangoModel模型定义好的数据库类以后,需要将数据库表同步到Mysql数据库中。

1、进入python shell的命令行交互模式,校验DjangoMysql数据库的连接正常。

 

     pythonmanage.py shell

 >>> from django.db importconnection

>>> cursor = connection.cursor()

 

2、运行python manage.py,对Django Modle模型定义的数据库表进行有效性校验,生成Sql执行脚本语句,同步到Mysql数据库系统中。

python manage.py validate

python manage.py sqlall WebSource

python manage.py syncdb

 

3、登录Mysql数据库,查看系统的数据库表物理结构显示正常。

 

show databases

use WebManage

show tables

descripbe WebSource_task;

 

3   系统设计实现

系统设计实现步骤,用户在web浏览器上打开一个网页,系统会在setting配置文件中查找对应的数据库引擎及应用模块,根据url映射方案转到对应的view视图进行处理,view视图关联model模型与mysql数据库动态交互处理,将处理后的动态数据加载到template模板页面中,返回模板页面显示给用户。

 

                             

1.5   4.1数据库引擎及应用注册

Django web 系统在装载系统时,先查找应用的settings.py配置文件,在配置文件中配置数据库引擎、系统目录路径、admin应用注册等内容,在web页面浏览系统时,指引系统初始化加载时连接哪个数据库,在什么目录路径进行查找,及系统登记注册的应用程序等内容。

数据库配置引擎为Mysql数据库,定义连接的数据库名称,数据库连接的用户名及密码,定义数据库连接的主机名,如果在本机连接,可以不用填写,远程连接部署数据库,则填写远程数据库的地址,定义数据库连接的端口号,通常情况下,Mysql的数据库端口使用3306端口。

 

DATABASES = {

    'default': {

        'ENGINE':'django.db.backends.mysql'

        'NAME':'WebManage',                     

        'USER':'root',                    

        'PASSWORD':'WebManage',                

        'HOST':'',                   

        'PORT':'3306',      

    }

}

目录路径的配置如下,使用相对路径值转换成绝对路径值:

  

TEMPLATE_DIRS = (

     os.path.join(os.path.dirname(__file__),'templates').replace('\\','/'),

)

系统登记注册的应用程序,Django 框架系统自身开发了很多应用,admin应用程序具备用户权限管理、功能模块编辑显示等功能,系统利用Djangoadmin应用的强大工具进行部署开发,在setting.py中注册django.contrib.admin应用,充分使用admin的功能。

 

INSTALLED_APPS = (

      'django.contrib.admin',

1.6   4.2 URL定义

  用户在Web浏览器中输入一个网址http://127.0.0.1:8000/admin/Django web系统在系统的urls.py配置文件查找admin对应的应用视图,Django admin应用在url.py使用时先需导入admin模块,from django.contrib importadmin,然后进行登记发现 admin.autodiscover()

在定义url时,需理解正则表达式语言的表达方式,r'^admin/'这里没有限定url admin的输入范围,如果在admin/之后输入其他的一些字符串,web系统仍会自动处理url对应到admin页面进行转换;如果使用r'^admin/$'url表达式会严格限定用户的输入,^上箭头表达式对字符串的头部进行匹配,$美元符号表达式对字符串的尾部进行匹配,只有符合admin/格式输入的url系统才会进行处理,其他不符合url表达方式的url,系统将会提示页面无法打开。

 

urlpatterns = patterns('',

     url(r'^admin/', include(admin.site.urls)),

)

 

1.7   4.3 view视图定义

    系统使用Django web框架的admin应用,通过admin应用视图来显示数据,在admin.py文件中注册TaskstatusSuperviseDepartStaffProcessTask等数据模型。系统开发部署ProcessAdminTaskAdmin类来定义在web页面中显示的内容。在TaskAdmin中定义list_display项,在任务单页面中显示会议日期、编号、办结状态、工作任务及要求、来源、牵头领导、主办部门、协办部门、预计完成时间、分类等内容;在TaskAdmin中定义list_filter项,标识过滤器过滤的字段,在任务单页面根据状态或内容分类来进行过滤;在TaskAdmin中定义ordering项,在任务单列表中根据任务单编号、会议日期进行排序;在TaskAdmin中定义search_fields项标识搜索的字段,在工作任务单页面中按任务单内容进行搜索;在TaskAdmin中定义filter_horizontal项,在工作任务单中可以显示水平多选列表框,根据部门或人员,从左边的列表框选择一个或多个项移到右边的列表框进行多选。

 

class TaskAdmin(admin.ModelAdmin):

        list_display = ('meeting_date','task_no','status','task','origin','get_leader','get_depart1','get_depart2','ufinish_date','Supervise')

        list_filter = ('status','Supervise' )

        ordering = ('task_no','-meeting_date')

        search_fields = ('task',)

        filter_horizontal=('leader','depart1','depart2',)

 

 

admin.site.register(Taskstatus)

admin.site.register(Supervise)

admin.site.register(Depart)

admin.site.register(Staff)

admin.site.register(Process,ProcessAdmin)

admin.site.register(Task,TaskAdmin)

 

1.8   4.4 Tempalte 模板定义

系统在admin目录下建立templates子目录,建立app_index.htmlbase_site.htmlbase.htmlindex.html模板文件,Django web框架在加载web页面时,先加载系统的子模板app_index.htmlbase_site.htmlbase.htmlindex.html,替换覆盖掉admin的相应的模板文件,这样在web显示页面上会根据系统的内容进行显示,页面更直观友好。

base_site.html模板页面,从admin/base.html扩展,我们可以自定义web网站页面显示标题为效率提升,以及标签项显示,相比于原来admin的显示更友好。

 

{% extends "admin/base.html" %}

{% load i18n %}

{% block title %}{{ title }} | {% trans '效率提升' %}{%endblock %}

{% block branding %}

<h1 id="site-name">{% trans '' %}</h1>

{% endblock%}

{% block nav-global %}{% endblock %}

4   开发调试

在系统的开发过程中,开发中会遇到各种各样的BUG,开发调试是系统开发实现一个重要的环节,借助一些开发调试的工具对于系统实施能起到事半功倍的作用。在系统的开发调试中,常用的开发调试手段如下:1、在视图中自定义写入一个assert False 来触发调试页面。在web浏览器运行到断言点时,在web页面就提示详细的调试信息,可以看到详细局部变量值和程序语句。2、在Eclipse开发工具调试配置页面中中定义arguments参数为runserver –noreload,在代码需要进行调试的地方增加断点,进入单步调试模式调试运行,能详细查看运行的每步运行数据,包括变量、表达式的等内容的值,帮助快速定位BUG,实现系统功能。

    

5   系统实现功能

 Django 的框架基于admin的应用功能很强大,在进行了上述的开发配置以后,我们就拥有了任务单web的系统功能,可以定义用户和管理员不同的权限。

用户登录具备的功能如下:

1、系统功能:登录、修改密码

2、工作任务单的相应功能:查询工作任务单、过滤工作任务单、工作任务单分类、排序

工作任务单、增加工作任务单、修改工作任务单、查询进展情况、过滤进展情况、排序进展情况、增加进展情况、修改进展情况

  管理员登录具备的功能如下:

1、系统功能:登录、修改密码

2、审核功能:显示用户及管理员最近操作的日志内容

   3、工作任务单的管理功能:查询工作任务单、过滤工作任务单、工作任务单分类、

排序工作任务单、增加工作任务单、修改工作任务单、删除工作任务单、查询进展情况

过滤进展情况、排序进展情况、增加进展情况、修改进展情况、删除进展情况

   4、用户数据管理功能:增删用户、增删用户组、增删改人员、增删改状态、增删改内容分类、增删改部门  

6          结束语

在业务需求开发的应用中,对于各类业务场景,需要开发者综合考虑各种技术,进行技

术选型,Python是一门简洁、强大的语言,在LAMP架构(LinuxApacheMysqlPythonperl)中应用广泛,基于PythonDjango web 框架具备快速开发、部署的优势,在自动运维、数据分析中有广阔的前景。

9

 

0 0