- 升级到 Django 4.0 后,运行时出现以下错误
python manage.py runserver
...
File "/path/to/myproject/myproject/urls.py", line 16, in <module>
from django.conf.urls import url
ImportError: cannot import name 'url' from 'django.conf.urls' (/path/to/my/venv/lib/python3.9/site-packages/django/conf/urls/__init__.py)
django.conf.urls.url()
在 Django 3.0 中已弃用,并在 Django 4.0+ 中删除。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/57692.html
urls.py文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/57692.htmlfrom django.conf.urls
from myapp.views import index
urlpatterns = [
url(r'^$', home, name="index"),
url(r'^myapp/', include('myapp.urls'),
]
最简单的解决方法是替换url()
为re_path()
。re_path
使用正则表达式url
,只需更新导入并替换url
为re_path
。例如:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/57692.htmlfrom django.urls import include, re_path
from myapp.views import index
urlpatterns = [
re_path(r'^$', home, name='index'),
re_path(r'^myapp/', include('myapp.urls'),
]
或者可以切换到使用path
.path()
,不使用正则表达式,如果切换到路径则必须更新 URL 模式。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/57692.htmlfrom django.urls import include, path
from myapp.views import index
urlpatterns = [
path('', home, name='index'),
path('myapp/', include('myapp.urls'),
]
如果有一个需要更新许多URL模式的大型项目,django-upgrade库对更新urls.py
文件很有用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/57692.html
github:https://github.com/adamchainz/django-upgrade文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/57692.html
2.Django4.0 ImportError:无法从“django.utils.translation”导入名称“ugettext_lazy”文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/57692.html
Django4.0,尝试导入时ugettexget_lazy
,如下面的代码所示文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/57692.htmlfrom django.utils.translation import ugettexget_lazy as _
收到以下错误:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/57692.htmlImportError: cannot import name 'ugettext_lazy' from 'django.utils.translation'
ugettexget_lazy
已从 Django 4 中删除,请改用它文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/57692.htmlfrom django.utils.translation import gettext_lazy as _
3.无法从 django.utils.http 导入 is_safe_url ,替代方案?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/57692.html
在Django3.0中,is_safe_url已重命名
为url_has_alowed_host_and_scheme
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/57692.html
4.在django中区分null = True,blank = True文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/57692.html
null=True
在数据库中的列上设置NULL
(对比NOT NULL
).Django字段类型的空值,例如DateTimeField
或ForeignKey
将存储NULL
在DB中.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/57692.html
blank=True
确定表单中是否需要该字段.这包括管理员和您自己的自定义表单.如果blank=True
那时不需要该字段,而如果False
该字段不能为空.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/57692.html
两者的组合是如此频繁,因为通常如果您要在表单中允许字段为空,那么您还需要您的数据库来允许NULL
该字段的值.例外是CharField
s和TextField
s,它们在Django中永远不会保存为NULL
.空值作为空字符串(''
)存储在DB中.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/57692.html
5.django恢复上次迁移文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/57692.html
可以通过迁移到先前的迁移来恢复.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/57692.html
例如,您的最后两次迁移是:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/57692.html
0006_previous_migration
0007_migration_to_revert
然后你会做:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/57692.htmlpython manage.py migrate my_app 0007_previous_migration
然后,可以删除迁移0008_migration_to_revert
.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/57692.html
要撤消应用的所有迁移,可以运行:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/57692.htmlpython manage.py migrate my_app zero
6.django.db.utils.OperationalError: 1366文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/57692.htmldjango.db.utils.OperationalError: (1366, "Incorrect string value: '\\xE4\\xB8\\xBB\\xE6\\x9C\\xBA...' for column 'property_display' at row 1")
这个错误通常是在使用Django ORM时由于MySQL数据库编码不兼容导致的。常见的编码不兼容问题是MySQL使用默认的“utf8”编码而Django使用“utf8mb4”编码。在Django的数据库设置中修改字符集编码为“utf8mb4”也可以在MySQL的配置文件中指定使用该编码。例如:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/57692.htmlDATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydatabase',
'USER': 'mydatabaseuser',
'PASSWORD': 'mypassword',
'HOST': 'localhost',
'PORT': '3306',
'OPTIONS': {
'charset': 'utf8mb4',
},
}
}