350 likes | 745 Views
Django 分享. 大纲. Django 概述 Django 的设计哲学 Django 和 Cherrypy 的比较 Django 的优缺点 Django 的 Apache 配置. 概述. Django( 发音: /?d?æ?go?/) 是用 python 语言写的开源 web 开发框架 (open source web framework) ,它鼓励快速开发 , 并遵循 MVC 设计。
E N D
大纲 • Django概述 • Django的设计哲学 • Django和Cherrypy的比较 • Django的优缺点 • Django的Apache配置
概述 Django(发音:/?d?æ?go?/) 是用python语言写的开源web开发框架(open source web framework),它鼓励快速开发,并遵循MVC设计。 Django遵守 BSD版权,初次发布于2005年7月, 并于2008年9月发布了第一个正式版本1.0 。最新的版本是Django 1.3.1,于2011年9月9日发布。
命名 Django 根据比利时的爵士音乐家Django Reinhardt命名,他是一个吉普赛人,主要以演奏吉它为主,还演奏过小提琴等。
背景 • Django 的历史比较长,来源于一个每天服务于数百万次页面查看请求的在线报纸服务。 • Django 项目来源于迅速变化的在线出版业,它重点关注的是一个可以快速构建并修改基于内容的应用程序的框架。
大纲 • Django概述 • Django的设计哲学 • Django和Cherrypy的比较 • Django的优缺点 • Django的Apache配置
设计哲学 • 主要目的 • 简便、快速的开发数据库驱动的网站。 • 代码复用 • 支持“插件”形式 • Django有许多功能强大的第三方插件 • 自己也可以开发工具包 • 其它 • 强调快速开发 • DRY(Do Not Repeat Yourself)原则。
设计哲学 • Django基于MTV的设计十分优美: • 对象关系映射 (ORM,object-relational mapping) • URL 分派 • 模版系统 • Cache系统 • 国际化 • 自动化的管理界面 • 表单处理
对象关系映射 • 以Python类形式定义你的数据模型,ORM将模型与关系数据库连接起来,你将得到一个非常容易使用的数据库API,同时你也可以在Django中使用原始的SQL语句。 • Eg: From django.db import models Class User(models.Model): name = models.CharField(max_length=255) password = models.CharField(max_length=255) class Meta: db_table = ‘users'
CURD操作 • Create • Eg: from eg.models import User b = User(name='django', password='11111') b.save() • Update • Eg: u = User.objects.get(id=1) u.name = 'djangogood' u.save()
CURD操作 • Read • Eg: • 单个读取: u = User.objects.get(id=1) • 获得全部 us = User.objects.all() • 按条件查询 us = User.objects.get(name__exact="djangogood") ----select * from users where name = ‘djangogood’---- us = User.objects.filter(name __contains='django') • 排序 User.objects.order_by(‘name’)
CURD操作 • 查询操作条件
CURD操作 • Delete • Eg: • 删除某个User u = User.objects.get(id=1) u.delete() • 删除所有的User User.objects.all().delete() • 按条件删除 User.objects.filter(name__exact="djangogood").delete()
URL 分派 • 使用正则表达式匹配URL,你可以任意设计的URL,没有框架的特定限定。 • 简单应用 • 根URL配置参数 • ROOT_URLCONF = ‘statsui.urls‘ setting.py文件中 Eg: from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^articles/2003/$', 'news.views.special_case_2003'), (r'^articles/(\d{4})/$', 'news.views.year_archive'), (r'^articles/(\d{4})/(\d{2})/$', 'news.views.month_archive'), (r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'news.views.article_detail'), ) • Python正则表达式,命名的常规表达组的语法 • (?P<name>pattern) Eg: url(r'^cvs/(?P<topic>\w+)/(?P<menu>\w+)/(?P<startDate>\w+)/(?P<endDate>\w+)$', 'adstats.views.output'), url(r'^cvss/(?P<topic>\w+)/(?P<menu>\w+)/(?P<startDate>\w+)/(?P<endDate>\w+)/(?P<dim>\w+)/(?P<subdimStr>\w+)$', 'adstats.views.outputSecond'),
URL 分派 • Including • Include能包含其它模块的URLConf • url(r'^adstats/', include('statsui.adstats.urls')), • url(r'^ajax/', include('statsui.ajax.urls')), • Include的使用使得Url非常清晰和明确 • URL分派的灵活性 • 大家可以设计自己喜欢的URL
模版语言 • 该模板语言被设计为能够快速呈现且易于使用。Django 模板是利用 {{ variables }} 和 {% tags %} 中嵌入的文本创建的。变量会使用它们表示的值进行计算和替换。标记用来实现基本的控制逻辑。模板可以用来生成任何基于文本的格式,包括 HTML、XML、CSV 和纯文本。 • 下面一些哲学使其简单易用: • 业务逻辑应该和呈现逻辑分离 模板系统应该只负责控制显示和显示相关的逻辑,而不能直接运行Pyhon代码 虽然你可以自定义模板标签来做任意的事情,但Django自己的模板标签不允许执行Python代码 • 语法应该和HTML/XML解耦 Django的模板系统采用非HTML格式,如普通的文本,有些其它的模板语言是基于XML的 XML的格式容易输错,并且XML的模板解析速度也容易变得很慢而难以接受 • 页面设计者被假定为熟悉HTML代码 Django模板系统没有设计成可以在Dreamweaver等WYSISYG编辑器中显示良好 这类编辑器有很多限制,Django希望模板作者直接编辑HTML时感到舒适 • 页面设计者被假定为不是Python程序员
模版语言 • 页面设计者被假定为不是Python程序员 模板系统的作者意识到大部分Web页面的模板是页面设计者写的而不是Python程序员写的 他们不具备Python知识,但Django也允许模板用Python来写,它提供了一种直接编写Python代码 • 目标不是发明一种编程语言 目标只是提供足够的编程功能,如分支和循环等决定呈现相关的逻辑用 • 由于上述的设计哲学,Django模板系统产生如下限制 • 模板不能设置和改变变量的值 可以通过自定义模板标签来达到这个目标(I参看第10章),但是内置Django模板标签不允许这样做 • 模板不能调用原生Python代码 但是也可以通过自定义标签来做这件事情
Cache系统 django的缓存系统非常健壮(载录) • django提供不同粒度的缓存: • 特定view的缓存 • 缓存某个耗时的程序片段的结果 • 缓存整个网站等等 • 设定cache • cache可以设定为3中级别: • 数据库,文件,内存。 • 设定cache可以在setting.py中修改CACHE_BACKEND变量来修改。 • 可设置Memcached、 Database Caching、 Filesystem Caching、 Local-Memory Caching、整站cache等等 • 具体参考: • http://blog.csdn.net/sunyonggao/article/details/4791454
国际化I18N windows 开发环境 • 下载:http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/mingw-get/ • 安装 • mingw-get install gettext • 加入环境变量 • C:\MinGW\bin • 再次运行 • django-admin.py makemessages -l zh_CN 成功 • 备注: 如果不安装,django-admin.py makemessages -l zh_CN, 出现错误提示 xgettext 不是内部命令也不是外部命令。
国际化I18N 配置在setting.py文件 • 配置3个参数:LANGUAGE_CODE、USE_I18N、MIDDLEWARE_CLASSES • eg: LANGUAGE_CODE = 'en-us' USE_I18N = True MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', )
国际化I18N 创建语言文件 • 运行 • django-admin.py makemessages -l zh_CN • 作用: • 产生 locale/zh_CN/LC_MESSAGES/django.po 文件 • 在相应的app目录下: • 创建: conf/locale • 在相应的app下运行命令: • django-admin.py makemessages -l zh_CN • 结果: • conf/locale/zh_CN/LC_MESSAGES/django.po • eg: • #: .\views.py:24 • msgid "Monday" • msgstr "星期一"
国际化I18N 编译信息文件 • 运行: • django-admin.py compilemessages • 结果: • conf/locale/zh_CN/LC_MESSAGES/django.mo • 参考地址: • Django 国际化实例及原理分析http://www.ibm.com/developerworks/cn/web/1101_jinjh_djangoi18n/index.html?ca=drs-
自动化的管理界面 为用户提供的完美管理界面 • 简单配置即可: • urls.py from django.contrib import admin admin.autodiscover() … url(r'^admin/', include(admin.site.urls)), … • 地址: • https://docs.djangoproject.com/en/1.3/intro/tutorial02/
表单处理 表单的应用也非常简洁 • 定义forms.py from django import forms class UserForm(forms.Form): name = forms.CharField() password = forms.CharField() • 定义方法 views.py def login(request): … form = UserForm((request.POST) name = form[‘name'].value() password = form[‘password'].value() … • 定义html的form <form …> <input type="text" name="name" value=""/> <input type="password" name="password" value=""/> </form> • 参考地址: https://docs.djangoproject.com/en/1.3/topics/forms/modelforms/
大纲 • Django概述 • Django的设计哲学 • Django和Cherrypy的比较 • Django的优缺点 • Django的Apache配置
Django和Cherrypy的比较 相同点 • 两者都是Python的Web框架 • 两者都有相同的目标: • 用更少的代码,构建更好的Web应用程序
Django和Cherrypy的比较 不同点 • 背景不同: • django来源于一个每天服务于数百万次页面查看请求的在线报纸服务。 • Cherrypy本身作为一个python的web框架设计的 • Web架构的理念不同: • Django是打造一个“全栈框架”,是一个完美主义者的Web框架 。为Web开发提供了全套的解决方案。(比如:cache、session、feed、orm、geo、auth) • Cherrypy只是一个“Web基本框架”,很多功能需要第三方插件来补充 • 运行方式: • Django一般运行在其它Web上,如:Apache等,同时Django内置了web服务器,可以用做开发,改代码后不需要重启服务器,提高开发效率 • CherryPy是一种Web应用程序服务器
大纲 • Django概述 • Django的设计哲学 • Django和Cherrypy的比较 • Django的优缺点 • Django的Apache配置
Django的优缺点 优点: • 完美的文档 • 全套的解决方案 • 强大的URL路由配置 • 自助管理后台
Django的优缺点 缺点: • 系统紧耦合 • 如果你觉得Django内置的某项功能不是很好,想用喜欢的第三方库来代替是很难的,比如下面将要说的ORM、Template。要在Django里用SQLAlchemy或Mako几乎是不可能,即使打了一些补丁用上了也会让你觉得非常非常别扭。 • Django自带的ORM远不如SQLAlchemy强大 • SQLAlchemy是Python世界里事实上的ORM标准 • Template功能比较弱 • 不能插入Python代码,要写复杂一点的逻辑需要另外用Python实现Tag或Filter。模板不能设置和改变变量的值
大纲 • Django概述 • Django的设计哲学 • Django和Cherrypy的比较 • Django的优缺点 • Django的Apache配置
Django的Apache配置 环境 • Python 2.6.* • Django 1.3.* • Apahce 2.2.* • mod_python.so • mod_python安装下载 • 下载地址 • 官网:http://www.modpython.org/ • 没有wins python 2.6的包 • Linux: • http://archive.apache.org/dist/httpd/modpython/ • windows: • http://download.csdn.net/detail/lanyx1/1337602 • mod_python-3.3.1.win32-py2.6-apache2.2.exe
Django的Apache配置 • 安装 • Linux: • www.modpython.org下载源码包,解压后进入目录: • 执行: ./configure --with-apxs=/***/apache/bin/apxs --with-python=/usr/local/bin/python .make make install • 配置mod_python.so 会在/usr/local/lib/python2.6/site-packages/下生成一个mod_python目录 同时在./src/.libs/下生成了一个mod_python.so,将这个so拷贝到apache的modules目录,并在httpd.conf中加入 LoadModule python_module modules/mod_python.so • windows: • 按提示安装
Django的Apache配置 Django项目配置: <Location "/"> SetHandler python-program PythonHandler django.core.handlers.modpython PythonPath "['E:/Python_Workspace/netqin/stats_ui'] + sys.path" SetEnv DJANGO_SETTINGS_MODULE statsui.settings PythonOption django.root /stats_ui PythonInterpreter inves PythonDebug Off </Location> Alias /static E:/Python_Workspace/netqin/stats_ui/static <Location "/static/"> SetHandler None Order allow,deny Allow from all </Location> 备注: django的urls.py配置的数据,package需保证是全路径,不能相对。