4.Model层开发(下)
在之前完成了博客表结构创建,本篇将创建用户表结构和评论表结构;
- 用户表
列名 | 字段名 | 字段类型 |
---|---|---|
主键 | id | AutoField |
账号 | account | CharField |
密码 | password | CharField |
暱称 | nickname | CharField |
邮箱 | EmailField | |
注册时间 | createDatetime | DateTimeField |
性别 | gender | PositiveSmallIntegerField |
- 评论表
列名 | 字段名 | 字段类型 |
---|---|---|
主键 | id | AutoField |
评论内容 | commentText | CharField |
评论用户 | cuser | ForeignKey |
评论文章 | cblog | ForeignKey |
外键约束说明:一个评论由一个用户创建、对应一篇博客,一篇博客可以有多个评论,一个用户也可以创建多个评论,所以均为一对多的关系。删除博客、用户,相应的评论也会删除,级联操作 on_delete = models.CASADE
~/comments/models.py
from django.db import models
from user.models import User
from blog.models import Blog
# Create your models here.
class Comments(models.Model):
id = models.AutoField(verbose_name='主键', primary_key=True)
commentText = models.CharField(verbose_name='评论内容', max_length=100)
cuser = models.ForeignKey(verbose_name='评论用户', to=User, on_delete=models.CASCADE)
cblog = models.ForeignKey(verbose_name='评论文章', to=Blog, on_delete=models.CASCADE)
~/user/models.py
from django.db import models
from django.utils import timezone
# Create your models here.
class User(models.Model):
id = models.AutoField(verbose_name='主键', primary_key=True)
account = models.CharField(verbose_name='账号', max_length=50)
password = models.CharField(verbose_name='密码', max_length=50)
nickname = models.CharField(verbose_name='暱称', max_length=50)
email = models.EmailField(verbose_name='邮箱', max_length=50)
createDatetime = models.DateTimeField(verbose_name='注册时间', default=timezone.now, blank=True)
gender = models.PositiveSmallIntegerField(verbose_name='性别', choices=((0,'男'),(1,'女')), default=0)
注:CharField() 必须有 max_length = 属性;id 主键 即使不定义,在创建表的时候也会自动添加的
- 执行命令
python manage.py makemigrations
python manage.py migrate
- 生成迁移文件,执行迁移文件,在数据库中创建表,增加字段等操作,替代了我们在数据库中使用SQL语言进行复杂的操作
有关这两个命令的区别,请移步【Django2.0】python manage.py makemigrations 和 python manage.py migrate的区别,有关模型类创建,增删改查等操作,ORM原理等相关知识,需要自行百度。 - 创建完成之后可以在PyCharm 中链接 MySQL 查看表结构是否成功。
5.后台管理系统完善
在终端使用python manage.py runserver 80
运行这个Django项目,在浏览器查看到如下页面,代表前面的配置都是ok的
- 接下来我们进入后台管理系统(Django为我们自行生成了后台管理系统),在本地环境下,路由后加 127.0.0.1/admin,按回车即可进入,进入登录界面
- 在终端中创建超级管理员
python manage.py createsuperuser
,回车后根据提示输入用户名和密码 - 登录到后台管理界面,可以看到显示的是Django自由的认证和授权,接下来要进行后台管理界面开发
- 注册apps,在每个子应用下的 admin.py 中注册apps,将其添加到后台管理系统中;
~/user/admin.py
from django.contrib import admin
from .models import Category, Tag, Blog
# Register your models here.
@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
list_display = ['name']
list_filter = ['name'] # 过滤器,根据列表中的字段过滤显示信息
search_fields = ['name'] # 搜索框,可以根据列表中的字段进行搜索
@admin.register(Tag)
class TagAdmin(admin.ModelAdmin):
list_display = ['name']
list_filter = ['name']
search_fields = ['name']
@admin.register(Blog)
class BlogAdmin(admin.ModelAdmin):
list_display = ['blogTitle', 'blogAuthor', 'category', 'createDatetime', 'viewsCount', 'commentsCount']
fields = ['blogTitle', 'blogAuthor', 'category', 'createDatetime', 'text', 'tags']
list_filter = ['blogTitle', 'blogAuthor', 'category']
search_fields = ['blogTitle', 'blogAuthor', 'category']
~/comments/admin.py
from django.contrib import admin
from .models import Comments
# Register your models here.
@admin.register(Comments)
class CommentsAdmin(admin.ModelAdmin):
list_display = ['commentText', 'cuser', 'cblog']
fields = ['commentText', 'cuser', 'cblog']
list_filter = ['cuser', 'cblog']
search_fields = ['cuser', 'cblog']
~/user/admin.py
from django.contrib import admin
from .models import User
# Register your models here.
@admin.register(User)
class UserAdmin(admin.ModelAdmin):
list_display = ['account', 'password', 'nickname', 'email', 'createDatetime', 'gender']
fields = ['account', 'password', 'nickname', 'email', 'createDatetime', 'gender']
list_filter = ['account', 'password', 'nickname', 'email', 'createDatetime', 'gender']
search_fields = ['account', 'password', 'nickname', 'email', 'createDatetime', 'gender']
修改完成如下图,接下来修改后台管理界面的标题等,并将英文显示改为中文
补充:管理模型类下各关键词含义
字段 | 含义 |
---|---|
list_display | 后台中显示的列名 |
fields | 在后台添加数据显示的列 |
list_filter | 可以根据该列表中的列名筛选数据 |
search_fields | 可以根据列表中的列名查询数据 |
- 修改中文显示
- 在任意一个admin.py中加入
# 后台管理系统的标题配置
admin.site.site_header = '个人博客后台管理'
admin.site.index_title = '后台系统'
admin.site.site_title = '管理'
- 在apps.py下加入 verbose_name =
~/blog/apps.py
from django.apps import AppConfig
class BlogConfig(AppConfig):
name = 'blog'
verbose_name = '博客管理'
~/comments/apps.py
from django.apps import AppConfig
class CommentsConfig(AppConfig):
name = 'comments'
verbose_name = '评论管理'
~/user/apps.py
from django.apps import AppConfig
class UserConfig(AppConfig):
name = 'user'
verbose_name = '用户管理'
- 在模型类下加入class Meta():
以评论表为例:
from django.db import models
from user.models import User
from blog.models import Blog
# Create your models here.
class Comments(models.Model):
id = models.AutoField(verbose_name='主键', primary_key=True)
commentText = models.CharField(verbose_name='评论内容', max_length=100)
cuser = models.ForeignKey(verbose_name='评论用户', to=User, on_delete=models.CASCADE)
cblog = models.ForeignKey(verbose_name='评论文章', to=Blog, on_delete=models.CASCADE)
class Meta():
verbose_name = verbose_name_plural = '评论表'
修改之后界面如下:
此时界面显示就很友好了,也可以点击进入查看我们设置的过滤器和搜索框
- 查看设置效果
- 添加用户
- 添加博客种类
- 添加标签
- 添加一篇博客
可以发现此处选择外键时显示的是object对象,对后台操作来说并不友好,需要让其显示中文,在模型类下加入方法
以用户模型类为例:
from django.db import models
from django.utils import timezone
# Create your models here.
class User(models.Model):
id = models.AutoField(verbose_name='主键', primary_key=True)
account = models.CharField(verbose_name='账号', max_length=50)
password = models.CharField(verbose_name='密码', max_length=50)
nickname = models.CharField(verbose_name='暱称', max_length=50)
email = models.EmailField(verbose_name='邮箱', max_length=50)
createDatetime = models.DateTimeField(verbose_name='注册时间', default=timezone.now, blank=True)
gender = models.PositiveSmallIntegerField(verbose_name='性别', choices=((0,'男'),(1,'女')), default=0)
class Meta():
verbose_name = verbose_name_plural = '用户表'
def __str__(self):
return self.nickname
修改之后再下拉选择框,就可以看到标签名、种类名、用户暱称,return 返回的对象即显示的内容
- 增加评论
至此我们已经完成了后台管理界面的开发,可以在后台中对数据库进行相应的操作,并使界面友好显示》》》