记录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中使用第三方库xlutils来追加写入Excel文件示例
Apr 05 Python
python字符串连接方法分析
Apr 12 Python
Python应用库大全总结
May 30 Python
Python实现的括号匹配判断功能示例
Aug 25 Python
Python基本socket通信控制操作示例
Jan 30 Python
在Pycharm中使用GitHub的方法步骤
Jun 13 Python
python开发之anaconda以及win7下安装gensim的方法
Jul 05 Python
Django 实现admin后台显示图片缩略图的例子
Jul 28 Python
浅谈Tensorflow 动态双向RNN的输出问题
Jan 20 Python
通过实例简单了解python yield使用方法
Aug 06 Python
python 爬虫请求模块requests详解
Dec 04 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
全国FM电台频率大全 - 13 福建省
2020/03/11 无线电
纯php生成随机密码
2015/10/30 PHP
thinkphp3.2框架中where条件查询用法总结
2019/08/13 PHP
Laravel基础-关于引入公共文件的两种方式
2019/10/18 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
2020/02/21 PHP
thinkphp5.1 框架导入/导出excel文件操作示例
2020/05/25 PHP
discuz论坛更换域名,详细文件修改步骤
2020/12/09 PHP
JAVASCRIPT 对象的创建与使用
2021/03/09 Javascript
js 通用javascript函数库整理
2011/08/14 Javascript
ASP.NET jQuery 实例1(在TextBox里面创建一个默认提示)
2012/01/13 Javascript
JavaScript返回上一页的三种方法及区别介绍
2015/07/04 Javascript
Highcharts入门之基本属性
2016/08/02 Javascript
js手机号4位显示空格,银行卡每4位显示空格效果
2017/03/23 Javascript
JavaScript实现经纬度转换成地址功能
2017/03/28 Javascript
详解RequireJS按需加载样式文件
2017/04/12 Javascript
laydate 显示结束时间不小于开始时间的实例
2017/08/11 Javascript
详解Vue.js项目API、Router配置拆分实践
2018/03/16 Javascript
使用Angular material主题定义自己的组件库的配色体系
2019/09/04 Javascript
ES6对象操作实例详解
2020/05/23 Javascript
js实现右键弹出自定义菜单
2020/09/08 Javascript
解决vue elementUI 使用el-select 时 change事件的触发问题
2020/11/17 Vue.js
[08:02]DOTA2牵红线 zhou神抱得美人归
2014/03/22 DOTA
[07:08]2014DOTA2西雅图国际邀请赛 小组赛7月11日TOPPLAY
2014/07/11 DOTA
[48:35]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 TNC vs Optic
2018/04/03 DOTA
python开发中range()函数用法实例分析
2015/11/12 Python
python3+selenium获取页面加载的所有静态资源文件链接操作
2020/05/04 Python
基于python计算并显示日间、星期客流高峰
2020/05/07 Python
Django --Xadmin 判断登录者身份实例
2020/07/03 Python
一文解决django 2.2与mysql兼容性问题
2020/07/15 Python
Python变量及数据类型用法原理汇总
2020/08/06 Python
python实现无边框进度条的实例代码
2020/12/30 Python
大学生收银员求职信分享
2014/01/02 职场文书
3.12植树节活动总结2014
2014/03/13 职场文书
党委班子对照检查材料
2014/08/19 职场文书
python 实现定时任务的四种方式
2021/04/01 Python
MySQL的表级锁,行级锁,排它锁和共享锁
2022/07/15 MySQL