记录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访问系统环境变量的方法
Apr 29 Python
Python2.x版本中cmp()方法的使用教程
May 14 Python
python简单猜数游戏实例
Jul 09 Python
Tensorflow 训练自己的数据集将数据直接导入到内存
Jun 19 Python
Linux下python与C++使用dlib实现人脸检测
Jun 29 Python
利用Python实现原创工具的Logo与Help
Dec 03 Python
使用TensorFlow实现二分类的方法示例
Feb 05 Python
python pytest进阶之xunit fixture详解
Jun 27 Python
python原类、类的创建过程与方法详解
Jul 19 Python
django写用户登录判定并跳转制定页面的实例
Aug 21 Python
Python 点击指定位置验证码破解的实现代码
Sep 11 Python
解决pycharm中导入自己写的.py函数出错问题
Feb 12 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正确解析UTF-8字符串技巧应用
2012/11/07 PHP
PHP获取mysql数据表的字段名称和详细信息的方法
2014/09/27 PHP
PHP中让curl支持sock5的代码实例
2015/01/21 PHP
详解php设置session(过期、失效、有效期)
2015/11/12 PHP
Javascript 兼容firefox的一些问题
2009/05/21 Javascript
javascript+css 网页每次加载不同样式的实现方法
2009/12/27 Javascript
IE6下出现JavaScript未结束的字符串常量错误的解决方法
2010/11/21 Javascript
jQuery代码优化之基本事件
2011/11/01 Javascript
javascript针对DOM的应用实例(一)
2012/04/15 Javascript
jQuery学习笔记之 Ajax操作篇(三) - 过程处理
2014/06/23 Javascript
浅谈JS使用[ ]来访问对象属性
2016/09/21 Javascript
老生常谈javascript的类型转换
2016/10/12 Javascript
微信小程序中单位rpx和rem的使用
2016/12/06 Javascript
jQuery Datatable 多个查询条件自定义提交事件(推荐)
2017/08/24 jQuery
vue中使用axios post上传头像/图片并实时显示到页面的方法
2018/09/27 Javascript
angular 表单验证器验证的同时限制输入的实现
2019/04/11 Javascript
解决Layui 表格自适应高度的问题
2019/11/15 Javascript
在vs code 中如何创建一个自己的 Vue 模板代码
2020/11/10 Javascript
[48:52]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第一局
2016/02/25 DOTA
Python MD5文件生成码
2009/01/12 Python
Python爬虫爬取美剧网站的实现代码
2016/09/03 Python
python基础教程之匿名函数lambda
2017/01/17 Python
python将类似json的数据存储到MySQL中的实例
2019/07/12 Python
python如何把字符串类型list转换成list
2020/02/18 Python
Python 将 QQ 好友头像生成祝福语的实现代码
2020/05/03 Python
python如何使用腾讯云发送短信
2020/09/17 Python
餐饮业会计岗位职责
2013/12/19 职场文书
新闻编辑专业毕业自荐书范文
2014/02/05 职场文书
办公室主任职责范本
2014/03/07 职场文书
如何写一份好的英文求职信
2014/03/19 职场文书
市场部经理岗位职责
2014/04/10 职场文书
《宿建德江》教学反思
2014/04/23 职场文书
新教师培训方案
2014/06/08 职场文书
革命英雄事迹演讲稿
2014/09/13 职场文书
《我和小伙伴》教学反思
2016/02/20 职场文书
2019入党申请书格式和范文
2019/06/25 职场文书