记录Django开发心得

 更新时间:2014年07月16日 10:09:56   投稿:hebedich  
学习使用Django也有一个月了,也该整理整理了,给自己,也给大家分享一下哈(再次鄙视国内的IT技术文档/问答环境,抄抄抄,Cao你妹啊,你们TM自己写点不行啊!!!!)。当然我刚学Django/Python,也欢迎指点错误的地方。

概念层面

概括

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模块shutil函数应用示例详解教程

    python模块shutil函数应用示例详解教程

    这篇文章主要为大家介绍了python模块中shutil函数的应用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2021-10-10
  • python selenium在打开的浏览器中动态调整User Agent

    python selenium在打开的浏览器中动态调整User Agent

    这篇文章主要介绍的是python selenium在打开的浏览器中动态调整User Agent,具体相关资料请需要的朋友参考下面文章详细内容,希望对你有所帮助
    2022-02-02
  • Python3离线安装Requests模块问题

    Python3离线安装Requests模块问题

    这篇文章主要介绍了Python3离线安装Requests模块问题,本文实例代码给大家介绍的非常详细,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • python3使用PyMysql连接mysql数据库实例

    python3使用PyMysql连接mysql数据库实例

    本篇文章主要介绍了python3使用PyMysql连接mysql数据库实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • python bmp转换为jpg 并删除原图的方法

    python bmp转换为jpg 并删除原图的方法

    今天小编就为大家分享一篇python bmp转换为jpg 并删除原图的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Pandas 同元素多列去重的实例

    Pandas 同元素多列去重的实例

    今天小编就为大家分享一篇Pandas 同元素多列去重的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • python opencv实现gif图片分解的示例代码

    python opencv实现gif图片分解的示例代码

    这篇文章主要介绍了python opencv实现gif图片分解的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • python第三方库pygame的使用详解

    python第三方库pygame的使用详解

    这篇文章主要介绍了python第三方库pygame的使用,pygame一般用来做游戏,在这需要注意在使用pygame提供的功能之前,需要调用init方法,本文给大家介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • linecache模块加载和缓存文件内容详解

    linecache模块加载和缓存文件内容详解

    这篇文章主要介绍了linecache模块加载和缓存文件内容详解,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • python manim实现排序算法动画示例

    python manim实现排序算法动画示例

    这篇文章主要为大家介绍了python manim实现排序算法动画示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08

最新评论