记录Django开发心得


Posted in Python onJuly 16, 2014

概念层面

概括

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来获得真正的数据实体

Python 相关文章推荐
python绘制简单折线图代码示例
Dec 19 Python
使用python验证代理ip是否可用的实现方法
Jul 25 Python
详解Python with/as使用说明
Dec 13 Python
Python使用sax模块解析XML文件示例
Apr 04 Python
Python实现Singleton模式的方式详解
Aug 08 Python
Python通过cv2读取多个USB摄像头
Aug 28 Python
python文件读写代码实例
Oct 21 Python
python实现的汉诺塔算法示例
Oct 23 Python
使用python检查yaml配置文件是否符合要求
Apr 09 Python
Python如何实现爬取B站视频
May 20 Python
Python grpc超时机制代码示例
Sep 14 Python
python绘制箱型图
Apr 27 Python
Python实现动态添加类的属性或成员函数的解决方法
Jul 16 #Python
Python重新引入被覆盖的自带function
Jul 16 #Python
Python实现扫描指定目录下的子目录及文件的方法
Jul 16 #Python
python re正则表达式模块(Regular Expression)
Jul 16 #Python
Web服务器框架 Tornado简介
Jul 16 #Python
高性能web服务器框架Tornado简单实现restful接口及开发实例
Jul 16 #Python
Django在Win7下的安装及创建项目hello word简明教程
Jul 14 #Python
You might like
去掉destoon资讯内容页keywords关键字自带的文章标题的方法
2014/08/21 PHP
js资料prototype 属性
2007/03/13 Javascript
效率高的Javscript字符串替换函数的benchmark
2008/08/02 Javascript
JQuery 学习技巧总结
2010/05/21 Javascript
Javascript中自动切换焦点实现代码
2012/12/15 Javascript
JavaScript中OnLoad几种使用方法
2012/12/15 Javascript
js 实现在离开页面时提醒未保存的信息(减少用户重复操作)
2013/01/16 Javascript
Js 去掉字符串中的空格(实现代码)
2013/11/19 Javascript
jquery的ajax和getJson跨域获取json数据的实现方法
2014/02/04 Javascript
一系列Bootstrap导航条使用方法分享
2016/04/29 Javascript
微信小程序小组件 基于Canvas实现直播点赞气泡效果
2020/05/29 Javascript
node.js中express-session配置项详解
2017/05/31 Javascript
详解VSCode配置启动Vue项目
2019/05/14 Javascript
微信小程序页面上下滚动效果
2020/11/18 Javascript
JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记
2020/07/15 Javascript
[02:56]DOTA2亚洲邀请赛 VG出场战队巡礼
2015/02/07 DOTA
[28:48]《真视界》- 2017年国际邀请赛
2017/09/27 DOTA
python实现将文本转换成语音的方法
2015/05/28 Python
利用python实现简单的循环购物车功能示例代码
2017/07/05 Python
PyQt5主窗口动态加载Widget实例代码
2018/02/07 Python
Django中的CBV和FBV示例介绍
2018/02/25 Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
2019/04/28 Python
全面了解django的缓存机制及使用方法
2019/07/22 Python
Python将string转换到float的实例方法
2019/07/29 Python
使用OpenCV实现仿射变换—旋转功能
2019/08/29 Python
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
2020/02/06 Python
为什么说python更适合树莓派编程
2020/07/20 Python
简单聊聊H5的pushState与replaceState的用法
2018/04/03 HTML / CSS
浅谈three.js中的needsUpdate的应用
2012/11/12 HTML / CSS
Canvas环形饼图与手势控制的实现代码
2019/11/08 HTML / CSS
阿玛尼化妆品美国官网:Giorgio Armani Beauty
2017/02/02 全球购物
Parts Express:音频、视频和扬声器的第一来源
2017/04/25 全球购物
发现世界上最好的珠宝设计师:JewelStreet
2017/12/17 全球购物
Book Depository美国:全球领先的专业网上书店之一
2019/08/14 全球购物
Linux面试题LINUX系统类
2014/11/19 面试题
2015年艾滋病防治工作总结
2015/05/22 职场文书