zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    AtCoder Grand Contest 015 题解
    AtCoder Grand Contest 014 题解
    AtCoder Grand Contest 013 题解
    AtCoder Grand Contest 012 题解
    AtCoder Grand Contest 011 题解
    AtCoder Grand Contest 010 题解
    AtCoder Grand Contest 009 题解
    NOIP2017 Day2 题解
    博客园主题备份
    多项式全家桶
  • 原文地址:https://www.cnblogs.com/Tommy-Yu/p/4220833.html
Copyright © 2011-2022 走看看