django 技巧锦集
1. 如何将model对象转化成一个dict,这在restful api的设计上会有用。
答案:使用django.forms.models的model_to_dict方法,demo如下:
from django.forms.models import model_to_dict as m2d
from django.contrib.auth.models import User
m = User.objects.all()[0]#model object
d = m2d(m)#dict
注意,model_to_dict会自动忽略editable属性为False的字段(包括auto_now_add属性为True的DatetimeField)
2. 如何让model在保存时只更新部分数据而不是全部数据?
有两种方法:
1) 基于queryset的update操作。
2) save(update_fields=[]) , 即通过save的update_field参数来制定只是update哪些字段,save默认update所有字段,包括editable为False的字段!
3. restful api设计时,如何在将错误信息(json格式)和错误码(比如:500)一起返回?
data = simplejson.dumps({'code':1001,'message':'错误信息','description':'详细描述'})
return HttpResponse(data, content_type='application/json', status=500)
HttpResponse的完整__init__函数如下(参考这里):
HttpResponse.__init__(content='', content_type=None, status=200, reason = None)
推荐面向对象的设计。参考这里。
4. django如何与mongodb集成?
在做cms时,选择mongodb是一个非常明智的选择。然后如何搭配django和mongodb呢?
方案1: 利用MongoEngine之类的orm-like layer, 提供与Django Model(ORM)非常类似的体验,可以快速上手。
- 提供了和 Django 原生 ORM 几乎一样的一切,功能已经相当强大;
- 用起来比 Django 原生 ORM 更简洁更优雅;
- MongoEngine 和 Django “契合度”很高,Session,User 模块几乎可以直接平移过来,但MongoEngine 本身不依赖 Django,可以用在其他框架上;
- 本身很轻巧,文档很丰富,所以文档提供不了的细节,可以通过直接读代码来解决。
- 当然缺点也是很明显的,最不能习惯的就是 admin 没了……
方案2:通过django-nonrel实现,这个是GAE的django应用的默认实现方案。缺点据说如下(尚未验证):
- mongodb类NoSQL天然没有join操作,所以在django-nonrel中使用mongodb时没有多表继承功能,只能从abstract类继承
- 没有join的操作也意味着很多atomic的SQL查询需要转换成非atomic的nosql查询
- 很多原ORM的特性在django-nonrel中使用会抛出NotImplemented的异常。
方案3:直接使用PyMongo,缺点是自己要写CRUD语句。
方案4:以上方案的组合,比如1+3。mongoEngine据说查询效率有点拖后腿(待验证), 这个短板可以使用PyMongo来弥补。
参考:http://www.cnblogs.com/holbrook/archive/2012/03/11/2390715.html, http://www.zhihu.com/question/19818326
django 技巧锦集的更多相关文章
- linux操作小技巧锦集
0.常用Linux命令 查看端口被占用情况: 1.netstat -tunlp|grep 端口号 2.lsof -i:端口号 tar 压缩文件命令: -c:建立一个压缩文件的参数指令(create 的 ...
- C++ 编程技巧锦集(一)
C++刷题精髓在STL编程,还有一些函数.下面我就总结一下本人在刷题过程中,每逢遇见总要百度的内容………………(大概率因为本人刷题太少了) 1. map map<string, int> ...
- Docker实用debug调试技巧锦集
阅读约 20 分钟 『重用』容器名 但我们在编写/调试Dockerfile的时候我们经常会重复之前的command,比如这种docker run --name jstorm-zookeeper zoo ...
- iOS--碎片知识锦集
知识锦集day01 1.UIView的两个方法: sizeThatFits和 sizeToFit 官方文档上说: - (CGSize)sizeThatFits:(CGSize)size; // ...
- Android中的对话框AlertDialog使用技巧合集-转载
Android中的对话框AlertDialog使用技巧合集 文章来自:http://blog.csdn.net/blue6626/article/details/6641105 今天我用自 ...
- CMD命令锦集
虽然随着计算机产业的发展,Windows 操作系统的应用越来越广泛,DOS 面临着被淘汰的命运,但是因为它运行安全.稳定,有的用户还在使用,所以一般Windows 的各种版本都与其兼容,用户可以在Wi ...
- ubuntu16.04安装cuda8.0试错锦集
ubuntu16.04安装cuda8.0试错锦集 参考文献: [http://www.jianshu.com/p/35c7fde85968] [http://blog.csdn.net/sinat_1 ...
- C#笔试题面试题锦集(全)总20篇
前些时候找过一次工作,收集了很多不错的笔试题目.共享一下:) C#笔试题面试题锦集(20) 微软应试题目 (2010-01-15 21:32) C#笔试题面试题锦集(19) 雅虎C#题目 (2010- ...
- C/C++中一些不太注意到的小知识点--[锦集]
C/C++中一些不太注意到的小知识点--[锦集] C/C++小知识点--[锦集] "="和"<=" 的优先级 1.( (file_got_len = re ...
随机推荐
- JQM弹出对话框
<div data-role="page" id="pageone"> <div data-role="header"&g ...
- DELL服务器引导光盘图片及下载链接
DELL服务器引导光盘图片及下载链接 所有的下载地址均是ftp开头的,下载时,请 拷贝下载地址,然后放到浏览器的地址栏进行下载! 各个下载地址汇总: http://search.dell.com/re ...
- text-indent:2em详解
text-indent:2em; 解释一下:text的意思是文本,indent在计算机英语中意思是缩进,至于后面的2em意思就是2个相对单位: em又是什么单位? em这个单位的意思就是文字的高度,1 ...
- Yii2框架与MongoDB拓展、Redis拓展的安装流程
@author 周煦辰 2016-03-21 这段时间新上了一个项目,使用的是Yii2框架.这里记录一下Yii2框架.Yii2-Mongo拓展.Yii2-Redis拓展等的安装流程.因为使用的系统是W ...
- border边框的宽度/样式/颜色 全部值
border 用emmet写border的时候, 缩写是:bd. 不是b, 也不是bdr: b会扩展成bottom, bdr 会扩展成 border-right, border的宽度: 1px 基本上 ...
- bestcoder Round #7 前三题题解
BestCoder Round #7 Start Time : 2014-08-31 19:00:00 End Time : 2014-08-31 21:00:00Contest Type : ...
- 30秒搭建Github Page
如果中国每个程序员都写博客,那么中国IT届的春天就来了 原文转自我的前端博客,链接:http://www.hacke2.cn/create-github-page/ 有同学问我的网站是怎么创建的,其实 ...
- RTX二次开发(二)(基于ASP.NET)
上一篇,我们讲到我开发环境的配置,还没配置好开发环境或再看一遍开发环境配置?接下来,我们开始coding...... 在coding之前,我们先添加引用. 我们在SDK的安装目录中引用这个文件. 引用 ...
- js 判断鼠标滚轮方向
最近因为公司项目的要求,需要做页面的全屏滚动切换效果. 页面的切换,需要脚本监听鼠标滑轮的滚动事件,来判断页面是向上切换or向下切换. 这里的脚本很简单,我就直接贴出来吧. $('html').on( ...
- 【C语言入门教程】5.1 函数说明 与 返回值
C 语言是结构化语言,它的主要结构成分是函数.函数被作为一种构件,用以完成程序中的某个具体功能.函数允许一个程序的各个任务被分别定义和编码,使程序模块化.本章介绍 C 语言函数的设计,如何用函数分解程 ...