记录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中使用urllib2防止302跳转的代码例子
Jul 07 Python
Python自动重试HTTP连接装饰器
Apr 28 Python
Windows下安装python2和python3多版本教程
Mar 30 Python
python编程实现12306的一个小爬虫实例
Dec 27 Python
Python将图片转换为字符画的方法
Jun 16 Python
对python 操作solr索引数据的实例详解
Dec 07 Python
Python 3.x基于Xml数据的Http请求方法
Dec 28 Python
Opencv-Python图像透视变换cv2.warpPerspective的示例
Apr 11 Python
搭建python django虚拟环境完整步骤详解
Jul 08 Python
python清空命令行方式
Jan 13 Python
Django中ORM找出内容不为空的数据实例
May 20 Python
深入浅析Python代码规范性检测
Jul 31 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 $_SERVER windows系统与linux系统下的区别说明
2014/02/14 PHP
写一段简单的PHP建立文件夹代码
2015/01/06 PHP
修改PHP脚本使WordPress拦截垃圾评论的方法示例
2015/12/10 PHP
PHP将数据导出Excel表中的实例(投机型)
2017/07/31 PHP
Win10 下安装配置IIS + MySQL + nginx + php7.1.7
2017/08/04 PHP
PDO::commit讲解
2019/01/27 PHP
Extjs Ext.MessageBox.confirm 确认对话框详解
2010/04/02 Javascript
JavaScript继承方式实例
2010/10/29 Javascript
js Event对象的5种坐标
2011/09/12 Javascript
js简单实现竖向tab选项卡的方法
2015/05/04 Javascript
js实现动态加载脚本的方法实例汇总
2015/11/02 Javascript
微信小程序 vidao实现视频播放和弹幕的功能
2016/11/02 Javascript
详解JavaScript中的属性和特性
2016/12/08 Javascript
js字符串与Unicode编码互相转换
2017/05/17 Javascript
原生JS实现的轮播图功能详解
2018/08/06 Javascript
用VueJS写一个Chrome浏览器插件的实现方法
2019/02/27 Javascript
vue.js的简单自动求和计算实例
2019/11/08 Javascript
JavaScript 类的封装操作示例详解
2020/05/16 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
[58:11]守擂赛第二周擂主赛 DeMonsTer vs Leopard
2020/04/28 DOTA
python脚本实现分析dns日志并对受访域名排行
2014/09/18 Python
python 系统调用的实例详解
2017/07/11 Python
微信跳一跳python代码实现
2018/01/05 Python
使用Python如何测试InnoDB与MyISAM的读写性能
2018/09/18 Python
Python实现对字典分别按键(key)和值(value)进行排序的方法分析
2018/12/19 Python
python读取文件名并改名字的实例
2019/01/07 Python
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
2019/04/29 Python
Python3.8安装Pygame教程步骤详解
2020/08/14 Python
利用SVG和CSS3来实现一个炫酷的边框动画
2015/07/22 HTML / CSS
CSS3动画:5种预载动画效果实例
2017/04/05 HTML / CSS
财务管理职业生涯规划范文
2013/12/27 职场文书
怎么写自荐书范文
2014/02/12 职场文书
鸿星尔克广告词
2014/03/21 职场文书
关于护士节的演讲稿
2014/05/26 职场文书
七年级作文(600字3篇)
2019/09/24 职场文书
python实现学员管理系统(面向对象版)
2022/06/05 Python