Djang1.8+Python2.0迁移到Django2.0+Python3.6注意事项

参考:https://blog.csdn.net/weixin_40475396/article/details/82971541

1. 编码

unicode,str,bytes在python2和python3中的叫法以及相互转换,具体为:

  1. 在Python3中的str对象在Python2中叫做unicode,但 bytes 对象在Python2中叫做str,如果想得到一个文本字符串,需要在字符串之前加上前缀 u 或者decode一下。
  2. 项目中的问题:① python2项目中字符串前加的u可以去掉了,因为在python3中就是一个文本字符串,也就是str对象,②获取阿里云签名的视图函数,涉及到编码问题,需要处理
  3. 编码问题参考:https://blog.csdn.net/yanghuan313/article/details/63262477

2. Model外键

  1. python3中Model中字段的外键必须设置on_delete,一般设置为on_delete=models.DO_NOTHING,代表删除与关联内容无关
  2. 同一张表多个字段引用相同的外键需要设置related_name
  3. Model外键问题参考:https://blog.csdn.net/lht_521/article/details/80605146

3. 判断是否是匿名用户

  1. django1.8.2是is_anonymous()
  2. django2.0是is_anonymous

4. Exception

    1. python2捕获异常是:
    2. try:
    3. Exception,e
    4. pass
    5. python3捕获异常是:
    6. try:
    7. Exception as e
    8. pass
  1. raise异常直接写字符串到异常中,例如:
    1. python2:
    2. raise SimpleAjaxException,'Return data should be follow the Simple Ajax Data Format' 
    3. python3:
    4. raise SimpleAjaxException('Return data should be follow the Simple Ajax Data Format')

5. urls.py

  1. 静态文件收集:
    django1.8:

    url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}) 

    django2.0:

    1. from django.views.static import serve 
    2. url(r'^static/(?P<path>.*)$', serve, {'document_root': settings.STATIC_ROOT})
  2. 导入的文件时,同目录下,不能再直接import了,使用from . import **,
  3. 绝对导入相对导入参考:https://www.jianshu.com/p/5cc20b88bcf4

6. 中间件类继承

  1. django1.8.2继承的是object
  2. django2.0继承的是MiddlewareMixin,导入方法:
    from django.utils.deprecation import MiddlewareMixin

7. 字典Dict

  1. Python 3.0 内的另一个重大改变是字典内dict.iterkeys(),dict.itervalues(),dict.iteritems()方法的删除。取而代之的是:dict.keys(),dict.values(),dict.items()
  2. dict.haskey()在Python2中存在,但是在Python3中更改为contains_

8. seetings设置

  1. Django1.8.2中间件配置名称是MIDDLEWARE_CLASSES,Django2.0是MIDDLEWARE

9. 缓存问题

  1. 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密码是否一致。

  1. def getattribute(self, item):
  2. if item == 'getsessionauthhash':
  3. raise AttributeError
  4. 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类:

  1. from django.contrib.auth.hashers import PBKDF2PasswordHasher
  2. class CustomPBKDF2PasswordHasher(PBKDF2PasswordHasher):
  3. 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注意事项(转)相关推荐

  1. django 快速实现文件上传(django2.0)

    django2.0 快速实现文件上传 本操作环境: 虚拟环境:django2.0 python3.5(应该python3.6都可以使用) window10 1.创建项目与应用(项目和应用都是自己制定的 ...

  2. django2.0 快速实现注册

    django 快速实现注册 本操作环境: 虚拟环境:django2.0 python3.5(应该python3.6都可以使用) window10 1.创建项目与应用(项目和应用都是自己制定的) 创建项 ...

  3. 【Python3.6+Django2.0+Xadmin2.0系列教程之一(入门篇-上)】环境搭建及项目创建

    由于工作需要,接触了大半年时间的Django+xadmin框架,一直没空对这块对进行相关的梳理.最近在同事的怂恿下,就在这分享下笔者的学习及工作经验吧. 好了,话不多说,下面开始进入正题: 转载请注明 ...

  4. django2 mysql配置_Django:Python3.6.2+Django2.0配置MySQL 转载

    Django默认使用的数据库是python自带的SQLlite3,但SQLlite并不适用于大型的项目,因此我将数据库换成了MySQL,下面介绍下Django如何配置数据库... 我使用的版本是:Py ...

  5. django mysql5.7_GitHub - qiubiteme/DjangoBloger: 一个Django2.0+mysql57,实现的响应式博客

    项目背景介绍,这是一个简单的博客项目, 在windows10环境下开发 基于python3.6.5 Django2.0 mysql5.7开发 计划后续开发为一个前后分离,现在简单的部署使用 部署环境 ...

  6. Xadmin-Xadmin的安装与配置(Django2.0+python3.6)

    最近在学习Django,先使用Xadmin框架,在网上寻找Django 2.0以上的安装操作,好多都是不可以的,几经波折终于成功,于是写下此篇文章献给同样受折磨的你. 本人环境 win10+Anaco ...

  7. vue+django2.0.2-rest-framework 生鲜项目(三)

    vue+django2.0.2-rest-framework 生鲜项目 一.xadmin后台管理系统配置 不使用Django自带admin后台管理,使用xadmin后台管理,类似CRM项目中的king ...

  8. django2.0实现投票应用程序2

    编写你的第一个 Django 应用,第 2 部分 现在接着教程的第1部分继续往后面讲.我们将建立数据库,创建您的第一个模型(models),并主要关注 Django 提供的自动生成的管理页面(admi ...

  9. python3.6 django教程_【Python3.6+Django2.0+Xadmin2.0系列教程一】环境搭建及项目创建

    由于工作需要,接触了大半年时间的Django+xadmin框架,一直没空对这块对进行相关的梳理.最近在同事的怂恿下,就在这分享下笔者的学习及工作经验吧. 好了,话不多说,下面开始进入正题: 环境需求: ...

最新文章

  1. AI一分钟 | 贾跃亭这次真的没钱了,法拉第只够发到年底工资;自动驾驶风云:Uber竟被爆料收购窃取Waymo机密的公司
  2. 200 switching to ascii mode_王者荣耀:小伙200买V8号,146款皮肤还有1神秘道具,一封邮件哭了...
  3. 什么是缓存里的脏数据.
  4. 2019年清华自主招生部分试题
  5. 如何帮孩子成为最好的自己
  6. Android数据库hibernate框架
  7. 通过SpringAop、Filter对Request参数解密和对Response内容加密
  8. svm (opencv)几个主要函数
  9. oracle 中execute immediate 是什么意思?
  10. 《初级会计电算化应用教程(金蝶KIS专业版)》——导读
  11. spring学习8之JDBC的CRUD
  12. ThunderSoft Video to GIF Converter(电脑视频转gif软件)官方正式版V3.3.0 | 轻松将视频转换成GIF图片
  13. 虚拟机安装Windows11正式版
  14. 微信公众平台发红包接口
  15. SolidWorks 2014管道布线设计详细视频教程
  16. 计算机文档考试题目及答案,计算机word考试题及答案解析
  17. 计算机计算乘除法的原理
  18. 道德引擎——灾难来临,你够资格登上诺亚方舟?墨尔本大学《java面向对象》结辩作业
  19. 配置计算机能不能关机,win7电脑设置关机时间的详细步骤
  20. 高等代数 线性映射(第9章)4 约当标准型与相抵标准形

热门文章

  1. idea中如何打开RunDashboard窗口,微服务最实用设置
  2. 使用 alpine 打包镜像注意事项
  3. 不要为了面子伤了自己
  4. visual2017中给C#项目添加配置文件
  5. Distilling the Knowledge in a Neural Network 论文笔记蒸馏
  6. ADAS处理器集成功能安全单片机MCU
  7. 大数据调度平台Airflow(五):Airflow使用
  8. 2021年大数据常用语言Scala(三十二):scala高级用法 样例类
  9. 浅谈MySQL中utf8和utf8mb4的区别
  10. Android RadioButton 修改选择框