记录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微信跳一跳游戏辅助代码解析
Jan 29 Python
python中pylint使用方法(pylint代码检查)
Apr 06 Python
浅谈关于Python3中venv虚拟环境
Aug 01 Python
使用python生成杨辉三角形的示例代码
Aug 29 Python
详解Pandas之容易让人混淆的行选择和列选择
Jul 10 Python
python3 反射的四种基本方法解析
Aug 26 Python
python函数中将变量名转换成字符串实例
May 11 Python
Django windows使用Apache实现部署流程解析
Oct 12 Python
python爬虫用scrapy获取影片的实例分析
Nov 23 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
Nov 25 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
Dec 07 Python
Python中使用ipython的详细教程
Jun 22 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之第四天
2006/10/09 PHP
php mssql 时间格式问题
2009/01/13 PHP
PHP 配置open_basedir 让各虚拟站点独立运行
2009/11/12 PHP
PHP判断搜索引擎蜘蛛并自动记忆到文件的代码
2012/02/04 PHP
CentOS系统中PHP安装扩展的方式汇总
2017/04/09 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
javascript比较文档位置
2008/04/08 Javascript
简明json介绍
2008/09/28 Javascript
javascript 得到文件后缀名的思路及实现
2020/05/09 Javascript
Nodejs sublime text 3安装与配置
2014/06/19 NodeJs
javascript基于DOM实现权限选择实例分析
2015/05/14 Javascript
jQuery实现表格行和列的动态添加与删除方法【测试可用】
2016/08/01 Javascript
树结构之JavaScript
2017/01/24 Javascript
JavaScript requestAnimationFrame动画详解
2017/09/14 Javascript
javascript+html5+css3自定义弹出窗口效果
2017/10/26 Javascript
还不懂递归?读完这篇文章保证你会懂
2018/07/29 Javascript
微信小程序实现图片压缩
2019/12/03 Javascript
js模拟实现烟花特效
2020/03/10 Javascript
[02:20]2014DOTA2西雅图邀请赛 MVP外卡赛首胜采访
2014/07/09 DOTA
举例详解Python中threading模块的几个常用方法
2015/06/18 Python
使用python检测主机存活端口及检查存活主机
2015/10/12 Python
教大家使用Python SqlAlchemy
2016/02/12 Python
Python中实现单例模式的n种方式和原理
2018/11/14 Python
python学习开发mock接口
2019/04/28 Python
python实现京东订单推送到测试环境,提供便利操作示例
2019/08/09 Python
python3的数据类型及数据类型转换实例详解
2019/08/20 Python
Css3实现无缝滚动防抖
2020/09/14 HTML / CSS
css3中仿放大镜效果的几种方式原理解析
2020/12/03 HTML / CSS
几道Java和数据库的面试题
2013/05/30 面试题
五星级酒店餐饮部总监的标准岗位职责
2014/02/17 职场文书
趣味运动会策划方案
2014/06/02 职场文书
法英专业大学生职业生涯规划范文:衡外情,量己力!
2014/09/23 职场文书
2014三年级班主任工作总结
2014/12/05 职场文书
2015年暑期实践报告范文
2015/07/13 职场文书
js实现模拟购物商城案例
2021/05/18 Javascript
游戏《我的世界》澄清Xbox版暂无计划加入光追
2022/04/03 其他游戏