记录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 命令行参数sys.argv
Sep 06 Python
python sort、sorted高级排序技巧
Nov 21 Python
在Python中操作字符串之replace()方法的使用
May 19 Python
Python模拟用户登录验证
Sep 11 Python
Python整数对象实现原理详解
Jul 01 Python
Pandas的read_csv函数参数分析详解
Jul 02 Python
python爬取盘搜的有效链接实现代码
Jul 20 Python
django 扩展user用户字段inlines方式
Mar 30 Python
快速创建python 虚拟环境
Nov 28 Python
用Python实现Newton插值法
Apr 17 Python
Python函数式编程中itertools模块详解
Sep 15 Python
详解Python中__new__方法的作用
Mar 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
把从SQL中取出的数据转化成XMl格式
2006/10/09 PHP
php仿ZOL分页类代码
2008/10/02 PHP
php 无法载入mysql扩展
2010/03/12 PHP
PHP扩展开发入门教程
2015/02/26 PHP
php获取错误信息的方法
2015/07/17 PHP
php 调用ffmpeg获取视频信息的简单实现
2017/04/03 PHP
laravel 输出最后执行sql 附:whereIn的使用方法
2019/10/10 PHP
JS 容错处理代码, 屏蔽错误信息
2021/03/09 Javascript
番茄的表单验证类代码修改版
2008/07/18 Javascript
ExtJS扩展 垂直tabLayout实现代码
2009/06/21 Javascript
JS远程获取网页源代码实例
2013/09/05 Javascript
JavaScript的继承的封装介绍
2013/10/15 Javascript
兼容Firefox的Javascript XSLT 处理XML文件
2014/12/31 Javascript
bootstrapValidator.min.js表单验证插件
2017/02/09 Javascript
JS实现二叉查找树的建立以及一些遍历方法实现
2017/04/17 Javascript
jquery实现tab选项卡切换效果(悬停、下方横线动画位移)
2017/05/05 jQuery
vue实现全选、反选功能
2020/11/17 Javascript
用JS编写一个函数,返回数组中重复出现过的元素(实例)
2017/09/14 Javascript
Vue项目数据动态过滤实践及实现思路
2018/09/11 Javascript
微信小程序wx.request的简单封装
2019/11/13 Javascript
Vue使用Element实现增删改查+打包的步骤
2020/11/25 Vue.js
Python检测字符串中是否包含某字符集合中的字符
2015/05/21 Python
Python之用户输入的实例
2018/06/22 Python
利用python numpy+matplotlib绘制股票k线图的方法
2019/06/26 Python
Python数据类型之列表和元组的方法实例详解
2019/07/08 Python
python集合的创建、添加及删除操作示例
2019/10/08 Python
使用Matplotlib 绘制精美的数学图形例子
2019/12/13 Python
Python如何基于selenium实现自动登录博客园
2019/12/16 Python
CSS3实现文本垂直排列的方法
2018/07/10 HTML / CSS
大四自我鉴定
2014/02/08 职场文书
超市促销活动方案
2014/03/05 职场文书
运动会口号16字
2014/06/07 职场文书
音乐教师求职信
2014/06/28 职场文书
新教师培训心得体会
2014/09/02 职场文书
个人师德师风自我剖析材料
2014/09/29 职场文书
幼儿园新学期开学寄语
2015/05/27 职场文书