• 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

  • 相关阅读:
    〖教程〗Ladon提权MS16-135参数版(WIN7-2016)
    〖教程〗RDP会话劫持 Ladon无密码登陆管理员桌面会话
    Ladon for PowerShell远程加载教程
    〖教程〗NbtScan 139端口弱口令/Netbios密码爆破
    给你一个免费加入"小密圈"的机会
    活动目录(Active Directory,AD)的主要功能
    如何通过审计安全事件日志检测密码喷洒(Password Spraying)攻击
    mouseenter 和mouseover的区别
    如何获取可视区域宽高,获取元素到在文档中的位置
    闭包
  • 原文地址:https://www.cnblogs.com/Tommy-Yu/p/4220833.html
Copyright © 2020-2023  润新知