Django+快速实战入门.docx

上传人:b****6 文档编号:8876495 上传时间:2023-05-15 格式:DOCX 页数:35 大小:136.74KB
下载 相关 举报
Django+快速实战入门.docx_第1页
第1页 / 共35页
Django+快速实战入门.docx_第2页
第2页 / 共35页
Django+快速实战入门.docx_第3页
第3页 / 共35页
Django+快速实战入门.docx_第4页
第4页 / 共35页
Django+快速实战入门.docx_第5页
第5页 / 共35页
Django+快速实战入门.docx_第6页
第6页 / 共35页
Django+快速实战入门.docx_第7页
第7页 / 共35页
Django+快速实战入门.docx_第8页
第8页 / 共35页
Django+快速实战入门.docx_第9页
第9页 / 共35页
Django+快速实战入门.docx_第10页
第10页 / 共35页
Django+快速实战入门.docx_第11页
第11页 / 共35页
Django+快速实战入门.docx_第12页
第12页 / 共35页
Django+快速实战入门.docx_第13页
第13页 / 共35页
Django+快速实战入门.docx_第14页
第14页 / 共35页
Django+快速实战入门.docx_第15页
第15页 / 共35页
Django+快速实战入门.docx_第16页
第16页 / 共35页
Django+快速实战入门.docx_第17页
第17页 / 共35页
Django+快速实战入门.docx_第18页
第18页 / 共35页
Django+快速实战入门.docx_第19页
第19页 / 共35页
Django+快速实战入门.docx_第20页
第20页 / 共35页
亲,该文档总共35页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Django+快速实战入门.docx

《Django+快速实战入门.docx》由会员分享,可在线阅读,更多相关《Django+快速实战入门.docx(35页珍藏版)》请在冰点文库上搜索。

Django+快速实战入门.docx

Django+快速实战入门

Django快速实战入门

作者:

Hily 原始链接:

http:

//hily.me/blog/2008/11/learning-django-ch7/

版权声明:

可以转载,转载时务必以超链接形式标明文章原始出处和作者信息及版权声明

(一):

概述

Django (读作:

['dʒæŋgoː]),它是目前最流行的基于Python开发的Web开发框架之一。

因为Python本身不像PHP一样是专门为开发Web应用而设计的,因此如果不使用框架,开发效率会非常低。

而在使用框架后,整个系统的结构和代码的组织会更加清晰明了,并具备一定的可扩展性,同时也利于模块或代码的重用。

这样,在开发Web应用时不但可以节约大量的开发时间,还可以享受简洁高效的开发带来的乐趣。

除了Django,类似框架的还有 TurboGears、web.py 等等,本文介绍笔者初次接触的PythonWeb开发框架Django,并通过建立一个简易的留言板为例来帮助大家快速了解Django。

本文假设您使用Linux作为开发环境,并且已经掌握Linux的基本操作以及Python的基础知识。

示例代码中所使用到的Django版本为1.0.1。

Django架构

Django作为一个Web开发框架,它包括以下基本组成部分:

1.HTTP请求处理与响应

2.URL映射

3.视图控制

4.模板系统

5.数据库操作模型

其中模型是通过Django内建的ORM机制实现的,而模板系统也依赖于内建的模板引擎。

Django的基本架构如下:

在此基本模型基础上,Django还实现了许多常用且实用的中间件,如负载均衡、缓存和Session等。

(二):

组建开发环境

开发系统的选择

Django和Linux都是开源运动的优秀产物,使用开源产品,在构建一个应用时,我们会有更多选择,也更加灵活。

因此没有任何理由让我选择在Windows下开发和部署基于Django的应用。

笔者使用的Linux系统为 GentooLinux:

gentoo~#uname-a

Linuxgentoo2.6.25-gentoo-r9#2SMPMonNov1013:

39:

19CST2008i686AMDAthlon(tm)64X2DualCoreProcessor4000+AuthenticAMDGNU/Linux

安装Python

Django使用Python代码编写而成,因此需要先确认你的系统中是否已安装Python。

大多数的Linux中都已经预装了Python,可以使用以下命令查看是否已经安装:

gentoo~#python-V

Python2.4.4

安装Django

从  上下载当前的最新官方发布版本:

Django-1.0.2-final.tar.gz。

然后解压并进行安装:

gentoo~#tarzxfDjango-1.0.2-final.tar.gz

gentoo~#cdDjango-1.0.2-final

gentooDjango-1.0.2-final#pythonsetup.pyinstall

接着你可以在Python命令窗口中查看当前已安装的Django版本:

gentoo~#python

Python2.4.4(#1,Jun152008,16:

32:

23)

[GCC4.1.2(Gentoo4.1.2p1.0.2)]onlinux2

Type"help","copyright","credits"or"license"formoreinformation.

>>>importdjango

>>>django.VERSION

(1,0,2,'final',0)

>>>

安装MySQL

Django支持 PostgreSQL、SQLite3 和 MySQL 等多种数据库,其中MySQL是我用过的最为满意的数据库。

如果您没有其它特殊需求的话,建议您选用MySQL。

在Gentoo下的安装指令为:

gentoo~#emergemysql

安装完MySQL后,默认密码为空,需要执行以下指令设置root用户的密码:

gentoo~#mysqladmin-uroot-p-hlocalhostpasswordhily

如果有需要,可以修改/etc/mysql/f对MySQL进行配置。

然后启动MySQL:

gentoo~#/etc/init.d/mysqlstart

测试是否安装成功:

gentoo~#mysql-uroot-p

Enterpassword:

WelcometotheMySQLmonitor. Commandsendwith;or\g.

YourMySQLconnectionidis194

Serverversion:

5.0.60-logGentooLinuxmysql-5.0.60-r1

Type'help;'or'\h'forhelp.Type'\c'toclearthebuffer.

mysql>

安装MySQLdb

要在Django中使用MySQL,你还需要安装MySQLdb:

下载后安装(需要setuptools支持):

gentoo~#tarzxfMySQL-python-1.2.2.tar.gz

gentoo~#cdMySQL-python-1.2.2

gentooMySQL-python-1.2.2#pythonsetup.pyinstall

新建一个Django项目

运行以下命令,新建一个项目:

gentoo~#django-admin.pystartprojectmyblog

运行后会在当前目录下新建一个名为myblog的目录,结构如下:

gentoo~#lsmyblog/

__init__.py manage.py settings.py urls.py

包含四个文件:

▪__init__.py

表示该目录是一个包。

▪manage.py

Django项目的管理工具,后文多处会用到这个工具。

您可以先使用以下命令查看这个工具的子命令列表:

gentoomyblog#pythonmanage.pyhelp

在help后面加上子命令,则可以查看各个子命令的帮助,如:

gentoomyblog#pythonmanage.pyhelprunserver  

usage:

manage.pyrunserver[options][optionalportnumber,oripaddr:

port]

StartsalightweightWebserverfordevelopment.

options:

 --settings=SETTINGS  ThePythonpathtoasettingsmodule,e.g.

                       "myproject.settings.main".Ifthisisn'tprovided,the

                       DJANGO_SETTINGS_MODULEenvironmentvariablewillbe

                       used.

 --pythonpath=PYTHONPATH

                       AdirectorytoaddtothePythonpath,e.g.

                       "/home/djangoprojects/myproject".

 --traceback          Printtracebackonexception

 --noreload           TellsDjangotoNOTusetheauto-reloader.

 --adminmedia=ADMIN_MEDIA_PATH

                       Specifiesthedirectoryfromwhichtoserveadmin

                       media.

 --version            showprogram'sversionnumberandexit

 -h,--help           showthishelpmessageandexit

▪settings.py

保存项目级别的Django配置信息,如数据库配置、时区设置等等。

▪urls.py

定义Django的URL映射规则,实现URLMapper(或者叫URLdispatching)。

启动开发服务器

Django自带了一个轻量级的Web服务器,适合于在开发过程中快速测试Django代码,而不需要频繁地启动HTTP服务器或FastCGI服务器。

使用以下命令来启动:

gentoomyblog#pythonmanage.pyrunserver

Validatingmodels...

0errorsfound

Djangoversion1.0.2final,usingsettings'myblog.settings'

Developmentserverisrunningathttp:

//127.0.0.1:

8000/

QuittheserverwithCONTROL-C.

runserver默认在127.0.0.1:

8000上监听,如果要使用不同的ip:

port,只需要在runserver后加上ip:

port参数,如:

gentoomyblog#pythonmanage.pyrunserver192.168.1.6:

8080

关于该命令的具体帮助,可参考上一节中所述,输入以下命令查看:

gentoomyblog#pythonmanage.pyhelprunserver  

启动成功后,用浏览器打开对应的 http:

//ip:

port/,如 http:

//192.168.1.6:

8080/。

您应该可以看到以下界面:

 

这就表明我们的开发服务器已经启动,并且正常运行。

从下一节起,我们从一个简单的例子开始,逐步引入Django框架的各个组成部分,来帮助大家理解Django的MTV模型的工作机制。

主要包括:

▪HTTP请求/响应

▪URL映射

▪视图控制

▪模板系统

▪数据库模型

(三):

视图控制

视图(View),顾名思义,就是用于处理用户端显示的模型。

然而,Django中的视图不仅仅是个视图,还充当着一部分控制器的角色,体现在与数据模型的协同工作过程中。

HTTP请求/响应

Django框架中把HTTPRequest和HTTPResponse都封装成了对象,HttpRequest和HttpResponse。

在每个视图函数中,都会接收到一个HttpRequest对象,如:

defindex(request):

 

   pass

有了request这个对象的传入,我们可以在视图函数中很方便地读取HTTP请求的相关信息。

当要返回信息给客户端时,我们可以简单地返回一个HttpResponse对象,如:

defindex(request):

 

   returnHttpResponse('FirstPage')

视图控制

一个视图控制单元就是一个视图函数,上一部分中我们看到的index就是一个视图函数。

视图在Django中承担着一部分控制器的角色,它要处理HTTP请求的信息,并将处理结果回应给客户端。

因此,如果把视图函数看作一个输入输出模型,那么,视图函数的输入参数中至少应该包含有HTTP请求信息,而它的输出是对客户端的HTTP响应。

URL映射

URL映射(URLMapping或URLDispatching),是Django框架的入口。

所有的URL请求都会交由URL映射层处理,一个项目的URL映射关系定义在项目目录下的文件urls.py中。

一个简单的例子

结合以上讲到的三个部分,我们举一个简单的例子,在页面上显示客户端的IP地址,来看看这三个部分是怎样工作的。

打开项目目录下的urls.py,通过观察注释掉的内容,我们很容易发现,URL映射关系就是定义在urlpatterns这个元组中的:

fromdjango.conf.urls.defaultsimport*

#Uncommentthenexttwolinestoenabletheadmin:

 

#fromdjango.contribimportadmin 

#admin.autodiscover()

urlpatterns=patterns('', 

   #Example:

 

   #(r'^myblog/',include('myblog.foo.urls')),

   #Uncommenttheadmin/doclinebelowandadd'django.contrib.admindocs' 

   #toINSTALLED_APPStoenableadmindocumentation:

 

   #(r'^admin/doc/',include('django.contrib.admindocs.urls')),

   #Uncommentthenextlinetoenabletheadmin:

 

   #(r'^admin/(.*)',admin.site.root), 

在刚新建完项目后,由于urlpatterns为空,Django会将所有的URL请求返回上一节所看到的提示信息页面。

下面,我们要在urlpatterns中新增一条规则,来处理对根路径http:

//192.168.1.6:

8080/ 的请求:

urlpatterns=patterns('', 

   (r'^$',index), 

index是一个视图函数,定义如下:

defindex(request):

 

   returnHttpResponse('clentip:

%s'%request.META 

['REMOTE_ADDR'])

修改后整个urls.py代码为:

fromdjango.conf.urls.defaultsimport* 

fromdjango.httpimportHttpResponse

defindex(request):

 

    returnHttpResponse('clentip:

%s'%request.META 

['REMOTE_ADDR'])

urlpatterns=patterns('', 

   (r'^$',index),

为了简便,我把视图函数也写在了urls.py中,实际上这样写不利于代码的维护。

习惯上,我们把视图函数写在views.py中,然后在urls.py中导入这些函数。

整理之后,urls.py代码如下:

fromdjango.conf.urls.defaultsimport* 

fromviewsimport*

urlpatterns=patterns('', 

   (r'^$',index), 

views.py代码如下:

fromdjango.httpimportHttpResponse

defindex(request):

 

   returnHttpResponse('clentip:

%s'%request.META 

['REMOTE_ADDR'])

在对根目录进行HTTP请求时,整个过程是这样的:

1.Django根据urls.py中的urlpatterns配置对请求路径进行匹配,找到用于处理这个请求的视图函数index。

2.执行index这个视图函数,通过HttpRequest对象request读取客户端IP,最后通过HttpResponse直接返回一串HTML代码给客户端。

(四):

模板系统

在上一节,我们通过一个简单的示例演示了Django视图控制的工作过程。

仔细观察我们可以发现,现在的数据和显示是混合在一起的,这样不利于分工和代码维护。

Django的模板系统可以帮助我们解决这个问题。

模板引擎其实是个数据渲染引擎,它将数据以一定的结构和样式格式化后输出。

实现数据与显示分离

下面,我们通过使用Django的模板系统将上一节示例中的数据和显示分离:

fromdjango.httpimportHttpResponse 

fromdjango.templateimportContext,Template

defindex(request):

 

   t=Template('clientip:

{{ip}}') 

   c=Context({'ip':

request.META['REMOTE_ADDR']}) 

   html=t.render(c) 

   returnHttpResponse(html)

乍一看,虽然数据和显示分离了,但似乎还没有原来的简洁,模板和代码混合在一起,而且代码行数增加了。

这时你可能想到把模板存储为文件,在渲染时通过文件操作读入模板内容,这样就太繁琐了。

Django已经为我们提供了这样一个简便易用的渲染接口:

render_to_response。

通过指定模板文件和数据集合,render_to_response可以轻易将数据格式化并返回一个HttpResponse对象。

修改以上代码,在myblog目录下新建一个专门用于存放模板的目录templates,然后在其中新建index.html:

clientip:

{{ip}}

然后我们需要修改settings.py,把templates目录的绝对路径加入到TEMPLATE_DIRS变量中,告诉Django我们的模板所保存的目录:

TEMPLATE_DIRS=( 

   '/root/myblog/templates', 

大多数情况下我们不喜欢使用绝对路径,因为在代码存放路径改变时又要重新修改设置,因此我们可以使用一种更加灵活的方式:

importos.path

TEMPLATE_DIRS=( 

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

改好后,重新打开页面查看一下效果:

http:

//192.168.1.6:

8080/。

模板系统语法

在上面的模板中,我们只使用到一个模板变量{{ip}},这还不足以展示出模板系统的强大。

除了模板变量,Django的模板系统还提供了模板标签和模板过滤器这两种机制,通过这些标签和过滤器我们可以轻易的实现条件判断、循环遍历、格式化等各种实用功能。

模板标签使用{%和%}括起来,如{%if%}{%else%}{%endif%}等。

Django内建的大量丰富实用的模板标签,基本上可以满足大部分场合的应用需求。

过滤器作用于模板变量,通过在变量名后加上|和过滤器名及参数实现,如:

{{birthdate|date:

"Y-m-d"}}将输出类似1985-02-13。

在内建的标签或过滤器不足以满足我们的要求的情况下,我们可以自己编码实现自定义的标签和过滤器。

此文是帮助大家快速了解和上手Django,而不是Django的中文手册。

因此关于这些标签和过滤器的具体用法,请参考官方文档(在本文第一节中有提到)。

使用标签和过滤器

接下来我们要再修改以上例子,通过输出request.META中的所有元素,来演示一下模板标签和模板过滤器的用法。

views.py:

fromdjango.httpimportHttpResponse 

fromdjango.shortcutsimportrender_to_response

defindex(request):

 

   returnrender_to_response('index.html',{'meta':

request.META})

templates/index.html

 

     

    {%formeta_name,meta_valueinmeta.items%} 

     

    {%cycle'#ddd''#ccc'%}"> 

       {{meta_name}}:

    {{meta_value|default:

    "Novalue"}} 

      

    {%endfor%} 

 

for循环将meta.items中的项目依次遍历,cycle用于在for循环中不断地切换行的背景颜色,当meta_value为空时,通过default过滤器将显示为“Novalue”。

输出结果类似如下:

(五):

数据模型

ORM与CRUD

在当今绝大多数的Web应用中,数据库已经成为不可或缺的一个重要组成部分。

对于许多应用来说,使用传统的开发方法,仍然要编写不少SQL语句,让许多开发者感到枯燥乏味。

由此,在许多面向对象的开发模型中,引入了对象关系映射(ORM)机制,对关系数据库进行抽象与建模。

引入了ORM之后,对数据库的操作不再是直接通过SQL语句,而是直接操作于数据对象。

D

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 商业计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2