網站開發(周四):項目後臺數據管理(實戰)
前言:Django是通過模型(Model)來操作數據庫,Django能自動根據模型代碼中定義的類自動生成相應數據庫表,也即Django自動幫我們把代碼轉化成SQL語句,然後再執行SQL語句生成相應數據庫表。每個模型都是django.db.models.Model的子類,每個模型在Django中的存在形式為一個Python類,模型裏的每個類代表數據庫中的一個表,模型的每個字段(屬性)代表數據表的某一列。並且,Django將自動為你生成數據庫訪問API。
第一、創建6張表(根據數據庫設計需求分析,我們需求存儲六種數據:文章分類、文章、文章標簽、輪播圖、推薦位、友情鏈接,每種數據一個表)
1、編寫6張表對應6個類的Python代碼
from django.db import models
from django.contrib.auth.models import User
# 導入Django自帶用戶模塊
# 文章分類
class Category(models.Model):
name = models.CharField(‘博客分類‘, max_length=100)
index = models.IntegerField(default=999, verbose_name=‘分類排序‘)
class Meta:
verbose_name = ‘博客分類‘
verbose_name_plural = verbose_name
def __str__(self):
return self.name
# 文章標簽
class Tag(models.Model):
name = models.CharField(‘文章標簽‘, max_length=100)
class Meta:
verbose_name = ‘文章標簽‘
verbose_name_plural = verbose_name
def __str__(self):
return self.name
# 推薦位
class Tui(models.Model):
name = models.CharField(‘推薦位‘, max_length=100)
class Meta:
verbose_name = ‘推薦位‘
verbose_name_plural = verbose_name
def __str__(self):
return self.name
# 文章
class Article(models.Model):
title = models.CharField(‘標題‘, max_length=70)
excerpt = models.TextField(‘摘要‘, max_length=200, blank=True)
category = models.ForeignKey(Category, on_delete=models.DO_NOTHING, verbose_name=‘分類‘, blank=True, null=True)
# 使用外鍵關聯分類表與分類是一對多關系
tags = models.ManyToManyField(Tag, verbose_name=‘標簽‘, blank=True)
# 使用外鍵關聯標簽表與標簽是多對多關系
img = models.ImageField(upload_to=‘article_img/%Y/%m/%d/‘, verbose_name=‘文章圖片‘, blank=True, null=True)
body = models.TextField()
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name=‘作者‘)
"""
文章作者,這裏User是從django.contrib.auth.models導入的。
這裏我們通過 ForeignKey 把文章和 User 關聯了起來。
"""
views = models.PositiveIntegerField(‘閱讀量‘, default=0)
tui = models.ForeignKey(Tui, on_delete=models.DO_NOTHING, verbose_name=‘推薦位‘, blank=True, null=True)
created_time = models.DateTimeField(‘發布時間‘, auto_now_add=True)
modified_time = models.DateTimeField(‘修改時間‘, auto_now=True)
class Meta:
verbose_name = ‘文章‘
verbose_name_plural = ‘文章‘
def __str__(self):
return self.title
# 輪播圖
class Banner(models.Model):
text_info = models.CharField(‘標題‘, max_length=50, default=‘‘)
img = models.ImageField(‘輪播圖‘, upload_to=‘banner/‘)
link_url = models.URLField(‘圖片鏈接‘, max_length=100)
is_active = models.BooleanField(‘是否是active‘, default=False)
def __str__(self):
return self.text_info
class Meta:
verbose_name = ‘輪播圖‘
verbose_name_plural = ‘輪播圖‘
# 友情鏈接
class Link(models.Model):
name = models.CharField(‘鏈接名稱‘, max_length=20)
linkurl = models.URLField(‘網址‘, max_length=100)
def __str__(self):
return self.name
class Meta:
verbose_name = ‘友情鏈接‘
verbose_name_plural = ‘友情鏈接‘
2、輸入兩行命令,執行6個類代碼,更新數據庫
(mysite2019) bash-3.2$ python manage.py makemigrations (mysite2019) bash-3.2$ python manage.py migrate
第二、再次配置後臺數據庫管理參數
1、在應用APP下的admin.py文件裏對數據庫表先進行註冊
from django.contrib import admin from .models import Banner, Category, Tag, Tui, Article, Link #導入需要管理的數據庫表 @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): list_display = (‘id‘, ‘category‘, ‘title‘, ‘tui‘, ‘user‘, ‘views‘, ‘created_time‘) # 文章列表裏顯示想要顯示的字段 list_per_page = 50 # 滿50條數據就自動分頁 ordering = (‘-created_time‘,) #後臺數據列表排序方式 list_display_links = (‘id‘, ‘title‘) # 設置哪些字段可以點擊進入編輯界面 @admin.register(Banner) class BannerAdmin(admin.ModelAdmin): list_display = (‘id‘, ‘text_info‘, ‘img‘, ‘link_url‘, ‘is_active‘) @admin.register(Category) class CategoryAdmin(admin.ModelAdmin): list_display = (‘id‘, ‘name‘, ‘index‘) @admin.register(Tag) class TagAdmin(admin.ModelAdmin): list_display = (‘id‘, ‘name‘) @admin.register(Tui) class TuiAdmin(admin.ModelAdmin): list_display = (‘id‘, ‘name‘) @admin.register(Link) class LinkAdmin(admin.ModelAdmin): list_display = (‘id‘, ‘name‘,‘linkurl‘)
2、登錄管理後臺http://127.0.0.1:8000/admin/
第三、使用DjangoUeditor富文本編輯器添加數據
1、下載並解壓安裝DjangoUeditor包到mystie2019項目根目錄
2、在mysite2019/settings.py裏註冊APP,在INSTALLED_APPS裏添加‘DjangoUeditor‘,
3、在mysite2019/urls.py裏添加url
4、修改blog/models.py裏Article表裏的body字段,刪除原來字段替換為富文本編輯器渲染的字段
提醒:新增代碼的imagePath="upimg/", filePath="upfile/" 這兩個是圖片和文件上傳的路徑,我們上傳文件,會自動上傳到項目根目錄media文件夾下對應的upimg和upfile目錄裏,所以在根目錄自定義創建media文件夾和對應的upimg和upfile文件夾。
5、在mysite2019/settings中添加media索引路徑
錯誤:上面步驟完成後,我們啟動項目,進入文章發布頁面,提示出錯。
修復:主要是DjangoUeditor對最新版本與Django兼容不佳,打開DjangoUeditor/widgets.py,在render函數中增加“, renderer=None”
至此,數據庫管理後臺開發完畢!
接下來,我們著力開發前端頁面。
網站開發(周四):項目後臺數據管理(實戰)