记录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基础入门之seed()方法的使用
May 15 Python
python基于pyDes库实现des加密的方法
Apr 29 Python
详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
Jun 23 Python
Python模拟简单电梯调度算法示例
Aug 20 Python
python实现字符串和字典的转换
Sep 29 Python
pandas数据集的端到端处理
Feb 18 Python
在Python中画图(基于Jupyter notebook的魔法函数)
Oct 28 Python
PythonPC客户端自动化实现原理(pywinauto)
May 28 Python
OpenCV 之按位运算举例解析
Jun 19 Python
小白教你PyCharm从下载到安装再到科学使用PyCharm2020最新激活码
Sep 25 Python
python利用faker库批量生成测试数据
Oct 15 Python
python第三方网页解析器 lxml 扩展库与 xpath 的使用方法
Apr 06 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
PHP 工厂模式使用方法
2010/05/18 PHP
PHP高自定义性安全验证码代码
2011/11/27 PHP
PHP和JAVA中的重载(overload)和覆盖(override) 介绍
2012/03/01 PHP
使用PHP导出Word文档的原理和实例
2013/10/21 PHP
php上传文件常见问题总结
2015/02/03 PHP
PHP实现操作redis的封装类完整实例
2015/11/14 PHP
基于php实现的php代码加密解密类完整实例
2016/10/12 PHP
PHP基于DOMDocument解析和生成xml的方法分析
2017/07/17 PHP
tp5(thinkPHP5)框架实现多数据库查询的方法
2019/01/10 PHP
php的对象传值与引用传值代码实例讲解
2021/02/26 PHP
JavaScript高级程序设计 阅读笔记(十三) js定义类或对象
2012/08/14 Javascript
JS实现黑色大气的二级导航菜单效果
2015/09/18 Javascript
jQuery简单实现input文本框内灰色提示文本效果的方法
2015/12/02 Javascript
解决JS无法调用Controller问题的方法
2015/12/31 Javascript
JavaScript实现下拉菜单的显示和隐藏
2016/01/05 Javascript
H5实现中奖记录逐行滚动切换效果
2017/03/13 Javascript
如何解决日期函数new Date()浏览器兼容性问题
2019/09/11 Javascript
[53:13]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS LGD-GAMING
2014/05/22 DOTA
[25:59]Newbee vs TNC 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
使用Python下载Bing图片(代码)
2013/11/07 Python
Python语言描述KNN算法与Kd树
2017/12/13 Python
PyQt4 treewidget 选择改变颜色,并设置可编辑的方法
2019/06/17 Python
Python爬虫运用正则表达式的方法和优缺点
2019/08/25 Python
Keras设定GPU使用内存大小方式(Tensorflow backend)
2020/05/22 Python
Keras设置以及获取权重的实现
2020/06/19 Python
python抢购软件/插件/脚本附完整源码
2021/03/04 Python
基于HTML5 Canvas 实现商场监控实例详解
2017/11/20 HTML / CSS
UNIONBAY官网:美国青少年服装品牌
2019/03/26 全球购物
雅虎笔试题(字符串操作)
2015/03/24 面试题
职业生涯规划书的格式
2013/12/29 职场文书
《雨点儿》教学反思
2014/04/14 职场文书
2014预备党员党课学习心得范文
2014/07/08 职场文书
办公室领导干部作风整顿个人整改措施
2014/09/17 职场文书
2014年司法局工作总结
2014/12/11 职场文书
党员考试作弊检讨书1000字
2015/02/16 职场文书
导游词之襄阳古城
2019/09/27 职场文书