Django Web开发指南笔记
语句VS表达式
- python代码由表达式和语句组成,由解释器负责执行。
- 主要区别:表达式是一个值,它的结果一定是一个python对象;如:12,1+2,int('123')
- 结果不是对象的代码是语句,如:if、print、for
python中可变、不可变类型
- 简单类型或者标量类型,包括整数等其他数字类型,str和unicode这样的字符串类型,以及元祖都是不可变。
-
列表、字典、类都是可变的
-
python对象都有三个属性(类型、标识符、值)
-
标识符:运行在解释器里所有对象都有的唯一的一个标识号
*args 和 **kwargs
- 单*表示有元祖或list出现
- 两个*表示有字典出现
re.match 和 re.search
- match :只从字符串的开始与正则表达式匹配,匹配成功返回match对象,否则返回none;
- search :将字符串的所有字串尝试与正则表达式匹配,如果所有的字串都没有匹配成功,返回none,否则返回match对象;(re.search相当于perl中的默认行为)
- 然后再用match对象的group和groups方法获取匹配模式
import random vs from randow import choice
Package
http://www.crifan.com/pythonmodulevs_libraryvspackage/
python 的浅拷贝和深拷贝
http://www.tuicool.com/articles/nuQFbqe
python 动态实例属性
模板继承
` {% extends "base.html" %}
{% block content %}
{% for post in posts %}
<h2>{{ post.title }}</h2>
<p>{{ post.timestamp }}</p>
<p>{{ post.body }}</p>
{% endfor %}
{% endblock %}
`
Django模型层Meta内部类详解
http://blog.chinaunix.net/uid-21633169-id-4374219.html
模板过滤器
- 日期
`
<p>{{ post.timestamp|date }}</p>
`
ORM关系映射
-
多对一: ForeignKeyField
-
多对多: ManyToManyField(会自动创建关系表)
-
一对一: OneToOneField
模型继承
- 抽象基础类
抽象类不会生成数据表
- 多表继承
被继承的类(父类)就是一张数据表,其实就是在子类和父类之间设置了一个OneToOneField。 由于这种形式的继承允许父类拥有自己的属性,Meta的继承很可能导致两端的冲突(父类的Meta会被子类继承)。
什么是鸭子类型(duck typing)
- 关心对象是什么类型,只关心行为!
- 比如在python中,有很多file-like的东西,比如StringIO,GzipFile,socket。它们有很多相同的方法,我们把它们当作文件使用。
中间件
视图与逻辑
视图(也叫控制器),时所有DjangoWeb应用程序的核心。在定义和使用模型的时候,我们是数据库管理员;在编写模板的时候,我们时界面设计师;而在编写视图的时候,我们才是真正的软件工程师。