`
daiming253685
  • 浏览: 23117 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

Django 要点笔记

阅读更多

 

                                        Django 要点

 

 

1. 安装Djangopython setup.py install

 

2.  django-admin.pyDjango的管理脚本。

django-admin.py startproject newtest:创建一个新项目,这个项目下面可以保护NWEB程序。


 


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了处理传入的dictContext对象。


 


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 合在一起使用。将appurls.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_dictpaginate_by变量一起合成一个dict,注意dictdict合并,必须使用可变参数**

 

29. 使用site_media:也即是指定放置多媒体文件的路径。

       修改urls.py ,注意是projecturls.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来取得,他会先取得当前projectsettings模块的信息也就是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的修改或者urlviewmodel的修改都不需要重启服务器,而对于project的修改,或者setting.py文件的修改,都需要重启服务器。

 

35. 设置一般用户,通过adminadmin管理程序中添加,一般自动使用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,也就是对应得处理模块。我想filterTag在实际上时同一种东西。

 

django新特性:

   

 

Django 1.0.2 开始, maxlength 应改为:max_length

Django 1.0.2 开始,Context类默认autoescape=True,可以使用代名字的参数设为False,或者模板中{% autoescape off %},注意写在页首。

   Django 0.9

 gender = models.CharField('性别', choices=(('M', ''), ('F', '')),

        max_length=1)

radio_admin=True 已经在 Django 1.1 中不适用了,不能写在 field 里,admin model分离了,把 models.py 的全部内容用以下代码替换:

class AddressAdmin(admin.options.ModelAdmin):

        model=Address

        radio_fields = {'gender':admin.VERTICAL}

 

admin.site.register(Address, AddressAdmin)

 

urls中启动admin,如下:

(r'^admin/', include(admin.site.urls)),

 

创建超级用户,被默认到了django命令中,所以只要运行
./manage.py createsuperuser

就可以了。

 

必须在models.py中添加__str__就可以改变数据纪录的页面显示,以前版本的__repr__不可用了。

 

新添加快捷方法 django.shortcuts.redirect()代替django.http.HttpResponseRedirect

新的上传程序的写法:

        file = request.FILES['file']
        file_name = get_unique_file_name()
       
        path1 = os.path.join(settings.DIVO_TEMP_ROOT, 'xf')
        destination = open('%s/%s' % (path1, file_name), 'wb+')
        for chunk in file.chunks():
            destination.write(chunk)
        destination.close()

在以前的版本中的InMemoryUploadedFile[‘content’],改成了InMemoryUploadedFile.read()

 

 

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

 

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics