個人博客開發-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 返回的對象即顯示的內容

  • 增加評論
    在這裏插入圖片描述
    至此我們已經完成了後臺管理界面的開發,可以在後臺中對數據庫進行相應的操作,並使界面友好顯示》》》
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章