1. 程式人生 > >網站開發(周四):項目後臺數據管理(實戰)

網站開發(周四):項目後臺數據管理(實戰)

ole 新增 Edito har 自動生成 配置 app 編輯器 image

前言: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”

技術分享圖片

技術分享圖片

至此,數據庫管理後臺開發完畢!

接下來,我們著力開發前端頁面。

網站開發(周四):項目後臺數據管理(實戰)