当前位置: 移动技术网 > IT编程>脚本编程>Python > 记录Django开发心得

记录Django开发心得

2019年03月28日  | 移动技术网IT编程  | 我要评论

家装电线的选择,病理生理学重点,求生之路2杀戮时刻

概念层面

概括

django是属于mvc的web框架。

model:负责与数据库打交道

view:负责获取或者增强从models得到的数据

controller:这是django本身

project与app的区别

project:提供各种配置文件 app:功能的结合,包括model和view,需要在根目录下添加”__init__.py”,使得python可以识别

manytomany与foreignkey的区别

foreignkey例子:

员工打卡上班的记录——员工可有多次打卡记录,但是一次刷卡记录只能有单一员工属性(一对多)

manytomany例子:

一篇文章可以有多个标签,而一个标签对应的文章也可以是多篇的(多对多)

manytomany还有一种特殊的结构,非常类似twitter的follow。

假设 a follow了 b,但是b并没有follow a,他们之间的follow是不对等的,要实现这种关系,要在meta里面设置symetric=false

sexycode

这是我理解后觉得“性感到死”的一些代码:

lambda x, y: x+y 

lambda其实和js中的匿名函数有这异曲同工的作用,嫌起名麻烦,就丢进去,lambda默认返回里面的值,所以不需要return

map(lambda x: x+1, [1,2,3]) #得到[2,3,4] 

也就是每个都执行一次前面的函数

reduce(lambda x, y: x+y, [1,2,3]) #得到6 

也就是每个都和之前的元素执行一次操作

[i for i in xrange(0,100) if i%2==0] 

得到100以下所有偶数。学术上叫“列表推导”,但在现实案例中是遍历的好工具。

q(**{key:value}) 

我在培训的时候,学到的是q、f这两个django函数是不接受字符串的,即 q("abc=1") 是不能接受的。但是这段代码性感之处就是彻底摆脱了这条束缚(其实就是重写了keyword对),可以随意构造你喜欢的查询段,这在构造搜索功能时十分有用。比如:

q_dict = reduce(lambda x,y: x&y, [ q(**{"%s__slug_name" % taxonomy:request.get.get(taxonomy)}
    ) for taxonomy in request.get.keys() if taxonomy in searchable_list ])
@property 

这个@符号的用法叫“修饰器”,个人感觉这是python比其他语言优美的地方,如何构造修饰器的话,还是看文档的好。这里只是说在class中使用 @property 的话,这个函数就自动地变成class的属性了,这和js的set、get很像
super超类的使用,super一出,继承的子class一概不执行自身的函数,而是执行super指定的函数
annotate和aggregate。这两个家伙在构造新的query_set时非常有用。比如要统计出一台电脑的总价时,在computermanager里面使用

def get_query_set(self):
query_set = super(computermanager, self).get_query_set()
query_set = query_set.annotate(price=sum('devices__price'))

这样,每台电脑就有了总价格。这在构造商品集的时候很方便,但是admin.py的编写就略显罗嗦了。

error集

取出数据时:xxmanager object is not iterable

这是因为django不会在执行代码过程中得出sql语句并查询(所以想获得sql语句也是不可能的)。所以需要使用.get(),.all(),.filter来获得真正的数据实体

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网