记录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字符串对其居中显示的方法
Jul 11 Python
python ansible服务及剧本编写
Dec 29 Python
Python将多份excel表格整理成一份表格
Jan 03 Python
Python 函数基础知识汇总
Mar 09 Python
Python2.7.10以上pip更新及其他包的安装教程
Jun 12 Python
Python创建一个空的dataframe,并循环赋值的方法
Nov 08 Python
Django框架会话技术实例分析【Cookie与Session】
May 24 Python
Django的性能优化实现解析
Jul 30 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
May 11 Python
深入了解python列表(LIST)
Jun 08 Python
Python torch.flatten()函数案例详解
Aug 30 Python
python标准库ElementTree处理xml
May 20 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 分页函数multi() discuz
2009/06/21 PHP
php去掉字符串的最后一个字符附substr()的用法
2011/03/23 PHP
PHP函数getenv简介和使用实例
2014/05/12 PHP
Thinkphp中import的几个用法详细介绍
2014/07/02 PHP
PHP生成静态HTML页面最简单方法示例
2015/04/09 PHP
PHP实现生成唯一会员卡号
2015/08/24 PHP
Laravel如何使用Redis共享Session
2018/02/23 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
不错的asp中显示新闻的功能
2006/10/13 Javascript
JQuery AJAX提交中文乱码的解决方案
2010/07/02 Javascript
asp.net+js实现金额格式化
2015/02/27 Javascript
javascript获取系统当前时间的方法
2015/11/19 Javascript
jQuery实现侧浮窗与中浮窗切换效果的方法
2016/09/05 Javascript
Bootstrap媒体对象学习使用
2017/03/07 Javascript
js从输入框读取内容,比较两个数字的大小方法
2017/03/13 Javascript
微信小程序之滚动视图容器的实现方法
2017/09/26 Javascript
Vue.set()实现数据动态响应的方法
2018/02/07 Javascript
利用adb shell和node.js实现抖音自动抢红包功能(推荐)
2018/02/22 Javascript
js中数组常用方法总结(推荐)
2019/04/09 Javascript
Postman环境变量全局变量使用方法详解
2020/08/13 Javascript
vue Treeselect 树形下拉框:获取选中节点的ids和lables操作
2020/08/15 Javascript
[02:23]2018DOTA2亚洲邀请赛趣味视频——反应测试
2018/04/04 DOTA
python实现最长公共子序列
2018/05/22 Python
Python实现的序列化和反序列化二叉树算法示例
2019/03/02 Python
python简单鼠标自动点击某区域的实例
2019/06/25 Python
python高斯分布概率密度函数的使用详解
2019/07/10 Python
提升python处理速度原理及方法实例
2019/12/25 Python
用python爬取历史天气数据的方法示例
2019/12/30 Python
Django 自定义404 500等错误页面的实现
2020/03/08 Python
下面关于"联合"的题目的输出是什么
2013/08/06 面试题
毕业生文员求职信
2013/11/03 职场文书
服装厂厂长职责
2013/12/16 职场文书
建筑专业自荐信范文
2014/01/05 职场文书
2014年社区党建工作总结
2014/11/11 职场文书
手机销售员岗位职责
2015/04/11 职场文书
用JS创建一个录屏功能
2021/11/11 Javascript