当前位置:  编程技术>python

记录Django开发心得

    来源: 互联网  发布时间:2014-10-09

    本文导语:  概念层面 概括 Django是属于MVC的Web框架。 Model:负责与数据库打交道 View:负责获取或者增强从Models得到的数据 Controller:这是Django本身 Project与App的区别 Project:提供各种配置文件 App:功能的结合,包括Model和view,需要在根目录下...

概念层面

概括

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来获得真正的数据实体


    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 删除数据库中重复记录方法介绍及代码参考
  • 删除重复的记录,并保存第一条记录或保存最后一条记录
  • 将ResultSet结果集中的记录映射到Map对象中
  • 谁知道如何取小于一条记录的后十条记录
  • Jsp能不能直接调用记录集中的第一条记录阿?
  • 怎样直接定位到记录集的第n条记录呢?
  • 如何得到记录集的最后一笔记录
  • 数据库 iis7站长之家
  • 如何判断记录集一条记录也没有
  • 请问如何知道ResultSet中是否有记录和记录的总数,有什么方法吗?
  • rs能不能返回当前记录集的记录数
  • DNS域表中的rmx记录和rns记录指什么?
  • sql语句怎么写:将table中字段name='string1'的记录都改为name='string2'的记录
  • SQL语句去掉重复记录,获取重复记录
  • 续刚才的问题:返回的记录集不能rs.last?那我怎么去记录数呢?
  • 用PreparedStatement ps 在数据库中插入记录,但还未提交事务,此时再用Delete语句为什么删除不了用 ps刚才插入的记录,如何可以删除未这
  • linux服务器清空MySQL的history历史记录 删除mysql操作记录
  • 鼠标经过表格时,表格的记录颜色变化,如何每条记录定义onclick事件?
  • 如何用shell实现依文件1某个域到文件2查找满足条件记录并统计记录数后修改文件1
  • sql 查询记录数结果集某个区间内记录
  • mysql合并多条记录的单个字段去一条记录编辑


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3