文章目录
- 1 虚拟环境创建Django项目:ImportError: cannot import name 'Iterator' from 'collections' (D:\python3.10.0\lib\collections\__init__.py)
- 2 CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False.
- 3 ERRORS: ?: (admin.E403) A 'django.template.backends.django.DjangoTemplates' instance must be configured in TEMPLATES in order to use the admin application.
- 4 django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
- 5 RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods
- 6 redis.exceptions.AuthenticationError: Authentication required. / django_redis.exceptions.ConnectionInterrupted: Redis AuthenticationError: Authentication required.
- 7 django.core.exceptions.ImproperlyConfigured: The included URLconf '
- 8 django.core.exceptions.ImproperlyConfigured: Cannot import 'register'. Check that 'apps.register.apps.RegisterConfig.name' is correct.
- 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
- 10 TypeError: __init__() missing 1 required positional argument: 'on_delete
报错原因:
Python3.10版本中,库collections停用了,所以在Python3.10版本环境下执行django-admin startproject 项目名
命令创建Django项目会报错。
解决:
方法一:创建虚拟环境时指定python版本
virtualenv -p 指定版本python.exe的安装路径 虚拟环境名
virtualenv -p D:\python3.9.7\python.exe test01
方法二:更改系统环境变量配置中默认优先使用的python版本
前提已经安装好其他版本的Python
原因:
当全局配置文件中的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 = ['*']
解决:
只需将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',
],
},
},
]
报错原因:
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()
解决办法1:重启mysql服务
net stop mysql
net start mysql
解决方法2:安装cryptography包
pip install cryptography -i https://pypi.tuna.tsinghua.edu.cn/simple
原因:
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数据库的密码
}
}
}
原因:
在Django项目的总路由配置文件中配置了项目子应用的子路由,但是在子应用的路由配置文件中没有路由配置(子应用路由配置文件内容为空).
解决:
在子应用的子路由配置文件中添加urlpatterns配置即可:
from django.urls import path, include
urlpatterns = [
]
原因:
导包的路径书写错误,django项目找不到对应的文件
解决:
将导包时候的路径填写正确即可
在项目的全局配置文件中打印查看项目的导包路径:
import sys
print(sys.path) # 查看项目当前的导包路径
print(BASE_DIR)
原因:
通过POST调用了这个URL,URL没有以斜杠结尾,即请求的URL没有以 / 结尾
解决:
1.在django项目的项目设置 settings.py 文件中设置:
# 取消URL一定以斜杠结尾
APPEND_SLASH=False
2.在请求的URL后添加 /
报错:
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’
子应用没有进行注册,生成迁移文件会报错:
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