记录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实现list反转实例汇总
Nov 11 Python
Python与Redis的连接教程
Apr 22 Python
Python中字典创建、遍历、添加等实用操作技巧合集
Jun 02 Python
Python实现网站注册验证码生成类
Jun 08 Python
Python实现的计算马氏距离算法示例
Apr 03 Python
使用Django连接Mysql数据库步骤
Jan 15 Python
Python实现通过解析域名获取ip地址的方法分析
May 17 Python
Django多数据库的实现过程详解
Aug 01 Python
Python 获取指定文件夹下的目录和文件的实现
Aug 30 Python
如何基于python实现不邻接植花
May 01 Python
matlab、python中矩阵的互相导入导出方式
Jun 01 Python
Windows安装Anaconda3的方法及使用过程详解
Jun 11 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 json_encode奇怪问题说明
2011/09/27 PHP
php下载文件的代码示例
2012/06/29 PHP
php实现的ping端口函数实例
2014/11/12 PHP
给PHP开发者的编程指南 第一部分降低复杂程度
2016/01/18 PHP
php字符集转换
2017/01/23 PHP
使用Git实现Laravel项目的自动化部署
2019/11/24 PHP
JS动态添加option和删除option(附实例代码)
2013/04/01 Javascript
Jquery对数组的操作技巧整理
2014/03/25 Javascript
setInterval计时器不准的问题解决方法
2014/05/08 Javascript
Firefox下无法正常显示年份的解决方法
2014/09/04 Javascript
JavaScript实现自动变换表格边框颜色
2015/05/08 Javascript
基于jQuery和CSS3制作数字时钟附源码下载(jquery篇)
2015/11/24 Javascript
使用Bootrap和Vue实现仿百度搜索功能
2017/10/26 Javascript
vue环境搭建简单教程
2017/11/07 Javascript
浅析node Async异步处理模块用例分析及常用方法介绍
2017/11/17 Javascript
关于js的三种使用方式(行内js、内部js、外部js)的程序代码
2018/05/05 Javascript
vue-mugen-scroll组件实现pc端滚动刷新
2019/08/16 Javascript
JS简易计算器实例讲解
2020/06/30 Javascript
Chrome插件开发系列一:弹窗终结者开发实战
2020/10/02 Javascript
[01:02:46]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[05:00]TI9战队采访 - Royal Never Give Up
2019/08/20 DOTA
Python中使用scapy模拟数据包实现arp攻击、dns放大攻击例子
2014/10/23 Python
详谈Python2.6和Python3.0中对除法操作的异同
2017/04/28 Python
python @property的用法及含义全面解析
2018/02/01 Python
Python socket模块实现的udp通信功能示例
2019/04/10 Python
python 读取数据库并绘图的实例
2019/12/03 Python
简单了解Java Netty Reactor三种线程模型
2020/04/26 Python
为什么说python适合写爬虫
2020/06/11 Python
pycharm 使用anaconda为默认环境的操作
2021/02/05 Python
StubHub新西兰:购买和出售你的门票
2019/04/22 全球购物
Engel & Bengel官网:婴儿推车、儿童房家具和婴儿设备
2019/12/28 全球购物
俄罗斯购买自行车网站:Vamvelosiped
2021/01/29 全球购物
中专自我鉴定范文
2013/10/16 职场文书
青年文明号事迹材料
2014/01/18 职场文书
个人股份合作协议书
2014/10/24 职场文书
迎新晚会主持词开场白
2015/05/28 职场文书