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新特性:
从 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的总结,有很多不足。
分享到:
相关推荐
Django学习笔记--阉割版 Django是Python下的一个免费开源的Web应用框架,使用它可以快速构建可维护、可扩展...本文总结了 Django 的基本概念和技术要点,包括安装、项目结构、应用程序、视图、路由、模型和数据库等。
这是一份Django学习笔记,里面记录了Django开发的大部分知识点,进行了罗列。
下面将详细阐述这些关键领域的要点。 1. **前端开发**:前端是用户与应用交互的部分,主要由HTML、CSS和JavaScript构成。HTML用于创建页面结构,CSS负责样式设计,使页面美观易用,而JavaScript则处理用户交互和...
"Python学习手册笔记.zip" 提示这是一个关于Python编程的学习资料压缩包,可能包含了一个或多个文档,如本例中的"Python学习手册笔记.md",这通常是一个Markdown格式的文本文件,用于记录学习过程中的要点和心得。...
以下是一些主要的学习要点: 1. **基础语法**:Python的基础始于变量、数据类型(如整数、浮点数、字符串、布尔值)以及运算符的使用。理解列表、元组、字典和集合等复合数据结构是至关重要的。此外,学习流程控制...
标题 "my-personal-zen: 我从我的阅读中收集笔记和要点" 暗示这是一个个人知识管理系统,其中包含了作者在阅读过程中整理的笔记和关键信息。描述 "我的个人禅 我的读书笔记和重点摘要 我写过" 确认了这个项目的性质...
4. 笔记或讲义:这些可能是别人在学习过程中整理的要点,可以帮助你快速理解和回顾关键知识点。 5. 资源链接或推荐列表:可能包含更多外部学习资源,如在线课程、论坛讨论、官方文档等。 为了充分利用这些资源,...
【描述】中的"笔记"一词简洁明了,表明内容可能涵盖了各种主题,可能是编程语言的语法要点、软件开发流程、问题解决策略,或者是对某个技术框架的解析等。笔记的特点是针对性强,易于理解和回顾,对于学习者来说是一...
"dev-notes-main"这个文件名暗示了笔记可能是一个主要的、综合性的开发资源,包含了上述多个领域的核心要点。通过深入阅读和理解这些笔记,开发者不仅可以巩固已有的知识,还能发现新的学习方向,从而提升自己的专业...
《流畅的Python学习记录》是一份综合性的Python学习资料,其中包含了作者在深入学习Python过程中积累的各种知识要点、技巧和实践经验。这份压缩包文件可能是为了帮助初学者或有一定基础的Python开发者巩固技能、提升...
"十次方项目.txt"可能是项目介绍、教程大纲或者是关键概念的笔记,它可能包含了项目的核心要点,帮助学习者快速定位和理解项目的主要内容。通过阅读这个文本文件,你可以获得更具体的学习路径和重点。 总的来说,...
在这个上下文中,我们可以推测这份资料可能是一位名叫"金兄"的人或者一个与"金兄"相关的话题,比如他的面试经验、面试技巧或者是他在面试过程中的学习笔记。由于没有更多关于文件的具体内容,我们将从一般性的面试...
1. **笔记(Notes)**:罗德里戈可能在他的笔记中记录了他在编程过程中遇到的问题、解决方案、技术要点或者是学习新语言或框架的心得。这可能包括代码片段、调试技巧、设计模式的应用等。通过查看“rodriados-master...
这些文件可能以markdown、txt或其他格式存在,每一份都记录了作者在特定时间学到的技术要点。例如,“TIL-main”下可能有“2022-01-01_python.md”,表示作者在2022年1月1日学习了Python的相关知识;或者...
本项目"Learn:学习框架的记录"显然是一个个人学习历程的整理,专注于记录不同框架的学习心得和技术要点。 首先,我们可以从标题"Learn:学习框架的记录"中理解到,这是一个关于学习各种编程框架的资料集合。框架的...
自然语言处理(NLP)是计算机科学领域的一个重要分支,主要关注如何使计算机理解、解析、生成和操作人类自然语言...NLPNotes-master可能包含有关这些主题的详细笔记和代码示例,进一步学习这些材料将加深对NLP的理解。
【Python工作坊】是本次知识分享的主题,它涵盖了在Python编程语言学习过程中的各种要点和实践。这个工作坊可能是为了教育或培训目的而设计的,旨在帮助参与者深入了解Python的基础和高级概念。通过这个工作坊,参与...