Python Django开发 异常及其解决办法(一)
文章目录
- 1.ValueError: The view *** didn't return an HttpResponse object. It returned None instead
- 2.NoReverseMatch: Reverse for 'xxx' not found . 'xxx' is not a valid view function or pattern
- 3.python manage.py migrate,提示No migrations to apply
- 4.Django配置MySQL数据库时django.db.utils.OperationalError
- 5.Django makemigrations报错Field specifies on_delete=SET_NULL, but cannot be null
- 6.Django xadmin数据迁移ImportError
- 7.Django xadmin数据迁移__init__() takes 1 positional argument but 6 were given
- 8.Django xadmin数据迁移ImportError
- 9.Django xadmin数据迁移AttributeError: 'Settings' object has no attribute 'MIDDLEWARE_CLASSES'
- 10.Django xadmin数据迁移ModuleNotFoundError
1.ValueError: The view *** didn’t return an HttpResponse object. It returned None instead
该错误表明views.py中没有return一个返回值给前端。
解决办法:检查 return HttpResponse()
是否错位或者是否缺失。
2.NoReverseMatch: Reverse for ‘xxx’ not found . ‘xxx’ is not a valid view function or pattern
在templates里html文件模板用{% url ‘xxx’%}解析时没有跟app_name,具体如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>pagedetail</title>
</head>
<body>
<div>
<a href="{% url 'index' %}"> home </a>
</div>
</body>
</html>
解决办法:
更改HTML文件中url标签部分:
<a href="{% url 'test1_app:index' %}"> home </a>
3.python manage.py migrate,提示No migrations to apply
造成多次应用migrations失败的原因是,当前model是修改过的,原来的migrations已经被删除,但是,重新生成的migrations使用递增整数记名,所以,在django_migrations表中0001,0002等前面几个数字的文件都已被记录,在Django看来,被记录了就相当于已应用,所以,会出现刚开始的No migrations to apply。
解决方案:
python manage.py dbshell
进到数据库中;
执行delete from django_migrations where app='your_appname'
;
python manage.py makemigrations
(若migrations文件未删除,可不执行这一步);
python manage.py migrate
即可成功。
4.Django配置MySQL数据库时django.db.utils.OperationalError
Django默认配置的数据库为sqlite,为稳健性数据库,一般需要改为MySQL等数据库,settings.py需要修改如下:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'fresh_ec',
'USER': 'root',
'PASSWORD': 'root',
'HOST':'127.0.0.1',
'OPTIONS': {'init_command': 'SET storage_engine=INNODB;'}
}
}
可能会报错,如:
django.db.utils.OperationalError: (1193, "Unknown system variable 'storeage_engine'")
即storage_engine参数错误,需要改为default_storage_engine,即:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'fresh_ec',
'USER': 'root',
'PASSWORD': 'root',
'HOST':'127.0.0.1',
'OPTIONS': {'init_command': 'SET default_storage_engine=INNODB;'}
}
}
再次运行项目,即成功。
5.Django makemigrations报错Field specifies on_delete=SET_NULL, but cannot be null
在进行Django开发时,定义完数据模型后要进行数据映射,在执行makemigrations
命令行后,可能会报错如下:
xxx.Xxx.xxxx: (fields.E320) Field specifies on_delete=SET_NULL, but cannot be null.
HINT: Set null=True argument on the field, or change the on_delete rule.
这可能是因为所定义的某个模型定义了外键,而在新版的Django中外键必须指定on_delete属性,例如user = models.ForeignKey(User, verbose_name='用户', on_delete=models.SET_NULL)
此时是因为该属性指定为models.SET_NULL
,即在父模型删除数据后,对应的子模型记录字段设为空,但是在定义该字段时并未允许该字段为空,因此解决方法有两种:
- 字段增加null属性为真
即字段定义为
user = models.ForeignKey(User, verbose_name='用户', null=True, on_delete=models.SET_NULL)
。 - 修改on_delete属性
修改该属性为其他值,如
models.CASCADE
、models.SET_DEFAULT
等。
6.Django xadmin数据迁移ImportError
在安装xadmin后进行数据迁移时,报错:
ImportError: cannot import name 'six' from 'django.utils'
这是因为django3及以上的版本中已经没有six插件,可以将django降到2版本,也可以将安装的six.py复制到django/utils目录下,操作如下:
还需要修改xadmin的文件导入,xadmin/models.py修改如下:
import json
import django
from django.db import models
from django.utils import timezone
from django.conf import settings
from django.contrib.contenttypes.models import ContentType
from django.utils.translation import ugettext_lazy as _, ugettext
from django.urls import NoReverseMatch, reverse
from django.core.serializers.json import DjangoJSONEncoder
from django.db.models.base import ModelBase
from django.utils.encoding import smart_text
from django.utils.six import python_2_unicode_compatible
在其他文件中可能还会遇到同样的错误,按照相同的方法修改即可。
7.Django xadmin数据迁移__init__() takes 1 positional argument but 6 were given
在安装xadmin后进行数据迁移时,报错:
forms.Field.__init__(self, required, widget, label, initial, help_text,
TypeError: __init__() takes 1 positional argument but 6 were given
直接找到xadminviewsdashboard.py,将forms.Field.__init__(self, required, widget, label, initial, help_text, *args, **kwargs)
改为forms.Field.__init__(self)
即可。
8.Django xadmin数据迁移ImportError
在安装xadmin后进行数据迁移时,报错:
from django.contrib.auth.views import password_reset_confirm
ImportError: cannot import name 'password_reset_confirm' from 'django.contrib.auth.views' (C:UsersLENOVO.virtualenvsDjango_Vue_Fresh_Ecommerce-NKba4OvDlibsite-packagesdjangocontribauthviews.py)
此时需要修改xadminpluginspasswords.py,将rom django.contrib.auth.views import password_reset_confirm
改为from django.contrib.auth.views import PasswordResetConfirmView
,还需要将77行的return password_reset_confirm
改为return PasswordResetConfirmView
。
9.Django xadmin数据迁移AttributeError: ‘Settings’ object has no attribute ‘MIDDLEWARE_CLASSES’
在安装xadmin后进行数据迁移时,报错:
val = getattr(self._wrapped, name)
AttributeError: 'Settings' object has no attribute 'MIDDLEWARE_CLASSES'
此时需要修改xadminpluginslanguage.py,将第24行的if settings.LANGUAGES and 'django.middleware.locale.LocaleMiddleware' in settings.MIDDLEWARE_CLASSES:
修改为if settings.LANGUAGES and 'django.middleware.locale.LocaleMiddleware' in settings.MIDDLEWARE:
。
10.Django xadmin数据迁移ModuleNotFoundError
在安装xadmin后进行数据迁移时,报错:
from django.core.urlresolvers import reverse
ModuleNotFoundError: No module named 'django.core.urlresolvers'
需要将报错文件的from django.core.urlresolvers import reverse
修改为from django.urls import reverse
。
- Silverlight 2.0 beta1 堆栈
- 微信内置浏览器 长按识别二维码 功能的两三个坑与解决方案
- Android中EditText
- 比特币分叉了,这到底是怎么回事?
- Excel导入导出数据库01
- 一些移动 Web 前端开发上的要点记录
- Angularjs基础(十一)
- Silverlight 2 的基础XAML语法学习
- TextView显示html文件中的图片
- 继百度、阿里之后,农业也刮起人工智能风,看它们都干了些啥?
- Windows Server 2008 与 .NET Framework 的版本之间有什么关系
- asp.net mvc相关开源项目推荐
- Android监听来电和去电
- PostCSS 插件postcss-lazyimagecss:自动填写width / height 属性
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用 Apache Web 服务器配置两个或多个站点的办法
- 详解laravel passport OAuth2.0的4种模式
- Apache Web 服务器的安装配置办法
- thinkphp5实现微信扫码支付
- laravel框架实现后台登录、退出功能示例
- Laravel5.1 框架数据库操作DB运行原生SQL的方法分析
- Linux查看进程的所有信息的办法示例
- PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析
- Python基于traceback模块获取异常信息
- PHP实现微信商户支付企业付款到零钱功能
- PHP调用微博接口实现微博登录的办法示例
- thinkphp3.2同时连接两个数据库的简单方法
- php实现微信企业付款到个人零钱功能
- php中对象引用和复制实例分析
- php中上传文件的的解决方案