zoukankan      html  css  js  c++  java
  • django bug 与陷阱

    环境:ubuntu,python3.4

    1.QueryDict 陷阱 :以下语句语句是取每行的头元素,其中line应该是一个列表。问题是,line在实际运行中已经不是列表,而变成了列表中的头元素。

    错误:  {key:line[0] for key,line in query_info.items() if len(line)>0}

      list_info是django里面的QueryDict形式;

    正常:  {key:line[0] for key,line in dict(query_info).items() if len(line)>0}

    完全正常。

    原因:QueryDict 会将内容序列化(字符串化)

    2.Session 陷阱:django的session虽然类似字典,但是,如果你直接赋值字典给它会出现丢失数据的状况。原因:请参考 https://docs.djangoproject.com/en/1.8/topics/http/sessions/

    当你添加字典到session时候,初次添加会更新session,但是当后面修改字典里面内容时候,不会触发更新session,只更新字典本身,所以会出现字典中某个更新值丢失状况。

    解决方法:在settings中设置以下代码,这样在每次request中修改,都会更新session信息。

    SESSION_SAVE_EVERY_REQUEST=True

    3.django国际化:

     在国际化代码里面设置

    LANGUAGE_CODE = 'zh-hans' 

    或者
    LANGUAGE_CODE = 'zh-cn'
    LANGUAGE_这里面有个问题是,如果你写zh_cn是没有错的,但是如果写zh_hans的话,就会出现莫名的错误,跟踪发现,django将zh-hans指向zh_Hans文件夹,而对于zh-cn指向zh_hans文件夹。在这里折磨很久。
    另外,在django-admin makemessages -l zh_Hans,或者 django-admin makemessages -l zh_CN ,一定注意不能写成 zh-Hans,或者 zh-CN


    4.支付宝的notify异步通知处理:

      由于加入了csrf防护,支付宝在直接调用视图函数进入post处理的时候,由于没有csrf的信息,会被禁止访问,服务器反馈提示403错误。

      解决方法:csrf_exempt装饰器可以单独使得视图函数忽略csrf,而对单独视图启动防护的装饰器:csrf_protect

    
    

    5.django与js:

      django中的模板变量js也可以使用的,但是如果这个js是单独的文件,这时候就不能辨识模板变量了。使用模板变量要么将其放在template中的script里面,要么就在template中赋值一个js变量,让js文件可以获取这个js变量。

    
    

    6.django的session_cookie_name :session文件名在cookie中对应的key, 如果在多个服务中,配置相同的session_cookie_name,而且这个多个服务又使用相同的memcache,其实就是多个服务共享了session

    7.django的 blocktrans _na,这是一个坑,我要翻译status变量,这个怎么也不翻译,终于在stackflow中找到答案:blocktrans is for translating the text around a variable, but it won't translate the variable itself.;也就是说这个只翻译文字,不翻译变量。坑坑坑!!!不说谁知道.

    {% blocktrans with status=cdn_info.cdn_domain.status %}{{status}}{% endblocktrans %}

     8.template 里面,如果模板变量中包含 ,需要escape,一般自动escape了,但是如果模板变量在js中,需要过滤器,   escapejs

    "{{ var|escapejs }}"
     
  • 相关阅读:
    867-转置矩阵
    704-二分查找
    选择排序
    999-车的可用捕获量
    66-加一
    观察者模式(1)
    命令模式(3)-宏命令
    命令模式(2)-命令接口中的撤销方法
    接口测试
    移动端测试
  • 原文地址:https://www.cnblogs.com/yasmi/p/4809495.html
Copyright © 2011-2022 走看看