Django4.0使用过程遇到一些问题的解决办法

2023-12-0107:21:33后端程序开发Comments561 views字数 2449阅读模式
  1. 升级到 Django 4.0 后,运行时出现以下错误python manage.py runserver
 ...  File "/path/to/myproject/myproject/urls.py", line 16, in <module>    from django.conf.urls import urlImportError: 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.html

from django.conf.urlsfrom myapp.views import index
urlpatterns = [    url(r'^$', home, name="index"),    url(r'^myapp/', include('myapp.urls'),]

最简单的解决方法是替换url()re_path()re_path使用正则表达式url,只需更新导入并替换urlre_path。例如:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/57692.html

from django.urls import include, re_pathfrom 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.html

from django.urls import include, pathfrom 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.html

from django.utils.translation import ugettexget_lazy as _

收到以下错误:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/57692.html

ImportError: cannot import name 'ugettext_lazy' from 'django.utils.translation'
 

ugettexget_lazy已从 Django 4 中删除,请改用它文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/57692.html

from 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字段类型的空值,例如DateTimeFieldForeignKey将存储NULL在DB中.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/57692.html

blank=True确定表单中是否需要该字段.这包括管理员和您自己的自定义表单.如果blank=True那时不需要该字段,而如果False该字段不能为空.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/57692.html

两者的组合是如此频繁,因为通常如果您要在表单中允许字段为空,那么您还需要您的数据库来允许NULL该字段的值.例外是CharFields和TextFields,它们在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.html

python 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.html

python manage.py migrate my_app zero

6.django.db.utils.OperationalError: 1366文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/57692.html

django.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.html

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mydatabase',
        'USER': 'mydatabaseuser',
        'PASSWORD': 'mypassword',
        'HOST': 'localhost',
        'PORT': '3306',
        'OPTIONS': {
            'charset': 'utf8mb4',
        },
    }}
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/57692.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/57692.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定