在settings.py
中如下配置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 用什么数据库驱动
'NAME': 'nebulablog', # 数据库名字
'USER': 'root', # 用户名就是mysql -u后面的
'PASSWORD': 'root', # 对应的密码
'HOST': '127.0.0.1', # 就是localhost
'POST': 3306, # mysql默认为3306,如果自己配置过mysql端口,需要改成自己配的
}
}
在项目与settings.py
同级目录新建models.py
。名字一定要起对,末尾有s
。
然后在里面写好自己的实体:
from django.db.models import CharField, ImageField, Model
from django.db.models.fields import (
AutoField, BigAutoField, BigIntegerField, BooleanField,
DateTimeField, SmallIntegerField, TextField, Field, IntegerField
)
class FixedCharField(Field): # 定义一些字段类型
def __init__(self, *args, **kwargs):
super(FixedCharField, self).__init__(*args, **kwargs)
def db_type(self, connection):
return 'char(%s)' % self.max_length
class UIntField(IntegerField):
def __init__(self, *args, **kwargs):
super(IntegerField, self).__init__(*args, **kwargs)
def db_type(self, connection):
return 'integer(%s) UNSIGNED' % self.max_length # 但mysql中长度与存储字节数无关
class User(Model):
id = BigAutoField(verbose_name='账号', primary_key=True) # 自增长型主键
name = FixedCharField(max_length=20, null=False, blank=False, verbose_name='昵称')
isAuthor = BooleanField(null=False, default=False, verbose_name='是否可以写blog')
banned = BooleanField(null=False, default=False, verbose_name='已经禁用')
# BooleanField在数据库中是TINYINT(1)
deleted = BooleanField(null=False, default=False, verbose_name='已经删除')
create_time = DateTimeField(null=False, verbose_name='创建时间')
class UserInfo(Model):
# user外键,这里可以用OneToOneField但是那将让Django自动创建一个外键,外键不是什么情况下都受欢迎的,有时候还是会用代码逻辑来代替外键
id = BigIntegerField(verbose_name='账号', primary_key=True)
domain = CharField(verbose_name='域名', max_length=255, blank=False, null=False) # 没错,域名就有这么长
post = FixedCharField(max_length=32, blank=False, null=False, verbose_name='电子邮局地址')
phone = FixedCharField( verbose_name='手机号', max_length=15, blank=False)
...
执行以下命令:
python manage.py makemigrations <名字>
之后,项目目录发生改变: