Python Django开发 异常及解决办法(一)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 该错误表明views.py中没有return一个返回值给前端。

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.CASCADEmodels.SET_DEFAULT等。

6.Django xadmin数据迁移ImportError

在安装xadmin后进行数据迁移时,报错:

ImportError: cannot import name 'six' from 'django.utils'

这是因为django3及以上的版本中已经没有six插件,可以将django降到2版本,也可以将安装的six.py复制到django/utils目录下,操作如下:

2345_image_file_copy_56.jpg

还需要修改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

直接找到xadmin\views\dashboard.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:\Users\LENOVO\.virtualenvs\Django_Vue_Fresh_Ecommerce-NKba4OvD\lib\site-packages\django\contrib\auth\views.py)

此时需要修改xadmin\plugins\passwords.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'

此时需要修改xadmin\plugins\language.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

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3天前
|
IDE 测试技术 开发工具
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
在Python开发中,调试是提升效率的关键技能。本文总结了10个实用的调试方法,涵盖内置调试器pdb、breakpoint()函数、断言机制、logging模块、列表推导式优化、IPython调试、警告机制、IDE调试工具、inspect模块和单元测试框架的应用。通过这些技巧,开发者可以更高效地定位和解决问题,提高代码质量。
42 8
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
|
17天前
|
存储 API 数据库
使用Python开发获取商品销量详情API接口
本文介绍了使用Python开发获取商品销量详情的API接口方法,涵盖API接口概述、技术选型(Flask与FastAPI)、环境准备、API接口创建及调用淘宝开放平台API等内容。通过示例代码,详细说明了如何构建和调用API,以及开发过程中需要注意的事项,如数据库连接、API权限、错误处理、安全性和性能优化等。
69 5
|
29天前
|
机器学习/深度学习 人工智能 关系型数据库
Python开发
Python开发
40 7
|
1月前
|
开发框架 搜索推荐 数据可视化
Django框架适合开发哪种类型的Web应用程序?
Django 框架凭借其强大的功能、稳定性和可扩展性,几乎可以适应各种类型的 Web 应用程序开发需求。无论是简单的网站还是复杂的企业级系统,Django 都能提供可靠的支持,帮助开发者快速构建高质量的应用。同时,其活跃的社区和丰富的资源也为开发者在项目实施过程中提供了有力的保障。
|
1月前
|
Python
在Python中,`try...except`语句用于捕获和处理程序运行时的异常
在Python中,`try...except`语句用于捕获和处理程序运行时的异常
48 5
|
1月前
|
前端开发 安全 数据库
使用Python开发独立站的全面指南
本文详细介绍了如何使用Python及其Web框架Django和Flask快速搭建功能完善、易于管理的独立站。从Python和Web开发基础讲起,逐步覆盖环境搭建、项目创建、数据库设计、视图与URL路由、模板创建、表单处理、测试调试、部署优化及安全维护等内容,旨在帮助开发者高效构建稳定的Web应用。
69 1
|
1月前
|
Python
在Python中,自定义函数可以抛出自定义异常
在Python中,自定义函数可以抛出自定义异常
46 5
|
1月前
|
缓存 API 数据库
Python哪个框架合适开发速卖通商品详情api?
在跨境电商平台速卖通的商品详情数据获取与整合中,Python 语言及其多种框架(如 Flask、Django、Tornado 和 FastAPI)提供了高效解决方案。Flask 简洁灵活,适合快速开发;Django 功能全面,适用于大型项目;Tornado 性能卓越,擅长处理高并发;FastAPI 结合类型提示和异步编程,开发体验优秀。选择合适的框架需综合考虑项目规模、性能要求和团队技术栈。
27 2
|
1月前
|
存储 API 数据安全/隐私保护
Python开发淘宝详情API的深入探索
通过Python开发淘宝详情API,你可以高效地获取商品信息,为电商运营和市场分析提供强有力的数据支持。本文详细介绍了注册开发者账号、获取API密钥、构建请求、解析响应数据等步骤,并探讨了相关的注意事项和最佳实践。希望这些内容能够帮助你更好地理解和使用淘宝开放平台的API接口,实现你的业务需求。
38 1
|
29天前
|
JSON API 数据格式
如何使用Python开发天猫获得淘宝买家秀API接口?
本文介绍了如何使用Python开发天猫和淘宝买家秀API接口,包括注册开放平台账号、创建应用获取API权限、构建请求URL、发送请求获取响应及解析数据等步骤,帮助开发者高效获取和处理商品信息与用户评价数据。
27 0