2011年(264)
分类: Python/Ruby
2011-05-27 07:44:06
Django编程技术汇总
附录G:管理的工具
基本用法
#django-admin.py action [options]
或者
#manage.py action [options]
如果不知道后面的action可以django-admin.py --help
Available subcommands:
cleanup
compilemessages
createcachetable
dbshell
diffsettings
dumpdata
flush
inspectdb
loaddata
makemessages
reset
runfcgi
runserver
shell
sql
sqlall
sqlclear
sqlcustom
sqlflush
sqlindexes
sqlinitialdata
sqlreset
sqlsequencereset
startapp
startproject
syncdb
test
testserver
validate
深入研究的选项
createcachetable [tablename]
为数据库缓存后台创建名为 tablename 的缓存表,
Dbshell这个命令不错可以方便调试SQL脚本
runfcgi [options]这个经常会用
runserver [optional port number, or ipaddr:port]
在本地启动轻量级的开发Web服务器。默认情况下,该服务器监听127.0.0.1的8000端口,可以传入参数指定监听的IP地址与端口号
如果你使用普通用户权限运行该命令(推荐方式),你可能会没有权限来监听低端口。低端口往往只有超级用户(root)才能监听。
值得一提的是默认的IP地址 127.0.0.1 无法从网络上的其他机器访问到,要使服务器可以被网络中的其他服务器访问到,使用真实IP地址(例如192.168.2.1)或者0.0.0.0
例如,要在127.0.0.1的7000端口运行该服务器,使用如下方法:
django-admin.py runserver 7000
或者在IP地址1.2.3.4的7000端口运行,使用:
django-admin.py runserver 1.2.3.4:7000
跑两个应用的时候指定不同的端口即可。
sqlreset [appname appname ]对给定的应用名,打印``DROP TABLE``SQL语句,然后是``CREATE TABLE``SQL语句。
附录D 通用视图参考
通用视图的一些参数及其含义
Allow_empty |
Boolean值。如果没有可用对象是否显示页面如果设置成False的话那当对象为None视图就会显示404而不是显示一个空页。默认是False |
Context_processors |
一个列表可以应用到视图里面去 |
Extra_context |
字典。默认是空的字典 如果有值那通用视图就会首先调用它了 |
Mimetype |
返回的MIME类型默认为text/html |
Queryset |
结果集如Author.objects.all() |
Template_loader |
当加载模板的时候模板加载器。 |
Template_name |
要渲染的模板名 |
Template_object_name |
|
通用视图非常棒!
类型一:简单易用视图
Django.views.generic.simple这里面包含了简单的视图用来处理一些公共的事情:在不需要其他业务逻辑的时候渲染一个模板和发出一个重定向。
方法1. django.views.generic.simple.direct_to_template
该视图渲染一给定模板,给其传递一个 {{ params }} 的模板变量,该变量是在URL中被获取的一个自典型参数。直接在URLS配置里面就可以获取字典参数。
示例
from django.views.generic.simple import direct_to_template
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^ab/$',direct_to_template,{'template':'polls/polls_index.html'}),
)
应用场景:欢迎页面、帮助页面之类的比较偏静态的。
直接就渲染页面。我就不需要再写一个视图了。如果URLS里面带了参数怎么办?
在配置URLS里面就可以这样加
(r'^foo/(?P
<body> {{params.id }} body>
应用场景:不需要复杂的业务逻辑处理的都可以考虑使用哦!
方法2.直接重定向到另外一个URL
视图函数 : django.views.generic.simple.redirect_to
urlpatterns = patterns('',
(r'^ab/$',direct_to_template,{'template':'polls/polls_index.html'}),
(r'^foo/(?P
(r'^redirce/$',redirect_to,{'url': '/polls/ab/'}),
)
应用场景:输入非法的URL可以统一跳转。防止用户的非法输入URL值
这个通用视图的必要参数:url 表示被重定向的URL值如果为None则返回404
类型二:列表/详细 通用视图 可以说这两种是非常非常应用场景多的。
比如我们经常用到的是显示列表然后点进去看详情。就是典型的列表/详细视图了
总的模块django.views.generic.list_detail
方法1. 列表 对象列表
视图函数 : django.views.generic.list_detail.object_list
使用这个视图来显示一个对象列表页面。(比如查看用户列表用的比较多了)
适用场景:查询一个数据集之后显示。比如像用户列表的查看等类似于这种操作。
这个再加上了分页的功能可以满足一些常用的场景
比如用户列表、主机列表等都可以考虑使用了。也可以在视图里面再套用通用视图
可以在视图里面套通用视图的哦
def objecview(request):
return object_list(request,queryset=Author.objects.all(),allow_empty=True,template_name='polls/author_list.html')
Q:为啥在通用视图的模板里面没有数据渲染呢?
另外一个就是描述一个对象的详情
View function : django.views.generic.list_detail.object_detail
缓存
数据库缓存
为了将数据库表作为缓存后端,需要在数据库中创建一个缓存表并将Django的缓存系统指向该表
首先,使用如下语句创建一个缓存用数据表:
python manage.py createcachetable [cache_table_name]
PS:看了一下这个表的结构原来其实就是一个K-V的表。
这里的[cache_table_name]是要创建的数据库表名,名字可以是任何你想要的,只要它是合法的在你的数据库中没有被使用这个命令在你的数据库创建一个遵循Django的数据库缓存系统期望形式的单独的表.
一旦你创建了数据库表,设置你的CACHE_BACKEND设置为”db://tablename”,这里的tablename是数据库表的名字,在这个例子中,缓存表名为my_cache_table:
CACHE_BACKEND = 'db://my_cache_table'
数据库缓存后端使用你的settings文件指定的同一数据库,你不能为你的缓存表使用不同的数据库后端.
在 URLconf 中指定视图缓存
前一节中的范例将视图硬编码为使用缓存,因为 cache_page 在适当的位置对 my_view 函数进行了转换。该方法将视图与缓存系统进行了耦合,从几个方面来说并不理想。例如,你可能想在某个无缓存的站点中重用该视图函数,或者你可能想将该视图发布给那些不想通过缓存使用它们的人。解决这些问题的方法是在 URLconf 中指定视图缓存,而不是紧挨着这些视图函数本身来指定。
完成这项工作非常简单:在 URLconf 中用到这些视图函数的时候简单地包裹一个 cache_page 。以下是刚才用到过的 URLconf :
urlpatterns = ('',
(r'^foo/(\d{1,2})/$', my_view),
)
以下是同一个 URLconf ,不过用 cache_page 包裹了 my_view :
from django.views.decorators.cache import cache_page
urlpatterns = ('',
(r'^foo/(\d{1,2})/$', cache_page(my_view, 60 * 15)),
)
如果采取这种方法, 不要忘记在 URLconf 中导入 cache_page .
PS:这个可以应用一下对于静态文件的话可以考虑使用缓存。比如像头这块还有将来的帮助文档
URLS的配置
命名的正则表达式组的语法是 (?P
from django.conf.urls.defaults import *
from mysite import views
urlpatterns = patterns('',
(r'^articles/(?P
(r'^articles/(?P
) 即可以有参数来自URL里面的参数。而不是GET或POST过来的!
视图就可以
month_archive(request, year='2006', month='03')
进行获取相应的参数了。