Djang1.8+Python2.0迁移到Django2.0+Python3.6注意事项(转)
Djang1.8+Python2.0迁移到Django2.0+Python3.6注意事项
参考:https://blog.csdn.net/weixin_40475396/article/details/82971541
1. 编码
unicode,str,bytes在python2和python3中的叫法以及相互转换,具体为:
- 在Python3中的str对象在Python2中叫做unicode,但 bytes 对象在Python2中叫做str,如果想得到一个文本字符串,需要在字符串之前加上前缀 u 或者decode一下。
- 项目中的问题:① python2项目中字符串前加的u可以去掉了,因为在python3中就是一个文本字符串,也就是str对象,②获取阿里云签名的视图函数,涉及到编码问题,需要处理
- 编码问题参考:https://blog.csdn.net/yanghuan313/article/details/63262477
2. Model外键
- python3中Model中字段的外键必须设置on_delete,一般设置为
on_delete=models.DO_NOTHING
,代表删除与关联内容无关 - 同一张表多个字段引用相同的外键需要设置related_name
- Model外键问题参考:https://blog.csdn.net/lht_521/article/details/80605146
3. 判断是否是匿名用户
- django1.8.2是is_anonymous()
- django2.0是is_anonymous
4. Exception
- python2捕获异常是:
- try:
- Exception,e
- pass
- python3捕获异常是:
- try:
- Exception as e
- pass
- raise异常直接写字符串到异常中,例如:
- python2:
- raise SimpleAjaxException,'Return data should be follow the Simple Ajax Data Format'
- python3:
- raise SimpleAjaxException('Return data should be follow the Simple Ajax Data Format')
5. urls.py
- 静态文件收集:
django1.8:url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT})
django2.0:
- from django.views.static import serve
- url(r'^static/(?P<path>.*)$', serve, {'document_root': settings.STATIC_ROOT})
- 导入的文件时,同目录下,不能再直接import了,使用from . import **,
- 绝对导入相对导入参考:https://www.jianshu.com/p/5cc20b88bcf4
6. 中间件类继承
- django1.8.2继承的是object
- django2.0继承的是MiddlewareMixin,导入方法:
from django.utils.deprecation import MiddlewareMixin
7. 字典Dict
- Python 3.0 内的另一个重大改变是字典内dict.iterkeys(),dict.itervalues(),dict.iteritems()方法的删除。取而代之的是:dict.keys(),dict.values(),dict.items()
- dict.haskey()在Python2中存在,但是在Python3中更改为contains_
8. seetings设置
- Django1.8.2中间件配置名称是MIDDLEWARE_CLASSES,Django2.0是MIDDLEWARE
9. 缓存问题
- Python2和Python3对换错的哈希方式不同,上线的时候最好是把缓存清一下。
Bug:上线Python3,因为用户系统问题,上线失败,退回到Python2,此时因为有Python3的缓存,而版本是Python2的版本,导致报错。
解决方式:清除缓存。
10. 用户系统问题
如果两个项目共用一个用户系统,Django2.0项目的用户在登陆状态,如果此时Django1.8项目登陆此用户,再次刷新Django2.0项目的此用户,就需要重新登录。
此问题是因为Django1.8和2.0中间件对哈希的密码校验问题不同导致的request请求时,对象中的 session_id
消失,最终导致数据库中session被清除,目前能暂时解决,绕过这个问题,尚未找到根本原因。
解决办法:
1)在用户表的Model里面添加方法,相当于撤回到python2的验证机制,强制绕过这个登陆时校验密码hash之后跟缓存中的hash密码是否一致。
- def getattribute(self, item):
- if item == 'getsessionauthhash':
- raise AttributeError
- return super().getattribute_(item)
2) 回归到第一条,校验用户时,对密码hash,是通过一个固定的值加密码hash的,django1.8和2.0这个固定的值不同,导致密码hash之后跟缓存中的hash密码不一致,如果将不同版本的这个值设为相同的话,就ok了,其实settings.py里面就可以设置,只是不同版本有默认值,就没有在显示设置。如下:
PASSWORD_HASHERS = [ 'core.hasher.CustomPBKDF2PasswordHasher']
然后再相对于的路径创建文件重写类:比如上面就是在core文件夹下的hasher.py文件重写CustomPBKDF2PasswordHasher类:
- from django.contrib.auth.hashers import PBKDF2PasswordHasher
- class CustomPBKDF2PasswordHasher(PBKDF2PasswordHasher):
- iterations = 20000
11.附上更改过程中看到的不错的文章:
1)Python3.x新特性以及十大变化
2)Django从1.8升级到2.0注意事项
3)Django 外键ForeignKey中的on_delete
转载于:https://www.cnblogs.com/it-tsz/p/10268248.html
Djang1.8+Python2.0迁移到Django2.0+Python3.6注意事项(转)相关推荐
- django 快速实现文件上传(django2.0)
django2.0 快速实现文件上传 本操作环境: 虚拟环境:django2.0 python3.5(应该python3.6都可以使用) window10 1.创建项目与应用(项目和应用都是自己制定的 ...
- django2.0 快速实现注册
django 快速实现注册 本操作环境: 虚拟环境:django2.0 python3.5(应该python3.6都可以使用) window10 1.创建项目与应用(项目和应用都是自己制定的) 创建项 ...
- 【Python3.6+Django2.0+Xadmin2.0系列教程之一(入门篇-上)】环境搭建及项目创建
由于工作需要,接触了大半年时间的Django+xadmin框架,一直没空对这块对进行相关的梳理.最近在同事的怂恿下,就在这分享下笔者的学习及工作经验吧. 好了,话不多说,下面开始进入正题: 转载请注明 ...
- django2 mysql配置_Django:Python3.6.2+Django2.0配置MySQL 转载
Django默认使用的数据库是python自带的SQLlite3,但SQLlite并不适用于大型的项目,因此我将数据库换成了MySQL,下面介绍下Django如何配置数据库... 我使用的版本是:Py ...
- django mysql5.7_GitHub - qiubiteme/DjangoBloger: 一个Django2.0+mysql57,实现的响应式博客
项目背景介绍,这是一个简单的博客项目, 在windows10环境下开发 基于python3.6.5 Django2.0 mysql5.7开发 计划后续开发为一个前后分离,现在简单的部署使用 部署环境 ...
- Xadmin-Xadmin的安装与配置(Django2.0+python3.6)
最近在学习Django,先使用Xadmin框架,在网上寻找Django 2.0以上的安装操作,好多都是不可以的,几经波折终于成功,于是写下此篇文章献给同样受折磨的你. 本人环境 win10+Anaco ...
- vue+django2.0.2-rest-framework 生鲜项目(三)
vue+django2.0.2-rest-framework 生鲜项目 一.xadmin后台管理系统配置 不使用Django自带admin后台管理,使用xadmin后台管理,类似CRM项目中的king ...
- django2.0实现投票应用程序2
编写你的第一个 Django 应用,第 2 部分 现在接着教程的第1部分继续往后面讲.我们将建立数据库,创建您的第一个模型(models),并主要关注 Django 提供的自动生成的管理页面(admi ...
- python3.6 django教程_【Python3.6+Django2.0+Xadmin2.0系列教程一】环境搭建及项目创建
由于工作需要,接触了大半年时间的Django+xadmin框架,一直没空对这块对进行相关的梳理.最近在同事的怂恿下,就在这分享下笔者的学习及工作经验吧. 好了,话不多说,下面开始进入正题: 环境需求: ...
最新文章
- AI一分钟 | 贾跃亭这次真的没钱了,法拉第只够发到年底工资;自动驾驶风云:Uber竟被爆料收购窃取Waymo机密的公司
- 200 switching to ascii mode_王者荣耀:小伙200买V8号,146款皮肤还有1神秘道具,一封邮件哭了...
- 什么是缓存里的脏数据.
- 2019年清华自主招生部分试题
- 如何帮孩子成为最好的自己
- Android数据库hibernate框架
- 通过SpringAop、Filter对Request参数解密和对Response内容加密
- svm (opencv)几个主要函数
- oracle 中execute immediate 是什么意思?
- 《初级会计电算化应用教程(金蝶KIS专业版)》——导读
- spring学习8之JDBC的CRUD
- ThunderSoft Video to GIF Converter(电脑视频转gif软件)官方正式版V3.3.0 | 轻松将视频转换成GIF图片
- 虚拟机安装Windows11正式版
- 微信公众平台发红包接口
- SolidWorks 2014管道布线设计详细视频教程
- 计算机文档考试题目及答案,计算机word考试题及答案解析
- 计算机计算乘除法的原理
- 道德引擎——灾难来临,你够资格登上诺亚方舟?墨尔本大学《java面向对象》结辩作业
- 配置计算机能不能关机,win7电脑设置关机时间的详细步骤
- 高等代数 线性映射(第9章)4 约当标准型与相抵标准形