Django使用Mysql数据库以及自动建表

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 <名字>

之后,项目目录发生改变:

上一篇:开源web框架django知识总结(十五)


下一篇:18 传统方式写列表和详情视图