Python第八章_第1页
Python第八章_第2页
Python第八章_第3页
Python第八章_第4页
Python第八章_第5页
已阅读5页,还剩91页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第8章 python网站开发2本章重点难点本章重点MVC模式的概念及相关术语Django框架的模式Django环境的搭建与数据库的配置Django框架的应用本章难点MVC模式的概念Django环境的搭建Django框架的应用38.1 常见的Web开发框架8.1.1 Zope框架Zope是免费的,可以在开放源代码许可证条件下自由分发。Zope是一套完整的平台,它包含了开发应用程序所需的全部组件。允许第三方开发者打包和分发应用程序。允许开发者只使用浏览器就可以创建Web应用程序。提供多种可扩展的安全框架,可以运行在大多数计算机操作系统平台中。8.1.2 TurboGears框架不用安装Apach

2、e网页服务器就可以开始开发网页应用程序。不用安装数据库MySQL/ PostgreSQL就可以开发数据库网站。方便的布署能力,有众多插件 (Extension) 支援。内建网页服务器,ORM、AJAX能力,默认可以产生html、json格式。可扩充的网页接口的工具箱(ToolBox),内含资料模型设计工具(Model Designer),资料编辑工具 (Catwalk),网站多国语言化工具等。48.1.3 Django框架1. Django的历史2003开始时,由Adrian Holovaty和Simon Willison将其作为劳伦斯杂志-世界报纸的一个内部项目。2005将其命名为Djang

3、o发布于2005年7月。2008年9月发布了第一个正式版本1.0。当前,Django是由世界各地的贡献者来开发的一个开源项目。2. Django的设计理念(1) 松耦合:Django的目的是使其堆栈中的每个元素独立于其他。(2) 较少编码:较少代码,所以能迅速的开发。5(3) 不必再重复(DRY):一切都应只在一个地方,而不是一次又一次地重复来开发它。(4) 更快的开发:Django的理念是尽一切所能,便于超高速开发。(5) 干净的设计:Django严格维护一个干净的设计在其自己的代码,并可以很容易地遵循最佳Web开发实践。3.Django的优势(1) 对象关系映射(ORM)支持:Django

4、提供数据模型和数据库引擎之间的桥梁,并支持大量的数据库系统,包括MySQL、Oracle、Postgres等等。在Django中还支持通过Django-nonrel支持NoSQL数据库。(2) 多种语言支持:Django通过其内置的国际化系统支持多语种网站。6(3) 框架支持:Django内置了对Ajax、RSS、缓存和其他各种框架的支持。(4) 管理GUI:Django提供用于管理活动的一个很好的用户界面。(5) 开发环境:Django自带了一个轻量级的Web服务器,方便终端到终端应用的开发和测试。78.2 MVC模式MVC是三个单词的缩写,分别为:模型(Model)、视图(View)和控制

5、(Controller)。 MVC模式的目的就是实现Web系统的职能分工。1. 视图视图是用户看到并与之交互的界面。对老式的Web应用程序来说,视图就是由HTML元素组成的界面。在新式的Web应用程序中,它还包括Macromedia Flash和XHTML,XML/XSL,WML等一些标识语言和Web services。2. 模型模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。例如它可能用象EJBs和ColdFusion Components这样的构件对象来处理数据库。被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据。由于应用于模型

6、的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。3. 控制器控制器接受用户的输入并调用模型和视图去完成用户的需求。所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。8.2.2 MVC模式的优缺点1. 低耦合性视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可。因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。2. 高重用性和可适用性随着技术

7、的不断进步,现在需要用越来越多的方式来访问应用程序。MVC模式允许使用各种不同样式的视图来访问同一个服务器端的代码。它包括任何WEB(HTTP)浏览器或者无线浏览器(WAP),比如,用户可以通过电脑也可通过手机来订购某样产品,虽然订购的方式不一样,但处理订购产品的方式是一样的。由于模型返回的数据没有进行格式化,所以同样的构件能被不同的界面使用。例如,很多数据可能用HTML来表示,也有可能用WAP来表示,而这些表示所需要的命令是改变视图层的实现方式,而控制层和模型层无需做任何改变。3. 较低的生命周期成本MVC使开发和维护用户接口的技术含量降低成为可能。4. 快速的部署使用MVC模式使开发时间得

8、到相当大的缩减,它使程序员集中精力于业务逻辑,界面程序员(HTML和JSP开发人员)集中精力于表现形式上。5. 可维护性分离视图层和业务逻辑层也使得WEB应用更易于维护和修改。6.有利于软件工程化管理由于不同的层各司其职,每一层不同的应用具有某些相同的特征,有利于通过工程化、工具化管理程序代码。MVC模式的缺点体现在以下几个方面:(1) 增加了系统结构和实现的复杂性:对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。(2) 视图与控制器间的过于紧密的连接:视图与控制器是相互分离又紧密联系的部件,视图没有控制器的存在,其应用是很

9、有限的,反之亦然,这样妨碍了他们的独立重用。(3) 视图对模型数据的低效率访问:依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。8.2.3 Django框架中的MVCDjango紧紧地遵循MVC模式,是一种MVC框架。以下是Django中M、V、C各自的含义:M:数据存取部分,由django数据库层处理。V:选择显示哪些数据要显示以及怎样显示的部分,由视图和模板处理。C:根据用户输入委派视图的部分,由Django框架根据URLconf设置,对给定URL调用适当的Python函数。由于在Django中,控制器接受用户输入的部分

10、由框架自行处理,而Django更关注的是模型(Model)、模板(Template)和视图(Views),Django也被称为MTV框架。在MTV开发模式中:M :代表模型(Model),即数据存取层。该层处理与数据相关的所有事务:如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。T: 代表模板(Template),即表现层。该层处理与表现相关的决定:如何在页面或其他类型文档中进行显示。V: 代表视图(View),即业务逻辑层。该层包含存取模型及调取恰当模板的相关逻辑。可以把它看作模型与模板之间的桥梁。如图8- 2所示。需要注意的是,不能简单的把Django视图认为是MVC控制器,把

11、Django模板认为MVC视图。区别在于:Django视图不处理用户输入,而仅仅决定要展现哪些数据给用户;Django模板仅仅决定如何展现Django视图指定的数据。可以认为Django将MVC中的视图进一步分解为Django视图和Django模板两个部分,分别决定“展现哪些数据”和“如何展现”。MVC控制器部分,由Django框架的URLconf来实现。URLconf设计非常巧妙,其机制是使用正则表达式匹配URL,然后调用合适的Python函数。8.3 Django开发环境的搭建8.3.1 Django框架的安装1. 安装PythonDjango是用100%纯Python代码编写,所以需要在

12、系统上安装Python。Django1.9的版本需要2.7.3或高于2.7.x的版本,本教程中使用的是Python3.4和Django-1.9.1。Django与Python版本对应关系如表8-1所示。2. 安装DjangoPython是一种与平台无关的语言,Django是一个Python Web框架,与操作系统无关。所以,Django的安装是很容易的,但安装步骤取决于所在的操作系统。UNIX/Linux和Mac OS X安装如果计算机上运行的是Linux或Mac OS系统,那么可以有两种方式来安装Django:对于可以使用包管理器的操作系统,可以使用easy_install或pip安装;或者

13、手动安装下载的官方压缩包。例如:手动下载了类似这样Djangox.xx.tar.gz压缩包,其安装命令如下:$ tar xzvf Django-x.xx.tar.gz$ cd Django-x.xx$ sudo python setup.py install安装后,可以通过运行下面的命令来测试安装是否成功。$ django-admin.py -version如果看到打印在屏幕上的当前Django版本,那么说明一切都设置好了。Windows安装在Windows系统下,首先在Django官网上下载 Django-1.9.1.zip,解压缩该文件。然后在解压文件夹下输入以下命令来完成Django 1

14、.9的安装。命令格式如下:python setup.py installDjango完成安装后,显示Finished processing dependencies for Django1.9.1,标志着Django的安装完毕。结果如图8-3所示。图8-3 Django安装成功图8-4 Django安装测试测试Django是否安装成功,可以打开 Python Shell(IDLE (Python GUI)),Python Shell交互以“”开始,使用下边的命令来查看Django 1.9安装是否成功。如图8-4显示。Django框架安装到python文件夹下的site-packages文件夹中

15、。3. 数据库和Web服务器安装(1) 数据库安装Django支持几种主要的数据库引擎,用户可以根据需要,选择安装相应的数据库。MySQL (/)PostgreSQL (/)SQLite 3 (/)Oracle (/)MongoDb ()其中SQLite3数据库已经集成在Python3.4中了,该数据库不需要安装,可以直接使用。本书中使用Mysql数据库进行Web的开发。(2) Web服务器安装Django自带了一个轻量级的Web服务器,可用于开发和测试应用程序。但该服务器仅用于应用程序测试,不能发布Web应用程序。Django支持Apache和其他流行的Web服务器,要发布开发的网站,需要使

16、用Apache服务器。安装Apache服务器后,要使Apache支持Python,需要模块mod_wsgi的支持,该模块可以从mod_wsgi官网/pypi/mod_wsgi/下载。(3) Wamp集成环境的安装数据库和Web服务器的安装,也可以使用现有的集成开发环境,例如:wamp、xampp等,这些集成开发环境中包含Apache服务软件、Mysql数据库软件等。本书中采用的是集成开发环境PyCharm、数据库采用Mysql。8.3.2 Django简单应用例8-1】编写一个简单的网页,显示“当前时间”及“大家好!,欢迎使用Python”(1) 打开PyCharm,新建一个django的项目

17、,文件的位置可以随意。这里命名为mysite,输入项目的应用名:mysiteapp,创建一个Django项目。如图8-5所示。图8-5 创建Django项目图8-6 Django项目文件结构图8-7 启动自带的测试服务器(2)验证项目是否正常进入项目mysite文件夹,启动Django自带的测试服务器。启动服务器命令:Python manage.py runserver或在PyCharm集成环境中加载并运行manage.py文件:按下Ctrl+Alt+R,在弹出的消息框中输入任务名称:runserver回车。服务器启动成功后,如果要退出服务,在上图所示窗口中按Ctrl-Break键可退出服务;

18、如果要查看服务器运行情况,在浏览器中访问::8000,如图8-8所示。在浏览器中显示It worked!时,说明Django开发环境搭建成功了。图8-8 访问测试服务器(3) 安装应用:打开setting.py文件,将建立的应用添加到INSTALLED_APPS变量中,代码如下:INSTALLED_APPS = django.contrib.admin, django.contrib.auth, django.contrib.contenttypes, django.contrib.sessions, django.contrib.messages, django.contrib.static

19、files, mysiteapp #添加应用 (4) 打开mysiteapp文件夹下的views.pyimport datetimeimport django.http.HttpResponsedef sayHello(request): s = 大家好!,欢迎使用Python current_time = datetime.datetime.now() html = %s %s % (s, current_time) return django.http.HttpResponse(html)(5) 修改项目文件夹里的urls.py文件,将url(rsayhello/$,sayhello),映

20、射添加到urlpatterns中from django.conf.urls import urlfrom django.contrib import adminfrom mysiteapp.views import sayHello #导入sayHello()函数urlpatterns = url(radmin/, admin.site.urls), url(rsayhello/$,sayHello), #加入映射 图8-9 页面运行结果重新启动项目,在浏览器中输入:8000/sayhello就会看到如图8-9所示的结果。8.4Django框架的应用8.4.1 数据库的配置1. Django数

21、据库配置基础在创建了Django项目后,在项目的文件夹中有settings.py文件,该文件是一个有关Django项目配置的文件,包含了代表Django设置的模块级变量。Django数据库配置就是通过修改settings.py文件中DATABASES变量的设置实现的。根据Python版本的不同选择不同的适配器。Settings.py文件中的DATABASES模块级变量的设置,如下面代码所示。DATABASES = default: ENGINE: django.db.backends.mysql, # 数据库引擎 NAME: student, # 数据库名称. USER: root, # 数据

22、库用户名 PASSWORD: 123456, # 数据库密码 HOST: , # 数据库主机,留空默认为localhost PORT: 3306, # 数据库端口 说明:(1) ENGINE:数据库引擎,即数据库服务器,其设置的值可以是:django.db.backends.postgresql,对应PostgreSQL数据库。django.db.backends.postgresql_psycopg2,对应PostgreSQL数据库。django.db.backends.mysql,对应MySQL数据库。django.db.backends.sqlite3,对应SQLite数据库。djang

23、o.db.backends.oracle,对应Oracle数据库。(2) NAME:数据库名称。如果使用MySQL数据库,则其值为数据库的名字;如果使用SQLite,数据库为计算机上的一个文件,NAME将是数据库文件的完整的绝对路径。如果该文件不存在,它会在第一次同步数据库时自动创建。当指定路径时使用正斜杠,例如:”C:/homes/user/mysite/sqlite3.db”(3) USER:数据库用户名,即告诉django用哪个用户连接数据库 ( SQLite下不需要该项设置) 。(4) PASSWORD :数据库密码,即告诉django连接用户的密码 ( SQLite下不需要该项设置)

24、 。(5) HOST :数据库主机地址,即告诉django连接哪一台主机的数据库服务器。如果数据库服务器是同一台物理机器,此处为空(或为 ) (SQLite下不需要该项设置) 。(6) PORT:数据库服务器端口,即告诉django连接数据库时使用哪个端口(SQLite下不需要该项设置)。2. Django中sqlite3数据库的配置默认使用sqlite3数据库,其在settings.py文件中关于数据库的初始配置如下面代码所示。DATABASES = default: ENGINE: django.db.backends.sqlite3, NAME: os.path.join(BASE_DI

25、R, db.sqlite3), 3. Django使用Mysql数据库(1) Python连接mysql数据库的常用驱动程序常用驱动程序:MySQLdb(mysql-python):。特点:只支持到python2对Python3支持不好。网址:/pypi/MySQL-python/1.2.5Mysqlclient:特点:MySQLdb的一个分支,它支持Python3。网址:/pypi/mysqlclientPyMySQL:特点:纯python的mysql驱动。网址:/pypi/PyMySQL。MySQL connector for python:特点:纯Python的mysql驱动。网址:/d

26、ownloads/connector/python/。(2) 安装驱动选择mysql作为数据库服务器,必须安装其对应的mysql数据库驱动程序。因为MySQLdb不支持Python3.2以上的版本,所以需要安装其它的适应Python3.2以上版本的驱动。可以选择安装pymysql驱动,作为django操作myslq的适配器。其安装命令为:Pip install pymysql配置数据库在django项目中的settings.py配置文件中修改 DATABASES的设置。见8.3.2。修改_init_.py文件在项目同名文件夹下的_init _.py中,加入如下代码,才能应用安装的mysql驱动

27、,否则会报错。在文件中加入的代码如下:import pymysqlpymysql.install_as_MySQLdb()8.4.2 创建数据模型1. ORM(Object Relational Mapping)对象关系映射ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。Django 的ORM位于框架的中心,介于数据模型(在django.db.models.Model 类之上构建的 Python 类)和基础关系数据库对象之间。2. 常用的模型数据类型Django 常用的数据模型字段见表8-3。表8-3 Django常用的数据模型字段类型3. 创建数据模

28、型【例8-2】创建一个Django数据模型,并生成数据库表。打开mysite文件夹中的models.py文件,在文件中创建如下代码:From Django.db import models#创建模型class Users(models.Model): username = models.CharField(max_length=64) password = models.CharField(max_length=64) registTime = models.DateTimeField() tel=models.CharField(max_length=11)4. 加入到站点管理打开admin

29、.py文件,将模块引入到站点管理中,语句如下from django.contrib import adminfrom . import modelsadmin.site.register(models. Users)5. 同步数据库执行语句:pythonmanage.pymakemigrationspythonmanage.pymigrate执行完成后将在MySql数据库中创建mysiteapp_users表(APP名_类名)。说明:(1) 由于版本不同,有的同步命令语句使用“python manage.py syncdb”语句。(2) Django为每张表自动添加一个id主键。(3) Dja

30、ngo中通过“manage.py inspectdb”可以将已有的数据库表生成数据模型。例如:python manage.py inspectdb models.py6. 数据访问创建了模型以后,Django自动为这些模型提供了高级的Python API,可以轻松访问数据库表。【例8-3】 针对上面的数据模型,插入一条数据,并查看。运行结果如下:QuerySet 该运行结果并未将记录的详细信息显示出来,为了解决这个问题,需要为Users类添加一个方法_unicode_()。_unicode_()方法将告诉Python如何将对象以unicode的方式显示出来。代码如下:def _unicode_

31、(self): return u%s %s %s % (self.username, self.password,self.tel)为以上模型添加_unicode_()方法后,重新运行pythonmanage.pyshell,即可以看到所需的数据。8.4.3 创建视图视图功能简称“view”,是一系列的Python函数,它接受一个Web请求,并返回一个Web响应。1. 视图函数的编写视图要和url路由、models、模板文件一起才能把页面显示出来。视图函数在视图文件views.py中,建立视图函数代码如下:from django.shortcuts import render#创建视图Def

32、index(request):Return render(request,index.html)视图还可以接受的参数。from django.http import HttpResponse例如:def hello(request, number): text = welcome to my app number %s!% number return HttpResponse(text)2. request对象request是一个HttpRequest对象。每一个视图总是以一个HttpRequest对象作为它的第一个参数。Request常用的属性包括:Path:请求页面的全路径,不包括域名。M

33、ethod:请求中使用的HTTP方法的字符串表示,全大写表示。GET:包含所有HTTP GET参数的类字典对象。POST:包含所有HTTP POST参数的类字典对象。3. response对象request和 response 对象起到了服务器与客户机之间的信息传递作用。request 对象用于接收客户端浏览器提交的数据,而 response 对象的功能则是将服务器端的数据发送到客户端浏览器。HttpRequest对象由django自动创建,但是,HttpResponse对象就必须自己创建。每个view请求处理方法必须返回一个HttpResponse对象,HttpResponse类在djang

34、o.http模块中。HttpResponse对象上扩展的常用方法包括:Render(): 页面渲染。Redirect(”路径”): 登录跳转。Locals():可以直接将函数中所有的变量传给模板。【例8-4】 在例8-3的基础上创建视图。8.4.4 模板系统Django模板是一个文本文件,主要用于分割文档的表示(presentation)和数据。模板中定义了占位符(placeholders)和各种定义文档应该如何显示的基本逻辑(即模板标签,template tag)。1. 模板目录设置在配置文件settings.py中,通过TEMPLATES_DIRS属性设置模板目录。TEMPLATES_DI

35、RS=(./templates,) 2. Django模板语言Django模板引擎提供了一个小型的语言来定义应用程序面向用户的层。(1)显示变量语法格式:variable表示给定变量的值插入到模板中。例如:username,模板由视图在渲染(render)函数的第三个参数发送的变量来替换变量。(2) 过滤器语法格式:var|filters模板过滤器将变量在显示前转换它们的值的方式。例如:string|truncatewords:80过滤器将截断字符串,只看到前80个字符。string|lower转换字符为小写。string|escape|linebreaks转义字符串内容,然后换行转换为标签。

36、(3) 标签用% %包围的是块标签。标签可以执行以下操作:if 条件,for循环,模板继承等。if标签表现为逻辑的if语句。就像在Python中,可以使用if,else和elif在模板中8.4.5 URL配置在Django框架中,urls.py的配置很关键,它就像是Django所支撑网站的目录,本质是URL模式以及要为该URL模式调用的视图函数之间的映射表。通过该文件告诉Django,哪个URL调用哪段代码URl格式为:urlpatterns = url(正则表达式, view函数, 参数, 别名, 前缀),例如上例中的url(rshowuser/$,showuser)语句。表示在地址栏中输入

37、:http:/localhost:8000/showuser时,就访问mysiteapp目录下的views.py文件中的showuser()函数。8.4.6 发布Django项目发布Django项目,就是把应用放到apache等Web服务器上,供用户浏览使用。Django框架包含了一个开发服务器,用它调试和测试Django应用程序非常方便。但这个服务器只能在本地环境中运行,不能用于网站的发布。因此,需要将Django应用程序部署到常用的Web服务器上,比如Apache或lighttpd。项目的发布步骤如下:(1) 安装apache2下载集成服务器软件wamp2.5,按安装向导安装即可。安装完成

38、后,设置mysql数据的登录密码。(2) 安装mod_wsgiWSGI,全称Web Server Gateway Interface,或者Python Web Server Gateway Interface,是Python专有的,定义了Python解释器与Web服务器之间的一种简单而通用的接口。根据apache2.5服务器与python版本,下载符合两者版本对应关系的mod_wsgi模块。将下载的.so文件重命名为mod_wsgi.so,并复制到apache的modules文件夹中,然后,在apache服务器的配置文件httpd.conf中加载mod_wsgi.so文件。打开apache的配

39、置文件httpd.conf,加入如下命令:#加载mod_wsgi.so模块LoadModule wsgi_module modules/mod_wsgi.so重启apache,模块mod_wsgi.so被加载到服务器中。(3) 发布django创建的项目在c:wampwww目录下,创建django目录。复制项目文件夹(mysite)下的所有内容到c:wampwwwdjango目录下。配置apache服务器的httpd.conf文件。打开apache的配置文件httpd.conf,加入如下命令:#指定django项目的wsgi.py配置文件的路径WSGIScriptAlias / c:/wamp

40、/www/django/mysite/wsgi.py #指定项目路径WSGIPythonPath c:/wamp/www/django/ #绝对路径为项目所在目录Order deny,allowAllow from all(4) 修改settings.py文件Django项目创建时,其状态为调试模式,在发布该程序时,应该关闭调试模式。调试模式的设置在settings.py文件中,所以,修改该文件关闭调试模式。打开settings.py文件,找到debug与TemplateDebug设置,把两项的值设置为False,即可。(5) 重启apache服务器,在浏览器中输入地址,如果成功显示主页,则表

41、示发布成功。8.5 Django框架的高级应用8.5.1 管理界面1. Django admin管理工具Django提供了基于web的管理工具。Django自动管理工具是django.contrib的一部分。可以通过项目的settings.py文件中的INSTALLED_APPS的属性设置实现。settings.py文件代码:INSTALLED_APPS=(django.contrib.admin,django.contrib.auth,django.contrib.contenttypes,django.contrib.sessions,django.contrib.messages,dja

42、ngo.contrib.staticfiles,)django.contrib是一套庞大的功能集,它是Django基本代码的组成部分。2.激活管理工具通常在生成项目时会在urls.py中自动设置好,只需去掉注释即可激活管理工具。配置项如下所示:/HelloWorld/HelloWorld/urls.py文件代码:# urls.pyfrom django.conf.urls import urlfrom django.contrib import adminurlpatterns = url(radmin/, admin.site.urls),图8-11 Django后台登录界面当这一切都配置好

43、后,Django管理工具就可以运行了。3. 使用管理工具启动开发服务器,然后在浏览器中访问 :8000/admin/,得到如图8-11所示界面:图8-12 Django后台管理界面用户名和密码可以通过命令“python manage.py createsuperuser”来创建超级用户。创建好后,可以在图8-12所示页面,输入用户名和密码登录,登录后界面如图8-12所示。为了让admin界面管理某个数据模型,需要先注册该数据模型到admin。比如,之前在mysiteapp中已经创建了模型Users。修改admin.py文件如下:from django.contrib import adminf

44、rom mysiteapp.models import Users# Register your models here.admin.site.register(Users)刷新后即可看到 Users数据表。如图8-13所示。图8-13 Users数据表8.5.2 编辑数据库登录管理界面后,在管理界面中,每个数据模型之后都有两个超链接,为add和change。这是两种不同的操作,实现插入和修改数据库中的数据。图8-14 字段编辑界面1. 使用Django框架的管理界面向数据表中插入数据Django内置的后台管理界面可以实现向数据表插入数据。(1) 单击Users域之后的“add”超链接,页面跳

45、转到增加用户界面如图8-14所示。图8-15 修改记录界面(2) 输入相关信息后,单击“save and addanother”按钮。2. 使用Django框架的管理界面对数据表数据进行修改(1) 单击Users域之后的“change”超链接,页面跳转到如图8-15所示。 (2) 修改相应的信息后,单击“save and addanother”按钮,页面跳转到添加数据界面,并显示前边输入的项目数据修改成功。也可以在此页面中直接删除数据。3. 使用Django框架提供的dbshell打开mysql,实现数据的显示、添加与删除(1) 打开命令提示符窗口,使用cd命令转换到项目所在目录,执行命令:P

46、ython manage.py dbshell,打开mysql提示符界面,如图8-16所示。图8-16 dbshell运行窗口(2) 在mysql提示符界面,使用SQL语句实现数据的显示(select)、添加(insert)与删除(delete)。SQL语句的使用可以参见第6章。4. 使用django提供的api实现数据操作Django框架提供了生成数据模型数据的API方法,就是直接调用数据模型的构造函数生成对象,使用对象的save()方法将生成的对象保存到数据库中,从而实现数据的添加操作;使用类的objects对象的all()方法可以获得该数据模型的所有数据。修改数据后可以使用 save()

47、 或 update()修改数据库中的数据;使用对象的delete()方法可以删除数据。# -*- coding: utf-8 -*- from django.http import HttpResponsefrom TestModel.models import test# 数据库操作def testdb(request): # 删除id=1的数据 test1 = Test.objects.get(id=1) test1.delete()# 另外一种方式 test.objects.filter(id=1).delete() # 删除所有数据 test.objects.all().delete(

48、) return HttpResponse(删除成功)8.5.3 Session功能Django中的Session是一个高级工具,它可以让用户存储个人信息以便在下次访问网站中使用这些信息。Django完全支持Session,它将数据保存在服务器端,并将发送和接收Cookie的操作包装起来。在Cookie中包含的是Session ID,而不是数据本身。在Django框架中,Session将保存在request对象的session值中,此值是一个字典对象,可以通过字典的相关操作改变http的session值。Django中的Session有3种存储方式:放在数据库、缓存或者文件系统中,通过系统配置

49、文件setting.py来配置session的存储。然后就可以通过数据库,或者缓存,来操作session,比如设置、删除、获取session。1. 启用Session在Django项目中启动Session功能,需要修改settings.py文件中的MIDDLEWARE_CLASSES元组类型的属性值,在该元组中加入如下语句:django.contrib.sessions.middleware.SessionMiddleware,在配置文件settings.py中的INSTALLED_APPS元素类型的属性值中加入如下语句:django.contrib.sessions,若此前没有生成相关的数据

50、表,则需要调用manage.py makesmigrations和manage.py migrate来创建相应的表,以便用于存储Session数据。缺省情况下,Django将Session存储在数据库中(使用模型django.contrib.sessions.models.Session)。这些配置是默认启用的。每个配置都有默认值,这些默认值定义在djangoconfglobal_settings.py文件中。如果不需要这些配置,可以将其关掉,以节省服务器的开销。如果需要自定义配置,可以在项目文件夹下的settings.py文件中进行设置。2. 使用Session(1) 在视图中把数据存放到s

51、ession中request.sessionkey=value(2)在视图中从session中取出数据request.session.get(key,default=None)(3) 删除sessiondel request.sessionkey(4) 在Django模板中使用session数据在模板中可以对session变量像访问字典一样访问。需要查看所有session值的时候使用items方法。例如:% for key,value in request.session.items % ifequal role key % value.role_name % endifequal % end

52、for %8.5.4 国际化当Web服务搭建好以后,开发人员需要调整软件,使之能适用于不同的语言,即国际化和本地化。国际化-Internationalization,i和n之间有18个字母,简称I18N。国际化的目标是允许Web程序以多种语言提供内容和功能。Django支持国际化,多语言,它提供了非常强大的翻译机制,开发者一旦理解它的实现,就能减少编码量,提高开发效率。1. Django国际化简介Django框架支持国际化,可以在Django的安装目录sitepackages/django/conf/locale/文件夹下找到相关的语言文件。Django国际化的本质就是开发者对需要翻译的字符串

53、进行标记,并对字符串进行相应的翻译。当用户访问该Web时,Django内部框架根据用户使用偏好进行Web呈现。Django国际化使用的翻译模块是使用Python自带的gettext标准模块。Django国际化实际上是让开发者和模板作者指定apps中要翻译的字符串,即标定这些字符串;Django根据特定访问者的设置,对标定的字符串进行相应的翻译,翻译为特定访问者使用的语言和数据格式。开发人员和翻译人员需要完成以下3个步骤:第一步:在Python代码和模板中嵌入待翻译的字符串。第二步:把那些字符串翻译成需要支持的语言,并进行相应的编译。第三步:在Django settings文件中激活本地中间件。

54、2. Django国际化的实现(1) 开启国际化的支持,需要在settings.py文件中设置如下:MIDDLEWARE_CLASSES=(.django.middleware.locale.LocaleMiddleware,)LANGUAGE_CODE = enTIME_ZONE = UTCUSE_I18N = TrueUSE_L10N = TrueUSE_TZ = TrueLANGUAGES = (en, (English),(zh-hans, (中文简体),(zh-hant, (中文繁體),)#翻译文件所在目录,需要手工创建LOCALE_PATHS = (os.path.join(BAS

55、E_DIR,locale),)TEMPLATE_CONTEXT_PROCESSORS = (.django.core.context_processors.i18n,)(2) 指定翻译字符串翻译字符串指定了哪些文本应该被翻译,这些字符串通常在Python代码和模板中出现。Python代码国际化Django通常使用ugettext(),gettext_noop(),gettext_lazy()和ungettext()等函数实现翻译字符串的标定。Django应用程序中,Python代码主要集中在models.py和views.py中。例如:在views.py文件中的翻译字符串的标定From dja

56、ngo.utils.translation import ugettext as _ #标定字符串的函数Weekdays=_(Monday),_(Tuesday),_(Wednesday) #标定字符串Django模板国际化Django在模板文件中的国际化,需要使用以下标签:% load i18n %:用于加载已有的模板。i18n.py文件中定义了指定模板中翻译字符串的模板标签。% trans str %:标记翻译一个常量字符串或可变内容。在该标签中,不允许使用模板中的变量,只能使用单引号或双引号中的字符串。如果翻译时需要用到变量(占位符),可以使用% blocktrans %标签。注意:Templates文件夹要放在project文件夹下,否则国际化会失败。(3) 创建语言文件在应用程序目录下,建立local目录,然后运行创建语言文件命令,从而产生语言文件django.po。Django 1.9及以上版本使用的创建语言文件的命令:Python manage.py makemessages l zh_hansPython manage.py makemessages l zh_hant(4) locale文件夹中的语言文件django.poDjango.po文件是一个纯文本文件,包含用于翻译的原始字符串和目标语言字符串

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论