数据库方面的问题
今天遇到的第一个问题就是数据库配置的问题,首先贴上MySQL数据库的通用配置:
1 DATABASES = { 2 'default': { 3 'ENGINE': 'django.db.backends.mysql', 4 'NAME':'dbname', 5 'USER': 'root', 6 'PASSWORD': 'xxx', 7 'HOST': '', 8 'PORT': '', 9 } 10 }
1 # 由于Django内部连接MySQL时使用的是MySQLdb模块,而python3中还无此模块,所以需要使用pymysql来代替 2 3 # 如下设置放置的与project同名的配置的 __init__.py文件中 4 5 import pymysql 6 pymysql.install_as_MySQLdb()
根据这个配置就可使用MySQL数据库来完成后面的工作。
但是,当我在创建数据库的时候,系统报了如下的错误
主要错误的代码如下:
1 class Tag(models.Model): 2 nid = models.AutoField(primary_key=True) 3 title = models.CharField(verbose_name='标签名称', max_length=32) 4 blog = models.ForeignKey(verbose_name='所属博客', to='Blog', to_field='nid') #错误行
这个错误的主要原因是:
在django2.0后,定义外键和一对一关系的时候需要加on_delete选项,此参数为了避免两个表里的数据不一致问题,不然会报错:
TypeError: __init__() missing 1 required positional argument: 'on_delete'
举例说明:
user=models.OneToOneField(User) owner=models.ForeignKey(UserProfile)
需要改成:
user=models.OneToOneField(User,on_delete=models.CASCADE)
owner=models.ForeignKey(UserProfile,on_delete=models.CASCADE)
参数说明:
on_delete有CASCADE、PROTECT、SET_NULL、SET_DEFAULT、SET()五个可选择的值
CASCADE:此值设置,是级联删除。
PROTECT:此值设置,是会报完整性错误。
SET_NULL:此值设置,会把外键设置为null,前提是允许为null。
SET_DEFAULT:此值设置,会把设置为外键的默认值。
SET():此值设置,会调用外面的值,可以是一个函数。
一般情况下使用CASCADE就可以了。
URL路由的问题
使用path来配置URL路由的时候,遇到了正则表达式不能使用的问题,查了一下,原来是Django 2.0的新改动,如果需要使用正则表达式可以引入
from django.urls import re_path
具体可以参照这位大神的博客。
详细了解改动内容,可以参照官方文档。