记录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中利用Pandas库处理大数据的简单介绍
Apr 07 Python
详解Python中DOM方法的动态性
Apr 11 Python
编写Python脚本来实现最简单的FTP下载的教程
May 04 Python
Python中str.format()详解
Mar 12 Python
使用Python写CUDA程序的方法
Mar 27 Python
15行Python代码带你轻松理解令牌桶算法
Mar 21 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
Oct 16 Python
django项目中新增app的2种实现方法
Apr 01 Python
scrapy框架携带cookie访问淘宝购物车功能的实现代码
Jul 07 Python
Python生成并下载文件后端代码实例
Aug 31 Python
详解python算法常用技巧与内置库
Oct 17 Python
Python如何使用神经网络进行简单文本分类
Feb 25 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
MOTOROLA 摩托罗拉 MODEL 66-XI五灯中波收音机
2021/03/02 无线电
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
2017/04/04 PHP
Yii框架核心组件类实例详解
2019/08/06 PHP
关于B/S判断浏览器断开的问题讨论
2008/10/29 Javascript
DOM 基本方法
2009/07/18 Javascript
基于jQuery的图片大小自动适应实现代码
2010/11/17 Javascript
Jquery实现网页跳转或用命令打开指定网页的解决方法
2013/07/09 Javascript
jquery等宽输出文字插件使用介绍
2013/09/18 Javascript
JQuery报错Uncaught TypeError: Illegal invocation的处理方法
2015/03/13 Javascript
jQuery实现鼠标滑过点击事件音效试听
2015/08/31 Javascript
javascript多物体运动实现方法分析
2016/01/08 Javascript
JS修改地址栏参数实例代码
2016/06/14 Javascript
Vue.js每天必学之过渡与动画
2016/09/06 Javascript
微信小程序 http请求的session管理
2017/06/07 Javascript
详解vue父子组件间传值(props)
2017/06/29 Javascript
vue中关闭eslint的方法分析
2018/08/04 Javascript
实现Vue的markdown文档可以在线运行的方法示例
2018/12/11 Javascript
ES6 Object方法扩展的应用实例分析
2019/06/25 Javascript
vue+element表格导出为Excel文件
2019/09/26 Javascript
vue之a-table中实现清空选中的数据
2019/11/07 Javascript
详解Tensorflow数据读取有三种方式(next_batch)
2018/02/01 Python
详解Python中where()函数的用法
2018/03/27 Python
python3实现随机数
2018/06/25 Python
pygame实现俄罗斯方块游戏
2018/06/26 Python
浅谈python图片处理Image和skimage的区别
2019/08/04 Python
Django model.py表单设置默认值允许为空的操作
2020/05/19 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
2020/07/20 Python
使用Python操作MySQL的小技巧
2020/09/10 Python
python 爬虫请求模块requests详解
2020/12/04 Python
采购员岗位职责
2013/11/15 职场文书
六一儿童节活动策划方案
2014/01/27 职场文书
教师党员个人剖析材料
2014/09/29 职场文书
房屋租赁协议书(标准版)
2014/10/02 职场文书
安全知识竞赛主持词
2015/06/30 职场文书
Java输出Hello World完美过程解析
2021/06/13 Java/Android
Python如何用re模块实现简易tokenizer
2022/05/02 Python