setting中的设置
auth组件用的user表不再是原来的user表了,应该是现在指定的表(以后没有auth_user表了) AUTH_USER_MODEL = 'blog.UserInfo' DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'zhou1', 'USER': 'root', 'PASSWORD': 'admin', 'PORT': 3306, 'HOST': '127.0.0.1', } }
数据库迁移部分
from django.db import models from django.contrib.auth.models import AbstractUser # Create your models here. # UserInfo这个表,继承AbstractUser,因为要用auth组件 class UserInfo(AbstractUser): nid = models.AutoField(primary_key=True) # username=models.CharField(max_length=32,unique=True) # 该字段可以为空,为该字段设置默认值,default='123455666' phone = models.CharField(max_length=32,null=True) # upload_to需要传一个路径 avatar = models.FileField(upload_to='avatar/', default='/static/img/default.png') # 一对一关联blog表,to_field如果不写,默认主键 # blog_id字段存的数据是什么?blog表的---nid这个字段 blog = models.OneToOneField(to='Blog', to_field='nid') # user表 # id name blog_id # 1 111 1 # 2 111 1 class Blog(models.Model): nid = models.AutoField(primary_key=True) title = models.CharField(max_length=64) site_name = models.CharField(max_length=32) theme = models.CharField(max_length=64) class Category(models.Model): nid = models.AutoField(primary_key=True) title = models.CharField(max_length=64) # ForeignKey跟OneToOneField的区别? #OneToOneField unique=True blog = models.ForeignKey(to='Blog', to_field='nid', null=True) class Tag(models.Model): nid = models.AutoField(primary_key=True) title = models.CharField(max_length=64) blog = models.ForeignKey(to='Blog', to_field='nid', null=True) class Article(models.Model): nid = models.AutoField(primary_key=True) title = models.CharField(max_length=64) # 摘要,简单描述 desc = models.CharField(max_length=255) # 大文本TextField() content = models.TextField() # 存时间类型,auto_now_add每插入一条数据,时间自动写入当前时间, # auto_now,这条数据修改的时候,会更新成当前时间 create_time = models.DateTimeField(auto_now_add=True) blog = models.ForeignKey(to='Blog', to_field='nid', null=True) category = models.ForeignKey(to='Category', to_field='nid', null=True) # through_fields应该怎么写? # 中介模型,手动创建第三张表 tag = models.ManyToManyField(to='Tag', through='ArticleTOTag', through_fields=('article', 'tag')) # 这样写,会自动创建第三张表 # tag = models.ManyToManyField(to='Tag') # 手动创建第三张表 class ArticleTOTag(models.Model): nid = models.AutoField(primary_key=True) article = models.ForeignKey(to='Article', to_field='nid') tag = models.ForeignKey(to='Tag', to_field='nid') # article和tag应不应该联合唯一? # article_id 1 # tag_id 1 class Commit(models.Model): nid = models.AutoField(primary_key=True) user = models.ForeignKey(to='UserInfo', to_field='nid') article = models.ForeignKey(to='Article', to_field='nid') content = models.CharField(max_length=255) create_time = models.DateTimeField(auto_now_add=True) # 这样写是可以的 # parent_id=models.IntegerField() # 自关联 # parent_id=models.ForeignKey(to='Commit',to_field='nid') parent = models.ForeignKey(to='self', to_field='nid',null=True) class UpAndDown(models.Model): nid = models.AutoField(primary_key=True) user = models.ForeignKey(to='UserInfo', to_field='nid') article = models.ForeignKey(to='Article', to_field='nid') is_up = models.BooleanField() class Meta: # 写这些,只是为了不写脏数据,联合唯一 unique_together = (('user', 'article'),)
登入的四种方式
from django.db import models from django.contrib.auth.models import AbstractUser # Create your models here. # UserInfo这个表,继承AbstractUser,因为要用auth组件 class UserInfo(AbstractUser): nid = models.AutoField(primary_key=True) # username=models.CharField(max_length=32,unique=True) # 该字段可以为空,为该字段设置默认值,default='123455666' phone = models.CharField(max_length=32,null=True) # upload_to需要传一个路径 avatar = models.FileField(upload_to='avatar/', default='/static/img/default.png') # 一对一关联blog表,to_field如果不写,默认主键 # blog_id字段存的数据是什么?blog表的---nid这个字段 blog = models.OneToOneField(to='Blog', to_field='nid') # user表 # id name blog_id # 1 111 1 # 2 111 1 class Blog(models.Model): nid = models.AutoField(primary_key=True) title = models.CharField(max_length=64) site_name = models.CharField(max_length=32) theme = models.CharField(max_length=64) class Category(models.Model): nid = models.AutoField(primary_key=True) title = models.CharField(max_length=64) # ForeignKey跟OneToOneField的区别? #OneToOneField unique=True blog = models.ForeignKey(to='Blog', to_field='nid', null=True) class Tag(models.Model): nid = models.AutoField(primary_key=True) title = models.CharField(max_length=64) blog = models.ForeignKey(to='Blog', to_field='nid', null=True) class Article(models.Model): nid = models.AutoField(primary_key=True) title = models.CharField(max_length=64) # 摘要,简单描述 desc = models.CharField(max_length=255) # 大文本TextField() content = models.TextField() # 存时间类型,auto_now_add每插入一条数据,时间自动写入当前时间, # auto_now,这条数据修改的时候,会更新成当前时间 create_time = models.DateTimeField(auto_now_add=True) blog = models.ForeignKey(to='Blog', to_field='nid', null=True) category = models.ForeignKey(to='Category', to_field='nid', null=True) # through_fields应该怎么写? # 中介模型,手动创建第三张表 tag = models.ManyToManyField(to='Tag', through='ArticleTOTag', through_fields=('article', 'tag')) # 这样写,会自动创建第三张表 # tag = models.ManyToManyField(to='Tag') # 手动创建第三张表 class ArticleTOTag(models.Model): nid = models.AutoField(primary_key=True) article = models.ForeignKey(to='Article', to_field='nid') tag = models.ForeignKey(to='Tag', to_field='nid') # article和tag应不应该联合唯一? # article_id 1 # tag_id 1 class Commit(models.Model): nid = models.AutoField(primary_key=True) user = models.ForeignKey(to='UserInfo', to_field='nid') article = models.ForeignKey(to='Article', to_field='nid') content = models.CharField(max_length=255) create_time = models.DateTimeField(auto_now_add=True) # 这样写是可以的 # parent_id=models.IntegerField() # 自关联 # parent_id=models.ForeignKey(to='Commit',to_field='nid') parent = models.ForeignKey(to='self', to_field='nid',null=True) class UpAndDown(models.Model): nid = models.AutoField(primary_key=True) user = models.ForeignKey(to='UserInfo', to_field='nid') article = models.ForeignKey(to='Article', to_field='nid') is_up = models.BooleanField() class Meta: # 写这些,只是为了不写脏数据,联合唯一 unique_together = (('user', 'article'),)