bbs項目前期準備和表設計

来源:https://www.cnblogs.com/suncolor/archive/2022/10/03/16751317.html
-Advertisement-
Play Games

一、前期準備 1.新建一個django項目 2.連接mysql資料庫(註意需要在init文件裡面書寫import pymysql),告訴django使用pymysql連接資料庫 3.靜態文件路徑在settings里配置一下,並且在項目文件夾下新建一個靜態文件夾 二、bbs項目表設計 做一個項目最首要 ...


一、前期準備

1.新建一個django項目
2.連接mysql資料庫(註意需要在init文件裡面書寫import pymysql),告訴django使用pymysql連接資料庫
3.靜態文件路徑在settings里配置一下,並且在項目文件夾下新建一個靜態文件夾

二、bbs項目表設計

做一個項目最首要的表的設計,一個表設計不好,後續開發的地基就不牢!

"""
1.用戶表:要繼承AbstractUser類
擴展欄位:
	phone:用戶電話
	avatar:用戶頭像
	create_time:創建時間

2.個人站點表:用戶輸入什麼url就跳轉到對應的站點
欄位:
	site_name:站點名稱
	site_title:站點標題
	site_theme:站點主題

3.文章表:
欄位:
	title:文章標題
	desc:文章簡介
	content:文章內容
	create_time:發佈時間
下述三個欄位雖然可以從其他表中獲取,但是頻繁的跨表查詢效率較低,
可以直接在文章表裡設計該欄位,點贊數+1時只要同步給文章表裡的該欄位+1就行!(資料庫欄位優化)
	up_num:點贊數 
	down_num:點踩數
	comment_num:評論數

4.文章分類表:
欄位:
	name:分類名

5.文章標簽表:
欄位:
	name:標簽名

6.點贊點踩表:記錄了哪個用戶給哪個文章點贊還是點踩
欄位:
	user:用戶主鍵值  ForeignKey(to='UserInfo')
	article:文章主鍵值 ForeignKey(to='Article')
	is_up:是否點贊(布爾值欄位類型)
	is_down:是否點踩(布爾值欄位類型)

7.評論表:記錄哪個用戶給哪個文章評論了什麼內容
欄位:
	user:用戶 ForeignKey(to='UserInfo')
	article:文章 ForeignKey(to='Article')
	content:評論內容
	comment_time:評論時間
	# 評論內容有跟評論和子評論的區別,跟評論是直接評論文章的,子評論是評論跟評論的
	parent:自關聯  ForeignKey(to='Comment',null=True) to裡面也可以寫成self表示自己關聯自己
"""

七張表之間的關係

1.用戶表和個人站點表:一對一關係,外鍵建在用戶表

2.個人站點表和文章標簽表:一對多關係,外鍵建在文章標簽表

3.個人站點表和文章分類 表:一對多關係,外鍵建在文章分類表

4.個人站點和文章表:一對多關係,外鍵建在文章表

5.文章表和文章標簽表:多對多關係,外鍵建在文章表

6.文章表和文章分類表:一對多關係,外鍵建在文章分類表

接下來,我們就可以在models.py里創建對應的表了!

bbs項目表創建源碼
from django.db import models
from django.contrib.auth.models import AbstractUser


# Create your models here.
# 1、用戶表:繼承AbstractUser類,需要先導入這個類
class UserInfo(AbstractUser):
    phone = models.BigIntegerField(verbose_name='電話',null=True)
    avatar = models.FileField(upload_to='avatar/',default='avatar/default.png',verbose_name='頭像')
    """
    給avatar欄位傳文件對象,該文件會自動保存到upload_to='avatar/'指定的文件夾下,這個文件夾需要自己在項目文件夾下創建
    資料庫里的avatar欄位只保存文件路徑,同時可以設置一個預設頭像
    """
    create_time = models.DateTimeField(auto_now_add=True,verbose_name='創建時間')
    # 用戶表與個人站點表一對一關係,外鍵建在用戶表
    blog = models.OneToOneField(to='Blog',on_delete=models.CASCADE,null=True)

# 2、個人站點表
class Blog(models.Model):
    site_name = models.CharField(verbose_name='站點名稱',max_length=64)
    site_title = models.CharField(verbose_name='站點標題',max_length=64)
    site_theme = models.CharField(verbose_name='站點主題',max_length=256) # 存的是css、js樣式的路徑

# 3、文章表
class Article(models.Model):
    title = models.CharField(verbose_name='文章標題',max_length=64)
    desc = models.CharField(verbose_name='文章摘要',max_length=256)
    content = models.TextField(verbose_name='文章內容')
    create_time = models.DateTimeField(verbose_name='創建時間',auto_now_add=True)
    # 資料庫欄位設計優化
    up_num = models.IntegerField(verbose_name='點贊數',default=0)
    down_num = models.IntegerField(verbose_name='點踩數',default=0)
    comment_num = models.IntegerField(verbose_name='評論數',default=0)
    # 個人站點表和文章表一對多關係,外鍵建在文章表
    blog = models.ForeignKey(to='Blog',on_delete=models.CASCADE,null=True)
    # 文章表和文章分類表是一對多關係,外鍵建在文章表
    category = models.ForeignKey(to='Category',null=True,on_delete=models.CASCADE)
    # 多對多關係表的外鍵
    tag = models.ManyToManyField(to='Tag',through='Article2Tag',through_fields=('article','tag'))
    # 通過Article2Tag這個張表查article就把Article2Tag里的article欄位放前面

# 文章表和標簽表的多對多表創建,採用的是半自動的方式,利用擴展自動和查詢
class Article2Tag(models.Model):
    article = models.ForeignKey(to='Article',null=True,on_delete=models.CASCADE)
    tag = models.ForeignKey(to='Tag',null=True,on_delete=models.CASCADE)


# 4、文章分類表
class Category(models.Model):
    name = models.CharField(verbose_name='分類名',max_length=32)
    # 個人站點表和文章分類表是一對多關係,外鍵建在文章分類表
    blog = models.ForeignKey(to='Blog',null=True,on_delete=models.CASCADE)


# 5、文章標簽表
class Tag(models.Model):
    name = models.CharField(verbose_name='標簽名',max_length=32)
    # 個人站點表和文章標簽表是一對多關係,外鍵建在文章標簽表
    blog = models.ForeignKey(to='Blog',null=True,on_delete=models.CASCADE)

# 6、點贊點踩表
class UpAndDown(models.Model):
    user = models.ForeignKey(to='UserInfo',on_delete=models.CASCADE)
    article = models.ForeignKey(to='Article',on_delete=models.CASCADE)
    is_up = models.BooleanField()
    is_down = models.BooleanField()


# 7、評論表
class Comment(models.Model):
    user = models.ForeignKey(to='UserInfo',on_delete=models.CASCADE)
    article = models.ForeignKey(to='Article',on_delete=models.CASCADE)
    content = models.CharField(verbose_name='評論內容',max_length=256)
    create_time = models.DateTimeField(verbose_name='評論時間',auto_now_add=True)
    # 子評論,自關聯
    parent = models.ForeignKey(to='self',on_delete=models.CASCADE)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 背景: 這兩天看了一個視頻,介紹什麼是C/S,什麼是B/S,總覺得很奇怪。裡面說到只要是app的,都是client-server,而網頁端,如h5網站,web網站,小程式等都是brower-server架構。感覺這種劃分非常“反直覺”,因為現在的軟體都是多端,連接在“同一個”伺服器下為使用者提供網路 ...
  • 一篇文章帶你掌握主流基礎框架——Spring 這篇文章中我們將會介紹Spring的框架以及本體內容,包括核心容器,註解開發,AOP以及事務等內容 那麼簡單說明一下Spring的必要性: Spring技術是JavaEE開發的必備技能,企業開發技術選型率高達90%! Spring可以幫助簡化開發,降低企 ...
  • 一、背景 使用django3 進行開發時,由於項目前端頁面使用iframe框架,瀏覽器錯誤提示信息如下 Refused to display 'http://127.0.0.1:8000/' in a frame because it set 'X-Frame-Options' to 'deny'. ...
  • 事務是資料庫操作最基本的單元,是邏輯上的一組操作,這一組操作在同一個會話中要麼都執行成功,要麼都失敗,這也是事務的最基本特性--原子性。事務的作用是為了保證系統數據的正確性,因此,資料庫應用程式中是會經常用到事務。下麵就說一下在Spring里怎麼做事務操作。 Spring事務使用方式 Spring事 ...
  • 參考自以下鏈接處:http://t.csdn.cn/4ws4t 下麵直接看代碼,代碼中會有註意事項。 `timescale 1ns/10ps module traffic_lights ; reg clk ; reg red ; reg amber ; reg green ; //產生時鐘脈衝的al ...
  • 大家好,我是沙漠盡頭的狼。 最近幾天在看一本Go的書籍,看了100來頁,感覺不錯,分享給大家​。​ 書籍基本信息 書籍信息: 書名:Go Web編程 作 者:(新加坡)鄭兆雄(Sau Sheong Chang) 著;黃健巨集 譯 著作 定 價:79 出 版 社:人民郵電出版社 出版日期:2017年12 ...
  • 簡述 類型:結構型 目的:解決介面不相容問題。 話不多說,看個案例吧。 優化案例 最初版v0 在真實的開發場景中,系統的每個模塊都是分配給不同的團隊或個人來開發的。這使得事前溝通變得尤為重要,且溝通問題也時有發生。現在公司有兩個模塊無法相容,難道只能重寫其中的一個嗎? class User { St ...
  • 編碼 ASCII:用八位二進位的低七位,一共規定了128個字元的編碼,一個位元組表示一個字元, 擴展ASCII:第八位為1,規定了以1開頭的128個字元 Unicode:固定大小的編碼,通常兩個位元組表示一個字元,字母和漢字統一用兩個位元組,浪費空間 UTF-8:是一種變長的編碼方式。字母用一個位元組,漢字 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...