欢迎使用我的 在线工具

小D

读历史、看小说、写程序都是我所爱。技术不好,头脑不灵光,靠的是兴趣。
随笔 - 35, 文章 - 25, 评论 - 13, 引用 - 0
数据加载中……

Django学习

1. 安装Django:python setup.py install

2.  django-admin.py:Django的管理脚本。
django-admin.py startproject newtest:创建一个新项目,这个项目下面可以保护N多WEB程序。

3. 项目文件(自动生成):
__init__.py
表示这是一个 Python 的包
manage.py
提供简单化的 django-admin.py 命令,特别是可以自动进行 DJANGO_SETTINGS_MODULES 和 PYTHONPATH

的处理,而没有这个命令,处理上面环境变量是件麻烦的事情
settings.py
它是django的配置文件
uls.py
url映射处理文件,

4. manage.py runserver [port] 启动web server,可以指定端口,默认为8000。

5. 正则表达式解析参数
 Django中到处都是正则,而且提交的参数也可以通过正则处理,比如
<?P<args>…> 将Group指定为args名,可以通过Match对象调用。Django中大量使用。

6. request.POST, request.GET,以及通吃的request.REQUEST。

7. Django开发顺序:

8. render_to_response ,它可以直接调用模板并返回生成好的文本,直接返回它即可。它接收两个参

数,第一个是模板的名字。它应该返回了一个HttpResponse对象,并拥有一个Context对象(变量环境操

作)。而且传入的模板自动render了处理传入的dict的Context对象。

9. 在 Django 模板中 {{}} 表示引用一个变量, {%%} 表示代码调用。

10. 注意Context对象中的autoescape变量,它默认是True,会自动对Context中的数据进行转义

(escape)。

11. 创建Templates目录:
 在项目下建立一个Templates目录,然后
修改settings.py

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates".
    # Always use forward slashes, even on Windows.
    './templates',
)
Django 还支持在 App 中定义一个 templates 目录。这样 Django 在启动时会检查所有的 App 的

templates 目录,如果存在,则将路径放在 TEMPLATE_DIRS 之后,也就是项目的Templates之后。这样

就方便定义模板路径了。

12. django 中 session 是存放在数据库中的。

13. 添加数据库:
修改settings.py
DATABASE_ENGINE = 'sqlite3'
DATABASE_NAME = './data.db'
DATABASE_USER = ''
DATABASE_PASSWORD = ''
DATABASE_HOST = ''
DATABASE_PORT = ''
 然后,使用django-admin.py 或 或者其简化manage.py
比如: manage.py syncdb,来同步数据库,就会生成一个数据库文件。

14. Django APP
 Model, Template, View 就合成了 MTV 这几个字母。 Model 是用来针对数据库,同时它可以用来自动

生成管理界面, View 在前面我们一直都用它,用来处理请求和响应的相当于MVC框架中的 Controller

的作用, Template 用来生成界面。
创建App
manage.py startapp appname
自动生成如下文件:
__init__.py
表示 wiki 目录是一个包。
views.py
用来放它的 view 的代码。
models.py
用来放 model 代码。
15. 安装App
 修改settings.py
 INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'appname',
)

16. Wiki 是 model 的名字,它需要从 models.Model 派生而来。采用ORM,无需关心底层的数据库
17. 数据库操作:
 对于数据库的记录有两种操纵方式,一种是集合方式,一种是对象方式。集合方式相当于表级

操作,在新版的 0.92 中可以使用 model.objects 来处理。 objects 对象有一些集合方式的操作,如

all() 会返回全部记录, filter() 会根据条件返回部分记录。而象插入新记录则需要使用记录方式来

操作,有时要直接使用 model 类。filter() 中使用的参数与一般的 db-api 是一样的,但如果是比较

相等,可以为: pagename__exact=pagename 也可以简化为 pagename=pagename 。上面__后面是比较条

件。
18. 可以为不同的App添加不同的template。只要将添加的App模板目录加到settings.py中。
19. admin 是 Django 提供的一个核心 app(既然是 app 就需要安装,一会就看到了),它可以根据你的

model 来自动生成管理界面。

20. 简单的命令 manage.py reset address,重置指定的数据表,也就是会drop掉旧表,然后生成新表

,可以修改表结构,但是所有的数据会删除。
21. 修改setting.py
把 LANGUAGE_CODE 由 'en' 改为 'zh-cn' , TIME_ZONE 建议改为 'CCT'
刷新下界面,admin管理app就可以变成中文界面。
22. Django中一个通用的view生成模块。django.views. generic. list_detail,给出常用的现实方案

,而不需要我们自己编写view,来控制显示。具体参见,相应的模块说明。
23. include 可以方便移植,每个 app 都可以有独立的 urls.py ,然后可以与主 urls.py 合在一起使

用。将app的urls.py来包含到指定的主urls.py中。
24. 使用 object_list() 需要的模板文件名为: app_label/model_name_list.html ,这是缺省要查找

的模板名。
25. 永远记住不要在python中留不必要的空行或空格,那是程序错误的万恶之源。
26. 要想在django中取得模板,请用app+下划线+模板名格式来取
27. 实现排序,只要在model类中添加一个名叫Meta 内部类,并设置其ordering = [‘字段名’],就会

按指定的字段排序,’-’表示倒序。

28. 实现分页,仍使用django内置的generic view 机制,在使用 generic view的 object_list 时,它

会根据 URL Dispatch 中是否设置了 paginate_by 这个参数来决定是否使用分页机制。一会我们会看到

在 urls.py 的这个参数。一旦设置了这个参数,则 object_list 会使用 Django 提供的一个分页处理

器来实现分页。它会自动产生分页所用到的许多的变量,这里我们使用了 has_previous, previous,

has_next, next 这四个变量,还有其它一些变量可以使用。
修改urls.py :    (r'^/?$', 'django.views.generic.list_detail.object_list',
        dict(paginate_by=10, **info_dict)),
这里使用10行记录分页,并把info_dict和paginate_by变量一起合成一个dict,注意dict和dict合并,

必须使用可变参数**。

29. 使用site_media:也即是指定放置多媒体文件的路径。
 修改urls.py ,注意是project的urls.py,
(r'^site_media/(?P<path>.*)$', 'django.views.static.serve',
        {'document_root': settings.STATIC_PATH}),
django.views.static.serve,需要document_root参数,我们可以在settings.py中指定。那么我们的多

媒体文件就放置在settings.py指定的STATIC_PATH目录中。
注意我们的settings.py文件的信息,可以通过 django.conf.setting来取得,他会先取得当前project

的settings模块的信息也就是DJANGO_SETTINGS_MODULE环境变量指定的settings模块,当前project中可

以从当前project中取得,如果你想在项目外读取该settings模块,需要指定环境变量

DJANGO_SETTINGS_MODULE,而且要在path环境变量中加入当前project目录,然后是全局的

django.conf.global_settings的信息。

30. 搭建模板框架,我们可以建立一个基本模板,比如base.html,在这个模块中放置通用的东西,然后

其它的模块扩展至他。
注意:{% block content %}content{% endblock %}其它的所有继承该模块的模块,新加的内容都必须

写在content中。
扩展模块使用 extends :比如:{% extends "基本模块" %},注意必须写在子模块的开头。

31. 给Django添加filter:
 需要在app目录下面新建一个目录 templatetags,该目录放置扩展filter,还可以扩展 Tag ,

还可以设置模板变量,还可以进行块处理等复杂的操作。
 为了使这个文件成为一个包,需要添加__init__.py文件,为空就可。
然后添加一个filter文件,比如:change_gender.py,取得模板库,django.template. Library(),
然后将filer注册给这个库就好了,比如:

register = django.template.Libary(),
然后register.filter(‘过滤器名’,过滤器方法对象)
或者使用装饰器,@register.filter(name=’过滤方法’),装饰器,写在过滤方法上面,他将过滤方法

作为一个参数传递给装饰器方法。

32. 可以在模板开始处,使用{%load 过滤器%},load使一个tag,来加载过滤器,他将会在response给

客户端时调用。{% cycle mytr1,mytr2%},这里的cycle也是一个tag,他将循环使用后面给定的css 类

33. 再要使用过滤器的地方使用管道,加上过滤器,管道标签’|’(UNIX系统中常用),后面为过滤器

34.一般对于template的修改或者url,view,model的修改都不需要重启服务器,而对于project的修改

,或者setting.py文件的修改,都需要重启服务器。

35. 设置一般用户,通过admin在admin管理程序中添加,一般自动使用MD5加密,当然你也可以使用其它

的加密算法,也可以使用加密后填入密码框,当然这种加密算法必须是django所支持的。

36. django.contrib.admin.views.decorators import staff_member_required
通过staff_member_required 这个装饰器,就可以让当前被装饰的请求处理方法,处理,如果没有登陆

,而进入该方法,就会转到admin登陆界面。

37. 注意在request对象中有一个user对象,它就是当前登录的用户。我们可以通过其控制用户的登录行

为。例如在settings.py中设置一个UPLOAD_USER,然后在上传方法中处理,就可以控制用户的上传行为

38. 查询模块。name_icontains 是 Django 中过滤条件的写法。这里是说只要包含指定的字符的即可,

而且不区分大小写。

39. i18n,对于国际化的处理,这里不多说,因为我这里没遇到问题,不过要记住确认所有的编码统一

,而且为国际统一编码,最好都用utf-8。

40. 自定义Tag。首先,Tag必须是django.template.Node类型。然后在这个Node 调用它们的 render()

方法,然后将输出结果拼接起来,也就是返回给客户端的结果。然后是注册到系统中,并使用注册方法

。注意这个Tag所对应的处理类,应该放在在templateTags目录下,然后在模板中使用的时候,要加载这

个Tag,也就是对应得处理模块。我想filter和Tag在实际上时同一种东西。

总结:上面是我初学Django的总结,有很多不足。

         ------   2009年09月

14日 晚上21点

posted on 2009-11-04 20:46 vagasnail 阅读(4113) 评论(0)  编辑  收藏 所属分类: python


只有注册用户登录后才能发表评论。


网站导航: