记录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优先队列实现方法示例
Sep 21 Python
python字典操作实例详解
Nov 16 Python
jupyter notebook引用from pyecharts.charts import Bar运行报错
Apr 23 Python
Python Image模块基本图像处理操作小结
Apr 13 Python
python做反被爬保护的方法
Jul 01 Python
基于python框架Scrapy爬取自己的博客内容过程详解
Aug 05 Python
浅谈django2.0 ForeignKey参数的变化
Aug 06 Python
Python内置函数locals和globals对比
Apr 28 Python
python爬虫构建代理ip池抓取数据库的示例代码
Sep 22 Python
python如何提升爬虫效率
Sep 27 Python
python 6种方法实现单例模式
Dec 15 Python
python数据抓取3种方法总结
Feb 07 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
完美实现GIF动画缩略图的php代码
2011/01/02 PHP
解读PHP中的垃圾回收机制
2015/08/10 PHP
PHP的serialize序列化数据以及JSON格式化数据分析
2015/10/10 PHP
PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
2016/01/07 PHP
Zend Framework常用校验器详解
2016/12/09 PHP
Yii2实现UploadedFile上传文件示例
2017/02/15 PHP
PHP中如何使用Redis接管文件存储Session详解
2018/11/28 PHP
Laravel实现搜索的时候分页并携带参数
2019/10/15 PHP
动态调用CSS文件的JS代码
2010/07/29 Javascript
分页栏的web标准实现
2011/11/01 Javascript
jquery中get和post的简单实例
2014/02/04 Javascript
JavaScript的new date等日期函数在safari中遇到的坑
2016/10/24 Javascript
纯js实现动态时间显示
2020/09/07 Javascript
利用node.js实现反向代理的方法详解
2017/07/24 Javascript
Vue.js实现按钮的动态绑定效果及实现代码
2017/08/21 Javascript
vue-cli项目中怎么使用mock数据
2017/09/27 Javascript
jQuery判断自定义属性data-val用法示例
2019/01/07 jQuery
jQuery模拟html下拉多选框的原生实现方法示例
2019/05/30 jQuery
Node.js fs模块(文件模块)创建、删除目录(文件)读取写入文件流的方法
2019/09/03 Javascript
keep-Alive搭配vue-router实现缓存页面效果的示例代码
2020/06/24 Javascript
[02:14]完美“圣”典2016风云人物:xiao8专访
2016/12/01 DOTA
Django中create和save方法的不同
2019/08/13 Python
pandas实现将日期转换成timestamp
2019/12/07 Python
国际鲜花速递专家:Floraqueen
2016/11/24 全球购物
日本热销NO.1胶原蛋白冻:Aishitoto爱希特多
2019/06/20 全球购物
花卉与景观设计系大学生求职信
2013/10/01 职场文书
应届生污水处理求职信
2013/11/06 职场文书
语文教育专业应届生求职信
2013/11/23 职场文书
美容师的职业规划书
2013/12/27 职场文书
大学生简历求职信
2014/06/24 职场文书
建筑学专业自荐书
2014/07/09 职场文书
党章培训心得体会
2014/09/04 职场文书
2014广电局实施党的群众路线教育实践活动方案思想汇报
2014/09/22 职场文书
2015年党风廉政建设工作总结
2015/04/09 职场文书
python-for x in range的用法(注意要点、细节)
2021/05/10 Python
Pygame游戏开发之太空射击实战敌人精灵篇
2022/08/05 Python