django bug 与陷阱
2015-09-15 10:28
369 查看
环境:ubuntu,python3.4
1.QueryDict陷阱:以下语句语句是取每行的头元素,其中line应该是一个列表。问题是,line在实际运行中已经不是列表,而变成了列表中的头元素。
list_info是django里面的QueryDict形式;
完全正常。
原因:QueryDict会将内容序列化(字符串化)
2.Session陷阱:django的session虽然类似字典,但是,如果你直接赋值字典给它会出现丢失数据的状况。原因:请参考https://docs.djangoproject.com/en/1.8/topics/http/sessions/
当你添加字典到session时候,初次添加会更新session,但是当后面修改字典里面内容时候,不会触发更新session,只更新字典本身,所以会出现字典中某个更新值丢失状况。
解决方法:在settings中设置以下代码,这样在每次request中修改,都会更新session信息。
3.django国际化:
在国际化代码里面设置
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
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虽然类似字典,但是,如果你直接赋值字典给它会出现丢失数据的状况。原因:请参考
当你添加字典到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
相关文章推荐
- 基于Go实现的分布式MQ
- GOF23设计模式之 工厂模式
- Django makemessages errors Unknown encoding “utf8”
- 【一些事晚报】滴滴出行新LOGO既山寨又失败
- Django 1.6 最佳实践: 如何正确进行 Unit Tests
- uva 11383 Golden Tiger Claw 二分图完美匹配
- Understand Machine Learning Algorithms By Implementing Them From Scratch (and tactics to get around
- Go语言中不同类型切片之间的相互转换
- Google指令-----Google搜索实践
- 【英语】Bingo口语笔记(82) - go系列
- 【英语】Bingo口语笔记(81) - wear系列
- STL algorithm算法min,min_element(35)
- Algorithms—201.Bitwise AND of Numbers Range
- Django 环境搭建
- sicily 1424. 奖金
- Django URL传递参数的方法总结
- HibernateTemplate、HibernateDaoSupport两种方法实现增删改查Good(转)
- 10大Go语言开源项目推荐
- Go语言的传参和传引用[转]
- Go语言的传参和传引用[转]