《Django Web 开发指南》。貌似使用Django1.0版本,基本内容差很少,细读无妨。地址:http://www.jb51.net/books/76079.html
html
(一)第一部分 入门python
(1)内置数字工厂函数数据库
int(12.34)会建立一个新的值为12的整数对象,而float(12)则会返回12.0。django
(2)其余序列操做符安全
链接(+),复制(*),以及检查是不是成员(in, not in)框架
'**'.join('**') 或 '***%s***%d' % (str, int)函数
(3)生成器表达式oop
even_number = (x for x in range(1000) if x % 2 == 0)
(4)元组网站
tuple = ('', ) #空元组定义url
(5)enumerate
能让你同时迭代和计数的函数
for i, value in enumerate(data): print i, value
(6)匿名函数
sum = lambda x, y: x+y sum(a, b)
(7)函数装饰器 !!!
以‘@’开头,对函数进行‘包装’
(8)*args 和 **kwargs
*args :元组或列表形式
**kwargs :字典形式
(9)实例化
其余语言通常使用new来建立实例,Python使用的是‘初始化程序’initializer 而不是‘构造函数’constructor
即'__init__'函数
Python还支持动态的实例属性。能够‘凭空’创造实例的属性
(10)正则 !
(11)关于模块
Python有导入模块和加载模块之分。模块能够被导入屡次,但只会被加载一次。
(12)可变性。!!!
可变性是指对象的值可否被改变。Python对象有:类型,标示符,值
拷贝:copy.copy() 深度拷贝:copy.deepcopy()
(13)动态网站基础
通讯:http,URL,请求,响应
(14)不要重复本身(DRY)
(二)深刻Django
(1)定义模型
模型变量(model field),模型类(model class),模型类元数据(model class metadata)
(2)为何使用ORM
封装有用的方法,可移植性,安全性,表现力
(3)主键
使用 AutoField(),或者在某个变量上指定 primary_key = True
(4)模型间的关系 !!
ForeignKey,ManyToManyField,OneToOneField
对于反向访问,能够使用 **_set.all() 进行,也能够指定 related_name = **s 来访问。
对于多对多关系中。也能够经过 through = '***' 来指向一个显式的中间模型类。在这个类上能够添加额外的变量。
限制关系 : limit_choices_to = dict()
(5)模型的继承 !!
抽象基础类(abstract base class)和多表继承(multi-table inheritance)
抽象基础类,纯Python继承。添加 class Meta: abstract = True #这样不会建立数据库表,只是用来为其余实体类提供属性而存在的
唉,刚吃完晚饭。外面竟下起了瓢泼大雨。呆在出租房里竟有一丝的凉意。
--2014年08月09日21:01:08
多表继承,和抽象基础类差异不大。只是再也不须要 abstract=True 这个 Meta 属性了。
(6)admin !
(7)使用模型
Django项目中 manage.py 脚本包含了操做数据库的功能。syncdb只能保证全部模型类都有对应的数据库表,但不会修改已经存在的数据库表。
(8)查询语法
查询由模式生成的数据库须要两个类 Manager和QuerySet
(9)QuerySet Q 和 ~Q
使用Q关键字参数封装类进一步参数化。容许你使用更复杂的逻辑。
from django.db.models import Q Persons.objects.filter(Q(last='Doe') | (Q(last='Smith') & Q(first='John') & ~Q(middle__startswith='W')))
(10)用Extra调整SQL !!!
接受四个关键字 : select , where , tables , params
(11)利用Django没有提供的SQL特性 !!!!!
定义模式(schema) 和 定制 initial SQL
视图view,触发器trigger,级联cascade
以前看过一些, 后来使用的很少,基本忘记的差很少了。如今须要好好的研究一下了!
(12)中间件 !!!
Django的中间件就是Python的一个类,实现一个特定的接口。
(13)url配置
url配置中,关于参数。能够使用 : (/?P<param>\d{2}/) 来指定 views视图中的参数对应关系。
(14)手动抛异常
try: person = Person.objects.get(pk=id) except Person.DoesNotExist: raise Http404
或者使用 get_object_or_404
(15)利用 *args / **kwargs
#在视图函数中 def myview(*args, **kwargs): #这样咱们就能够使用,args[0]或kwargs['object_id'] 而不须要再记住 URLconf中的名称了 ##固然在 Django1.6中,彻底能够不用在URLconf中使用 ?P<param>
(16)Django的模板
模板是一种独立的文本文件,同时还包含了静态的内容和动态标记的逻辑,循环和数据显示等。
模板系统一般用来生成HTML文件,但还能够生成log文件,E-mail正文,CSV文件等任何文本格式。!
在模板中输出context变量时,会隐式的调用unicode方法。若是试图打印没有__unicode__方法的对象,在模板中是不可见的。
(17)模板过滤器
模板过滤器。
(18) mark- Page 121
--2014年08月10日01:31:25
(17)模板过滤器 !
Django提供了不少来封装Web开发中常见的文本处理工做。
(18)标签
{% for %} 中 有 : {{ forloop }} {{ forloop.first }}{{ forloop.last }}{{ forloop.counter }}
(19)表单
Django提供了forms库把框架里的三个主要组件联系在一块儿:模型定义的数据库字段,模板里显示的HTML表单标签,还有检验用户输入和显示错误信息的能力。
forms.Form 和 forms.ModelForm 之分。
(20)保存 ModelForm
有一个save()方法,能够将信息保存为数据库里的一条记录,而后返回Model对象结果。
save()方法接受一个可选的参数 “ commit ”默认为“ True ”。
new_person = form.save(commit=False) # new_persion.attr do somethings new_person.save()
关系数据库要求目标记录在引用前就存在!!!
当有关联对象时,Django会给表单添加一个额外的方法 save_m2m
(21)区别于Model
ModelForm的Meta嵌套类容许你定义两个可选属性,fields和exclude。(null=True)
(22)Form实例初始化
form = PersonForm(initial={'name': '请输入姓名'})
(23)Form表单验证
唉 !为了这个验证,折腾了大半夜!!!
# 获取文章详细信息,包含一个CommentForm表单 def detail(req, article_id): if req.method == 'POST': form = CommentForm(req.POST) if form.is_valid(): name = form.cleaned_data['name'] address = form.cleaned_data['address'] email = form.cleaned_data['email'] context = form.cleaned_data['context'] article = Article.objects.get(pk=article_id) comment = Comment(article=article, name=name, address=address, email=email, context=context) comment.save() return HttpResponseRedirect('dlog/detail.html') else: form = CommentForm(initial={'name': '请输入姓名'}) article = get_object_or_404(Article, pk=article_id) comments = article.comment_set.order_by('created_time') context = {'article': article, 'comments': comments, 'form': form} context.update(csrf(req)) article.comment_count = article.comment_set.all().count() article.save() return render_to_response('dlog/detail.html', context)
此页面须要展现Form。当为POST时,绑定Form与request.POST。并验证是否有效。
当不为‘POST’时,只需将Form清空便可。而后处理本views要显示的东西。
官方文档例子:
from django.shortcuts import renderfrom django.http import HttpResponseRedirectdef contact(request): if request.method == 'POST': # If the form has been submitted... # ContactForm was defined in the previous section form = ContactForm(request.POST) # A form bound to the POST data if form.is_valid(): # All validation rules pass # Process the data in form.cleaned_data # ... return HttpResponseRedirect('/thanks/') # Redirect after POST else: form = ContactForm() # An unbound form return render(request, 'contact.html', { 'form': form, })
(24)Widget
控制如何显示标签元素的对象。
看文档不仔细啊!唉,害我折腾大半天!!
--2014年08月10日04:13:48