引言:專案開發流程:
-
需求分析(成員:架構師 、產品經理 、開發者組長)
在跟客戶談需求之前,會大致先了解客戶的需求,然后自己先設計一套比較好寫的方案,跟客戶溝通交流中引導客戶往我們之前想好的方案上面靠,形成一個初步的方案 -
專案設計(成員:架構師選擇專案的整體設計環境)
- 編程語言:Java、Python、PHP、C++等;
- 框架選擇:Django、Flask、SpringMVC等
- 資料庫選擇
- 主體資料庫:MySQL、SQL server、Oracle;
- 快取資料庫:redis/mongodb/memcacha;
- 功能劃分:將整個專案劃分成若干個功能模塊
- 找開發組組長開會:給每個組分發任務
- 專案報價/預算
- 技術類需要多少人、多少天、開發的設備成本
- 產品經理層面:售后、客服
- 公司層面確認,產品經理去跟客戶溝通,后續需要加功能,繼續加錢,
-
分組開發:組長找組員開會,安排各自的功能模塊
其實就是在架構師設計好的框架里面撰寫代碼,在寫代碼的時候,寫完需要自己先測驗是否有bug,如果是一些顯而易見的bug,你沒有避免而是直接交給了測驗部門測出來,那你可能就需要被扣績效了(一定要跟測驗組搞好關系); -
測驗:測驗部門組織成員對模塊、代碼進行單元、功能、壓力等測驗,
-
交付上線
- 交給對方的運維人員;
- 直接上線到我們的服務器上并收取一定的維護費用;
一、資料庫表的設計
一個專案中最重要的不是業務邏輯的書寫,而是前期的表結構的設計,只有將表設計好了,后續的功能書寫才能順利完成,否則會重復修改表,既影響開發的效率,也會導致寫好的業務代碼無效,
1. 用戶表:繼承AbstractUser
- 擴展欄位:
- phone:電話號碼
- avatar:用戶頭像
- create_time:創建時間
- 外鍵欄位:【一對一】個人站點表
2.個人站點表
- 業務欄位:
- site_name:站點名稱
- site_title 站點標題
- site_theme 站點樣式(存盤一個CSS/JS檔案)
3.文章標簽表
-
業務欄位:name 標簽名
-
外鍵欄位:【一對多】個人站點
4.文章類別表
- 業務欄位:name 類別名
- 外鍵欄位:【一對多】個人站點
5.文章表
-
業務欄位:
- title:文章標題
- desc :文章簡介/摘要
- content:文章內容
- create_time:發布時間
-
數據庫欄位設計優化:點贊數、點踩數、評論數(雖然這三個欄位可以從其他表里面可以ORM跨表查詢計算得出,但是頻繁跨表效率降低)
5. up_num:點贊數
6. down_num:點踩數
7. comment_num:評論數 -
外鍵欄位:
- 【一對多】個人站點
- 【多對多】文章標簽表
- 【一對多】文章分類
6.點贊點踩表:用來記錄哪個用戶給哪篇文章點了贊還是點了踩(多對多關聯表)
- 業務欄位:
- user(用戶的主鍵)
- article(文章的主鍵)
- is_up(普通欄位 BooleanFied)
7.文章評論表[comment]:用來記錄哪個用戶給哪篇文章寫了哪些評論內容
- 業務欄位:
- user(用戶的主鍵)
- article(文章的主鍵)
- content:CharField()
- comment_time:DateField()
- 自關聯
parent ForeignKey(to='Comment',null=True),ORM專門提供的自關聯寫法parent ForeignKey(to='self',null=True)
注:根評論、子評論的概念:根評論就是直接評論當前發布的內容的,子評論是評論別人的評論,
根評論與子評論是一對多的關系

二、資料庫表創建及同步
由于django自帶的sqlite資料庫對日期不敏感,所以我們換成MySQL
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
"""
先寫普通欄位,之后在寫外鍵欄位
"""
class UserInfo(AbstractUser):
phone = models.BigIntegerField(verbose_name='手機號',null=True)
# 用戶頭像,用戶不選頭像則用默認頭像
avatar = models.FileField(upload_to='avatar/',default='avatar/default.png')
"""
給avatar欄位傳檔案物件,該檔案會自動存盤到avatar檔案下
然后該欄位只保存檔案路徑avatar/default.png
"""
create_time = models.DateField(auto_now_add=True)
blog = models.OneToOneField(to='Blog',null=True,on_delete = models.CASCADE)
class Blog(models.Model):
site_name = models.CharField(verbose_name="站點名稱",max_length=32)
site_title = models.CharField(verbose_name="站點標題",max_length=32)
# 簡單模擬,認識樣式內部原理的操作
site_theme = models.CharField(verbose_name="站點樣式",max_length=64)
# 存盤用戶自定義的css/js檔案
class Category(models.Model):
name = models.CharField(verbose_name='文章分類',max_length=32)
blog = models.ForeignKey(to='Blog',null=True,on_delete = models.CASCADE)
class Tag(models.Model):
name = models.CharField(verbose_name='文章標簽',max_length=32)
blog = models.ForeignKey(to='Blog', null=True,on_delete = models.CASCADE)
class Article(models.Model):
title = models.CharField(verbose_name='文章標題',max_length=64)
desc = models.CharField(verbose_name='文章摘要',max_length=255)
# 文章內容有很多,一般情況下都是使用TextField
content = models.TextField(verbose_name='文章內容')
create_time = models.DateField(auto_now_add=True)
# 資料庫欄位設計優化
up_num = models.BigIntegerField(verbose_name='點贊數',default=0)
down_num = models.BigIntegerField(verbose_name='點踩數',default=0)
comment_num = models.BigIntegerField(verbose_name='評論數',default=0)
# 外鍵欄位
blog = models.OneToOneField(to='Blog', null=True,on_delete = models.CASCADE)
category = models.ForeignKey(to='Category', null=True,on_delete = models.CASCADE)
tags = models.ManyToManyField(to='Tag',
through='Article2Tag',
through_fields=('article','tag')
)
class Article2Tag(models.Model):
article = models.ForeignKey(to='Article',on_delete = models.CASCADE)
tag = models.ForeignKey(to='Tag',on_delete = models.CASCADE)
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() # 傳入布林值,存0/1
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=255)
comment_time = models.DateTimeField(verbose_name='評論時間',auto_now_add=True)
# 自關聯
parent = models.ForeignKey(to='self',null=True,on_delete = models.CASCADE)
# 有些評論就是根評論
BBS是一個前后端不分離的全堆疊個人博客專案,前端和后端都需要自己一步步的完成,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/256207.html
標籤:其他
上一篇:Static關鍵字
