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 返回的對象即顯示的內容
- 增加評論
至此我們已經完成了後臺管理界面的開發,可以在後臺中對數據庫進行相應的操作,並使界面友好顯示》》》