您的位置:首页 > 编程语言 > Go语言

django bug 与陷阱

2015-09-15 10:28 369 查看
环境:ubuntu,python3.4

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

错误:  {key:line[0]forkey,lineinquery_info.items()iflen(line)>0}


list_info是django里面的QueryDict形式;

正常:  {key:line[0]forkey,lineindict(query_info).items()iflen(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-adminmakemessages-lzh_Hans,或者django-adminmakemessages-lzh_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


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: