个人博客开发-02(基于Python-3.8 + Django-2.2)

4.Model层开发(下)

在之前完成了博客表结构创建,本篇将创建用户表结构和评论表结构;

  1. 用户表
列名 字段名 字段类型
主键 id AutoField
账号 account CharField
密码 password CharField
暱称 nickname CharField
邮箱 email EmailField
注册时间 createDatetime DateTimeField
性别 gender PositiveSmallIntegerField
  1. 评论表
列名 字段名 字段类型
主键 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 主键 即使不定义,在创建表的时候也会自动添加的

  1. 执行命令

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自由的认证和授权,接下来要进行后台管理界面开发
    在这里插入图片描述
  1. 注册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 可以根据列表中的列名查询数据

在这里插入图片描述

  1. 修改中文显示
  • 在任意一个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 = '评论表'

在这里插入图片描述
修改之后界面如下:
在这里插入图片描述
此时界面显示就很友好了,也可以点击进入查看我们设置的过滤器和搜索框

  1. 查看设置效果
  • 添加用户
    在这里插入图片描述
  • 添加博客种类
    在这里插入图片描述
  • 添加标签
    在这里插入图片描述
  • 添加一篇博客
    在这里插入图片描述
    可以发现此处选择外键时显示的是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 返回的对象即显示的内容

  • 增加评论
    在这里插入图片描述
    至此我们已经完成了后台管理界面的开发,可以在后台中对数据库进行相应的操作,并使界面友好显示》》》
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章