Django快速实战入门作者:Hily原始链接:版权声明:可以转载,转载时务必以超链接形式标明文章原始出处和作者信息及版权声明(一):概述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-aLinuxgentoo2.6.25-gentoo-r9#2SMPMonNov1013:39:19CST2008i686AMDAthlon(tm)64X2DualCoreProcessor4000+AuthenticAMDGNU/Linux安装PythonDjango使用Python代码编写而成,因此需要先确认你的系统中是否已安装Python。大多数的Linux中都已经预装了Python,可以使用以下命令查看是否已经安装:gentoo~#python-VPython2.4.4安装Django从上下载当前的最新官方发布版本:Django-1.0.2-final.tar.gz。然后解压并进行安装:gentoo~#tarzxfDjango-1.0.2-final.tar.gzgentoo~#cdDjango-1.0.2-finalgentooDjango-1.0.2-final#pythonsetup.pyinstall接着你可以在Python命令窗口中查看当前已安装的Django版本:gentoo~#pythonPython2.4.4(#1,Jun152008,16:32:23)[GCC4.1.2(Gentoo4.1.2p1.0.2)]onlinux2Typehelp,copyright,creditsorlicenseformoreinformation.importdjangodjango.VERSION(1,0,2,'final',0)安装MySQLDjango支持PostgreSQL、SQLite3和MySQL等多种数据库,其中MySQL是我用过的最为满意的数据库。如果您没有其它特殊需求的话,建议您选用MySQL。在Gentoo下的安装指令为:gentoo~#emergemysql安装完MySQL后,默认密码为空,需要执行以下指令设置root用户的密码:gentoo~#mysqladmin-uroot-p-hlocalhostpasswordhily如果有需要,可以修改/etc/mysql/my.cnf对MySQL进行配置。然后启动MySQL:gentoo~#/etc/init.d/mysqlstart测试是否安装成功:gentoo~#mysql-uroot-pEnterpassword:WelcometotheMySQLmonitor.Commandsendwith;or\g.YourMySQLconnectionidis194Serverversion:5.0.60-logGentooLinuxmysql-5.0.60-r1Type'help;'or'\h'forhelp.Type'\c'toclearthebuffer.mysql安装MySQLdb要在Django中使用MySQL,你还需要安装MySQLdb:下载后安装(需要setuptools支持):gentoo~#tarzxfMySQL-python-1.2.2.tar.gzgentoo~#cdMySQL-python-1.2.2gentooMySQL-python-1.2.2#pythonsetup.pyinstall新建一个Django项目运行以下命令,新建一个项目:gentoo~#django-admin.pystartprojectmyblog运行后会在当前目录下新建一个名为myblog的目录,结构如下:gentoo~#lsmyblog/__init__.pymanage.pysettings.pyurls.py包含四个文件:__init__.py表示该目录是一个包。manage.pyDjango项目的管理工具,后文多处会用到这个工具。您可以先使用以下命令查看这个工具的子命令列表:gentoomyblog#pythonmanage.pyhelp在help后面加上子命令,则可以查看各个子命令的帮助,如:gentoomyblog#pythonmanage.pyhelprunserverusage:manage.pyrunserver[options][optionalportnumber,oripaddr:port]StartsalightweightWebserverfordevelopment.options:--settings=SETTINGSThePythonpathtoasettingsmodule,e.g.myproject.settings.main.Ifthisisn'tprovided,theDJANGO_SETTINGS_MODULEenvironmentvariablewillbeused.--pythonpath=PYTHONPATHAdirectorytoaddtothePythonpath,e.g./home/djangoprojects/myproject.--tracebackPrinttracebackonexception--noreloadTellsDjangotoNOTusetheauto-reloader.--adminmedia=ADMIN_MEDIA_PATHSpecifiesthedirectoryfromwhichtoserveadminmedia.--versionshowprogram'sversionnumberandexit-h,--helpshowthishelpmessageandexitsettings.py保存项目级别的Django配置信息,如数据库配置、时区设置等等。urls.py定义Django的URL映射规则,实现URLMapper(或者叫URLdispatching)。启动开发服务器Django自带了一个轻量级的Web服务器,适合于在开发过程中快速测试Django代码,而不需要频繁地启动HTTP服务器或FastCGI服务器。使用以下命令来启动:gentoomyblog#pythonmanage.pyrunserverValidatingmodels...0errorsfoundDjangoversion1.0.2final,usingsettings'myblog.settings'Developmentserverisrunningat默认在127.0.0.1:8000上监听,如果要使用不同的ip:port,只需要在runserver后加上ip:port参数,如:gentoomyblog#pythonmanage.pyrunserver192.168.1.6:8080关于该命令的具体帮助,可参考上一节中所述,输入以下命令查看:gentoomyblog#pythonmanage.pyhelprunserver启动成功后,用浏览器打开对应的,如。您应该可以看到以下界面:这就表明我们的开发服务器已经启动,并且正常运行。从下一节起,我们从一个简单的例子开始,逐步引入Django框架的各个组成部分,来帮助大家理解Django的MTV模型的工作机制。主要包括:HTTP请求/响应URL映射视图控制模板系统数据库模型(三):视图控制视图(View),顾名思义,就是用于处理用户端显示的模型。然而,Django中的视图不仅仅是个视图,还充当着一部分控制器的角色,体现在与数据模型的协同工作过程中。HTTP请求/响应Django框架中把HTTPRequest和HTTPResponse都封装成了对象,HttpRequest和HttpResponse。在每个视图函数中,都会接收到一个HttpRequest对象,如:defindex(request):pass有了request这个对象的传入,我们可以在视图函数中很方便地读取HTTP请求的相关信息。当要返回信息给客户端时,我们可以简单地返回一个HttpResponse对象,如:defindex(request):returnHttpResponse('htmlbodyFirstPage/body/html')视图控制一个视图控制单元就是一个视图函数,上一部分中我们看到的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_