Django开发中问题和报错集合

本文总结了Django项目开发过程中常见的编码错误、数据库连接问题、权限配置、URL反向解析等错误及其解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录django项目开发过程中的遇到的问题,导致原因和已经奏效的解决方法

常见报错UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xbc in position 852: invalid start byte

这个问题在一些电脑上做django开发时经常出现

要么是py文件运行是就报这个类似的无法解码的问题,要么就是运行服务器后台添加数据保存时报这个错误

现总结了以下一些可能的原因和解决方法:

可能的原因:

  • 1.GBK编码的文件(不一定是py文件)中输入了的汉字与django运行时的解码方式utf-8不一致;
  • 2.在文件开头加上# -*- coding:utf-8 -*-,这个方法只对单个文件有效,而且加过一次后再去掉也仍然奏效
  • 3.电脑命名出现了汉字(在设置中修改成英文即可,这是能搜索到的普遍的解答)

解决方法:

  • 要么删除汉字,要么修改转换一下编码方式将原文件覆盖→用pycharm右下角的编码转换功能修改
上述编码错误还可能导致搜索功能的作用失效

使用python的全文检索框架帮助搜词时无法匹配到目标对象(你传入的page对象到模板中始终为空),这可能是因为分词txt文件出现了上述的编码冲突:

  • 比如:templates/indexes/app1目录下的Model_text.txt的出现了汉字(注释也算)与django用的utf-8冲突在这里插入图片描述

  • 解决方法就是前面所说的修改编码方式为utf-8并重新加载文件

终端执行命令(如迁移python manage.py makemigrations)时报错:RuntimeError: Model class apps.xxx.xxx.XXXdoesn’t declare an explicit app_label and isn’t in an application in INSTALLED_APPS.

可能的原因:

  • 检查models里面的外键关联对象名称是否有错,关联的对象名称格式应该是【app名.类名】(中间没有models.py文件名)
    在这里插入图片描述

解决方法:

  • 如上原因所示,关联的对象名称格式应该是【app名.类名】
执行迁移命令python manage.py makemigrations时报错
1.django.db.utils.OperationalError: (2003, “Can’t connect to MySQL server on ‘1xx.xx.xx.xxx’ ([WinError 10061] 由于目标计算机积极拒绝,无法连接。)”)

可能的原因:

  • 检查服务器上MySQL服务程序是否启动,(用PS指令检查程序)启动(linux):service mysql start
  • 检查MySQL是否有授予访问权利给当前发起连接的主机IP,查看授权情况:show grants for user@1xx.xx.xx.xx(user是你在django配置中设置的数据库登录账号),不想查看,可直接执行授权操作

解决方法:

  • 授权:GRANT ALL PRIVILEGES ON `test`.* TO 'user'@'1xx.1xx.xx.xx' IDENTIFIED BY 'password' WITH GRANT OPTION;其中test是名为test数据库(可理解为子库?),不输入’test’则是授权所有库,后面的user、ip和password要根据实际情况输入,示例:在这里插入图片描述在这里插入图片描述
    如果出现报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements在这里插入图片描述
    请往下查看解决方法:

数据库指定IP主机授权时报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

原因:

  • 原因是密码太短,密码安全策略要求过高

解决方法:

  • 查看当前的密码安全策略show variables like "%validate%";在这里插入图片描述

  • 修改密码安全策略,修改密码长度为4位:set global validate_password_length=4;

  • 修改安全等级为low(0):set global validate_password_policy=0;在这里插入图片描述

  • 再次查看密码安全策略:show variables like "%validate%";
    在这里插入图片描述

  • 再次对指定的IP主机授权:GRANT ALL PRIVILEGES ON `test`.* TO 'user'@'1xx.1xx.xx.xx' IDENTIFIED BY 'password' WITH GRANT OPTION;返回OK:在这里插入图片描述

djangoValueError: Unable to configure handler ‘mail_admins’

可能的原因:

  • 可能是刚刚在源码因为复制(或修改)了一些东西(复制粘贴经常会报错,可能跟编码有关)

解决方法:

  • 改成手写,或者不修改源码,重启服务器python manage.py runserver
Reverse for ‘index’ with arguments ‘(3,)’ not found. 1 pattern(s) tried: [’$’]

可能的原因:

  • 反向解析的名字错误(不一定是拼写错误,可能是你指向的url的别名错误)

解决方法:

  • 根据报错的路由寻找模板中错误的反向解析
    在这里插入图片描述
SyntaxError at/xx/xx;invalid syntax Syntax(redis.py, line 815)

可能的原因:

  • redis源码中有关键字与python的冲突

解决方法:

  • 根据提示定位错误处,进入源码将所有该关键字替换为一个不冲突的名字
configparser.NoOptionError: No option ‘connect_timeout’ in section: ‘config

可能的原因:

  • 给出的配置文件的路径错误,使用了相对路径在这里插入图片描述
    解决方法:
  • 改成绝对路径
如何解决from user.models import User类似的红色下划波浪线报错:

将apps package标记为资源根目录,在apps目录内导入其他py文件时会从apps下开始寻找
在这里插入图片描述

ImportError: cannot import name ‘six’ from ‘django.utils’

原因:

  • django3six单独作为了一个包,而不是存在django.utils目录下

解决方法:

  • 方法一:直接进入虚拟环境site-packages中将安装的six.py复制到同目录下django目录下的utils目录中在这里插入图片描述

  • 方法二:将from django.utils import six的语句全都改成import six

解决上面问题之后可能会出现错误:**ImportError: cannot import name ‘python_2_unicode_compatible’**原因同上
解决方法:

  • 根据提示找到出错的模块,将出错的导入低吗改为from six import python_2_unicode_compatible(site-pakage下的six没有删除或移动到其他位置)或from django.utils.six import python_2_unicode_compatible(six.py移动到了django.utils目录下)
    在这里插入图片描述进入文件/home/image/Desktop/pyenv/fresh/lib/python3.6/site-packages/haystack/inputs.py修改在这里插入图片描述在这里插入图片描述
数据迁移常见报错之 django.db.utils.InternalError: (1060, “Duplicate column name ‘addr_id’”)

问题截图(原因):
在这里插入图片描述

  • 迁移的外键名与数据库中的列重复,迁移过的外键更改后又执行迁移,有时候无法避免,因为修改了一些数据,其报错效果类似下图新建一个外键字段一样:在这里插入图片描述

解决方法:

  • 从数据库删除报错的那一栏,使用navicat找到对应表,右键进入设计表模式,找到外键执行删除 (注意栏位【删除时】要改成级联CASCADE),on_delete=CASCADE代表删除主表时,关联的外键也会删除在这里插入图片描述
    然后记得删除与之相关联的不需要的栏位在这里插入图片描述
InternalError at /(1054, “Unknown column ‘banner_list.foreign_spu_id’ in ‘field list’”)

可能的原因

  • 增加了新的外键,但数据库表中没有这个外键栏
    解决方法:
  • 从数据库手动增加这个外键在这里插入图片描述
InternalError at /xxx/xxx/xxx(1364, “Field ‘foreign_spu_id’ doesn’t have a default value”)

在这里插入图片描述

原因

  • 就是外键缺一个默认值(不知为什么外键需要一个默认值,而且也并没有强制要设定这个参数)
    解决方法:
  • 想一个默认值,添加默认值参数(default=‘xxx’),或者给外键设置参数可以为空(null=True)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值