Flask租房項目總結 分析需求文檔,需要完成的功能模塊有: 登陸註冊 首頁展示,首頁搜索 詳情展示,訂單預定 個人中心的用戶信息修改 我的訂單展示,客戶訂單展示 我的房源,上傳圖片和實名認證 登陸註冊 首頁展示,首頁搜索 詳情展示,訂單預定 個人中心的用戶信息修改 我的訂單展示,客戶訂單展示 我的 ...
該Flask項目歷時3天,開發小組6人,目的是開發一個租房web項目,該項目採用前後端分離模式。
Flask租房項目總結
-
分析需求文檔,需要完成的功能模塊有:
-
登陸註冊
-
首頁展示,首頁搜索
-
詳情展示,訂單預定
-
個人中心的用戶信息修改
-
我的訂單展示,客戶訂單展示
-
我的房源,上傳圖片和實名認證
-
-
該項目是前後端分離的項目,後端需要根據介面文檔的要求,對資料庫進行增加,修改,刪除,查詢的操作
-
根據需求分析E-R圖,為構建模型類做準備:
-
模型類構建完畢,進行資料庫遷移和測試數據的添加
-
小組項目分工,將項目分為6個模塊,每個模塊相對獨立,小組成員獨立完成。每過半日,進行臨時小組會議,彙報進度和遇到的問題。
-
項目中犯的錯誤:
-
沒有嚴格按照介面文檔的url路徑寫介面。比如介面路徑:/api/v1.0/houses/<int:house_id>,為了方便在Blueprint中添加了url_preifx=/api/v1.0/,導致前端靜態文件路徑出錯,不得不修改前端路徑,犯了大忌。當然也可以創建2個藍圖對象來解決問題,一個用來返回靜態資源,一個用來做視圖函數,以下採取這種方法。
-
測試功能時,因為客戶訂單沒有數據,誤以為代碼有bug,在客戶訂單介面上花費太長時間。
-
項目分工不合適,組內成員代碼水平差異大,導致工作壓力不均衡。
-
沒有寫任何單元測試。
-
-
項目遇到的bug:
-
avtar_url網址返回給前端時沒有加上七牛雲地址
-
query抄寫為quary
-
時間單位直接相減
-
返回數據格式不正確等
-
-
項目邏輯實現:
-
創建藍圖對象,為了返回靜態資源和視圖函數:
-
# 1. 創建藍圖
html_blu = Blueprint("html", __name__)
# 訪問靜態文件
@html_blu.route('/<path:file_name>')
def get_html_file(file_name):
# 判斷是否是網站的Logo,如果不是,添加首碼
if file_name != "favicon.ico":
file_name = "html/" + file_name
return current_app.send_static_file(file_name) -
# 創建 /api/v1.0 介面的藍圖
api_blu = Blueprint("api", __name__, url_prefix="/api/v1.0")
-
-
註冊:
-
獲取前端發送的UUID
-
藉助captcha生成圖片驗證碼,儲存在redis中
-
返回帶有圖片驗證碼的響應體對象
-
前端點擊發送簡訊驗證碼,獲取前端發送的UUID,image_code,mobile
-
檢驗數據,使用UUID取出驗證碼和image_code做對比
-
藉助雲通訊發送簡訊,將簡訊內容sms_code存儲在redis中
-
前端點擊註冊按鈕,獲取前端發送的mobile,sms_code,password
-
檢驗數據,對比sms_code和redis中存儲簡訊內容
-
初始化user模型對象,添加一條新的用戶記錄
-
實現狀態保持
-
-
登錄/退出登錄:
-
獲取mobile,password參數,檢驗參數
-
查詢對應的用戶對象,實現狀態保持
-
退出登錄即是清除session中存儲的狀態保持
-
-
我發佈的房屋列表:
-
獲取登錄的user_id
-
查詢用戶所有的房屋對象,返回房屋信息
-
-
發佈房源/上傳房源圖片
-
獲取前端發送的參數,並做參數校檢
-
在房屋-設施多對多關係表添加記錄
house.facilities.append(facility_list) -
保存house模型對象到資料庫
-
獲取前端發送的圖片,根據house_id判斷房屋是否存在
-
上傳圖片在七牛雲儲存
-
房屋圖片表存儲圖片相對地址,返回數據
-
-
首頁展示內容:
-
以訂單量降序的方式查詢房屋
houses = House.query.order_by(House.order_count.desc()).limit(constants.HOME_PAGE_MAX_HOUSES).all()
houses_list = [house.to_basic_dict() for house in houses]
-
-
搜索房屋列表
-
獲取前端參數:aid,start_time,end_time,sort_key,page
-
參數檢驗,結束時間要大於開始時間
-
查詢對象和增加過濾條件
house_query = House.query
filters = []
filters.append(House.area_id == area_id) -
過濾已預定的房屋
conflict_order = Order.query.filter(Order.begin_date<=end_date, Order.end_date>=start_date).all()
conflict_house_id = [order.house_id for order in conflict_order]
filters.append(House.id.notin_(conflict_house_id)) -
根據篩選條件進行排序
house_query = house_query.
filter(*[filters]).order_by(House.order_count.desc()) -
進行分頁展示,返回數據
paginate = house_query.
paginate(int(page),constants.HOUSE_LIST_PAGE_CAPACITY, False)
houses = paginate.items
total_page = paginate.pages
-
-
下單/預定房間
-
獲取參數user_id,house_id,start_date,end_date,檢驗參數
-
查詢房屋對象是否存在,判斷用戶是否是房東,判斷房屋是否有衝突訂單
filters = [Order.house_id == house_id,
Order.begin_date < end_date, Order.end_date > begin_date]
count = Order.query.filter(*filters).count() -
生成訂單模型,存儲在order表,返回結果
-
-
獲取訂單列表
-
獲取當前角色標識,[custom,landlord]
-
房客訂單查詢
orders = Order.query.filter(Order.user_id
== user_id).order_by(Order.create_time.desc()).all() -
房東訂單查詢
houses = House.query.filter(House.user_id == user_id).all()
houses_id = [house.id for house in houses]
orders = Order.query.filter(Order.house_id in_(houses_id)).filter_by(Order.create_time.desc()).all()
-
-
接單/拒單/評論訂單(略)
-
用戶中心(略)
-
項目註意點:
-
大量的參數檢驗,不同功能模塊,前端、後端內都要進行參數檢驗,保證參數準確性。
-
通過將每一次查詢後的結果儲存在redis中可以提高用戶下次查詢相同結果的效率,能夠提高用戶體驗。
-
-
-
-