[Python] Django 报错记录与解决

这篇具有很好参考价值的文章主要介绍了[Python] Django 报错记录与解决。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。



1 虚拟环境创建Django项目:ImportError: cannot import name ‘Iterator’ from ‘collections’ (D:\python3.10.0\lib\collections_init_.py)

cannot import name 'iterable' from 'collections,Python,python,django,py
cannot import name 'iterable' from 'collections,Python,python,django,py

报错原因:
Python3.10版本中,库collections停用了,所以在Python3.10版本环境下执行django-admin startproject 项目名命令创建Django项目会报错。

解决:
方法一:创建虚拟环境时指定python版本

virtualenv -p 指定版本python.exe的安装路径 虚拟环境名
virtualenv -p D:\python3.9.7\python.exe test01

cannot import name 'iterable' from 'collections,Python,python,django,py

方法二:更改系统环境变量配置中默认优先使用的python版本

前提已经安装好其他版本的Python

cannot import name 'iterable' from 'collections,Python,python,django,py
cannot import name 'iterable' from 'collections,Python,python,django,py
cannot import name 'iterable' from 'collections,Python,python,django,py
cannot import name 'iterable' from 'collections,Python,python,django,py
cannot import name 'iterable' from 'collections,Python,python,django,py
cannot import name 'iterable' from 'collections,Python,python,django,py
cannot import name 'iterable' from 'collections,Python,python,django,py


2 CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False.

原因:
当全局配置文件中的DEBUG配置项设置为False时候,必须在ALLOWED_HOSTS配置项中配置允许哪些IP地址访问我们的django后台站点。

解决:
在全局配置文件 setting.py 中ALLOWED_HOSTS配置项中添加允许访问我们的django后台站点的IP地址

DEBUG = False

ALLOWED_HOSTS = [
    'localhost',
    '127.0.0.1',
]

# 运行所有的IP地址访问我们的django后台站点
# ALLOWED_HOSTS = ['*']

3 ERRORS: ?: (admin.E403) A ‘django.template.backends.django.DjangoTemplates’ instance must be configured in TEMPLATES in order to use the admin application.

解决:
只需将django的默认模板引擎配置添加在模板引擎的配置项中的最后即可(注意模板文件夹的路径)

TEMPLATES = [
    # Jinja2模板引擎配置
    {
        'BACKEND': 'django.template.backends.jinja2.Jinja2',  # 配置Jinja2模板引擎
        # BASE_DIR 指向项目目录
        'DIRS': [os.path.join(BASE_DIR, 'templates')],  # 配置模板文件加载目录
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
            # 补充 Jinja2 模板引擎环境
            # 'environment': '项目目录.utils.jinja2_env.jinja2_environment',
            # 'environment': 'test_pro01.utils.jinja2_env.jinja2_environment',
        },
    },
    # Django 默认模板引擎
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

4 django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.

报错原因:
1.项目的虚拟环境中缺少MySQL需要的驱动程序MySQLdb,在python2.x中使用的MySQL驱动程序为MySQLdb,而在python3.x中需要使用PyMySQL。
2.也可能是由于django中默认的MySQL驱动程序为MySQLdb,我们没有将其修改为PyMySQL。

解决:
安装PyMySQL:

pip install pymysql -i https://pypi.tuna.tsinghua.edu.cn/simple

使用 pymysql 替代默认的MySQL数据库驱动程序 MySQLdb,在项目目录下的__init__.py 文件中添加如下代码:

from pymysql import install_as_MySQLdb


install_as_MySQLdb()

cannot import name 'iterable' from 'collections,Python,python,django,py


5 RuntimeError: ‘cryptography’ package is required for sha256_password or caching_sha2_password auth methods

解决办法1:重启mysql服务

net stop mysql
net start mysql

cannot import name 'iterable' from 'collections,Python,python,django,py
解决方法2:安装cryptography包

pip install cryptography -i https://pypi.tuna.tsinghua.edu.cn/simple

6 redis.exceptions.AuthenticationError: Authentication required. / django_redis.exceptions.ConnectionInterrupted: Redis AuthenticationError: Authentication required.

原因:
Django项目在配置redis(设置了访问密码)数据库时,没有配置访问redis数据库的密码。

解决:
在CACHE配置中的OPTIONS中添加访问redis数据库的密码。

"PASSWORD": "123123",  # 访问redis数据库的密码
# 配置redis数据库
CACHES = {
    "default": {  # 默认情况下使用redis中的哪个数据库
        # 使用redis作为缓存
        "BACKEND": "django_redis.cache.RedisCache",
        # redis 数据库所在的主机地址 端口号 选择第几个数据库
        # 默认情况下使用 0 号库
        "LOCATION": "redis://192.168.93.130:6379/0",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "PASSWORD": "123123",  # 访问redis数据库的密码
        }
    }
}

7 django.core.exceptions.ImproperlyConfigured: The included URLconf '<module ‘apps.register.urls’ from … does not appear to have any patterns in it. If you see the ‘urlpatterns’ variable with valid patterns in the file then the issue is probably caused by a circular import.

原因:
在Django项目的总路由配置文件中配置了项目子应用的子路由,但是在子应用的路由配置文件中没有路由配置(子应用路由配置文件内容为空).

解决:
在子应用的子路由配置文件中添加urlpatterns配置即可:

from django.urls import path, include

urlpatterns = [
    
]

8 django.core.exceptions.ImproperlyConfigured: Cannot import ‘register’. Check that ‘apps.register.apps.RegisterConfig.name’ is correct.

原因:
导包的路径书写错误,django项目找不到对应的文件

解决:
将导包时候的路径填写正确即可

在项目的全局配置文件中打印查看项目的导包路径:

import sys


print(sys.path)  # 查看项目当前的导包路径
print(BASE_DIR)

cannot import name 'iterable' from 'collections,Python,python,django,py


9 RuntimeError: You called this URL via POST, but the URL doesn’t end in a slash and you have APPEND_SLASH set. Django can’t redirect to the slash URL while maintaining POST data. Change your form to point to 127.0.0.1:9999/user/smsVerificationCode/ (note the trailing slash), or set APPEND_SLASH=False in your Django settings.[14/Nov/2022 18:33:34] “POST /user/smsVerificationCode HTTP/1.1” 500 74611

原因:
通过POST调用了这个URL,URL没有以斜杠结尾,即请求的URL没有以 / 结尾

解决:
1.在django项目的项目设置 settings.py 文件中设置:

# 取消URL一定以斜杠结尾
APPEND_SLASH=False

2.在请求的URL后添加 /

10 TypeError: init() missing 1 required positional argument: 'on_delete

报错:
TypeError: __init__() missing 1 required positional argument: 'on_delete'
原因:
django升级到2.0之后,表与表之间关联的时候必须写"on_delete"参数,否则会报错
来源:【异常】TypeError: init() missing 1 required positional argument: ‘on_delete‘
使用的是Django2.0以上的版本,在添加实体外键的时候,2.0以前的版本是默认级联删除的,在2.0以上的版本要加上:
models.ForeignKey(“表名”, on_delete=models.CASCADE)
之后再创建迁移文件,执行命令行就不会报错了
来源:Django运行创建迁移文件报错:TypeError: init() missing 1 required positional argument: ‘on_delete’
cannot import name 'iterable' from 'collections,Python,python,django,py
子应用没有进行注册,生成迁移文件会报错:
cannot import name 'iterable' from 'collections,Python,python,django,py




























cannot import name 'iterable' from 'collections,Python,python,django,py
cannot import name 'iterable' from 'collections,Python,python,django,py
cannot import name 'iterable' from 'collections,Python,python,django,py
cannot import name 'iterable' from 'collections,Python,python,django,py

ModuleNotFoundError: No module named 'users'
ImproperlyConfigured(django.core.exceptions.ImproperlyConfigured: 
Cannot import 'users'. 
Check that 'meiduo_mall.apps.users.apps.UsersConfig.name' is correct.

子应用没有创建在项目根目录下

Forbidden (Origin checking failed - http://localhost:8080 does not match any trusted origins.): /user/register/

跨域 注释csrf文章来源地址https://www.toymoban.com/news/detail-720073.html

到了这里,关于[Python] Django 报错记录与解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包