Flask租房項目總結

来源:https://www.cnblogs.com/CodeWorkerMan/archive/2019/02/27/10447660.html
-Advertisement-
Play Games

Flask租房項目總結 分析需求文檔,需要完成的功能模塊有: 登陸註冊 首頁展示,首頁搜索 詳情展示,訂單預定 個人中心的用戶信息修改 我的訂單展示,客戶訂單展示 我的房源,上傳圖片和實名認證 登陸註冊 首頁展示,首頁搜索 詳情展示,訂單預定 個人中心的用戶信息修改 我的訂單展示,客戶訂單展示 我的 ...


該Flask項目歷時3天,開發小組6人,目的是開發一個租房web項目,該項目採用前後端分離模式。

Flask租房項目總結

  1. 分析需求文檔,需要完成的功能模塊有:

    • 登陸註冊

    • 首頁展示,首頁搜索

    • 詳情展示,訂單預定

    • 個人中心的用戶信息修改

    • 我的訂單展示,客戶訂單展示

    • 我的房源,上傳圖片和實名認證

  2. 該項目是前後端分離的項目,後端需要根據介面文檔的要求,對資料庫進行增加,修改,刪除,查詢的操作

  3. 根據需求分析E-R圖,為構建模型類做準備:

    1. 模型類構建完畢,進行資料庫遷移和測試數據的添加

    2. 小組項目分工,將項目分為6個模塊,每個模塊相對獨立,小組成員獨立完成。每過半日,進行臨時小組會議,彙報進度和遇到的問題。

    3. 項目中犯的錯誤:

      • 沒有嚴格按照介面文檔的url路徑寫介面。比如介面路徑:/api/v1.0/houses/<int:house_id>,為了方便在Blueprint中添加了url_preifx=/api/v1.0/,導致前端靜態文件路徑出錯,不得不修改前端路徑,犯了大忌。當然也可以創建2個藍圖對象來解決問題,一個用來返回靜態資源,一個用來做視圖函數,以下採取這種方法。

      • 測試功能時,因為客戶訂單沒有數據,誤以為代碼有bug,在客戶訂單介面上花費太長時間。

      • 項目分工不合適,組內成員代碼水平差異大,導致工作壓力不均衡。

      • 沒有寫任何單元測試。

    4. 項目遇到的bug:

      • avtar_url網址返回給前端時沒有加上七牛雲地址

      • query抄寫為quary

      • 時間單位直接相減

      • 返回數據格式不正確等

    5. 項目邏輯實現:

      1. 創建藍圖對象,為了返回靜態資源和視圖函數:

        • # 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")
      2. 註冊:

        • 獲取前端發送的UUID

        • 藉助captcha生成圖片驗證碼,儲存在redis中

        • 返回帶有圖片驗證碼的響應體對象

        • 前端點擊發送簡訊驗證碼,獲取前端發送的UUID,image_code,mobile

        • 檢驗數據,使用UUID取出驗證碼和image_code做對比

        • 藉助雲通訊發送簡訊,將簡訊內容sms_code存儲在redis中

        • 前端點擊註冊按鈕,獲取前端發送的mobile,sms_code,password

        • 檢驗數據,對比sms_code和redis中存儲簡訊內容

        • 初始化user模型對象,添加一條新的用戶記錄

        • 實現狀態保持

      3. 登錄/退出登錄:

        • 獲取mobile,password參數,檢驗參數

        • 查詢對應的用戶對象,實現狀態保持

        • 退出登錄即是清除session中存儲的狀態保持

      4. 我發佈的房屋列表:

        • 獲取登錄的user_id

        • 查詢用戶所有的房屋對象,返回房屋信息

      5. 發佈房源/上傳房源圖片

        • 獲取前端發送的參數,並做參數校檢

        • 在房屋-設施多對多關係表添加記錄


          house.facilities.append(facility_list)
        • 保存house模型對象到資料庫

        • 獲取前端發送的圖片,根據house_id判斷房屋是否存在

        • 上傳圖片在七牛雲儲存

        • 房屋圖片表存儲圖片相對地址,返回數據

      6. 首頁展示內容:

        • 以訂單量降序的方式查詢房屋


          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]
      7. 搜索房屋列表

        • 獲取前端參數: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
      8. 下單/預定房間

        • 獲取參數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表,返回結果

      9. 獲取訂單列表

        • 獲取當前角色標識,[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()
      10. 接單/拒單/評論訂單(略)

      11. 用戶中心(略)

      12. 項目註意點:

        • 大量的參數檢驗,不同功能模塊,前端、後端內都要進行參數檢驗,保證參數準確性。

        • 通過將每一次查詢後的結果儲存在redis中可以提高用戶下次查詢相同結果的效率,能夠提高用戶體驗。

        •  

 


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

-Advertisement-
Play Games
更多相關文章
  • 傳統的非同步解決方案採用回調函數和事件監聽的方式,而這裡主要記錄兩種非同步編程的新方案: ES6的新語法Promise ES2017引入的async函數 Generator函數(略) Promise的含義 是非同步變成的一種解決方案,屬於ES6的語法。 簡單的說,promise就是一個容器,裡面包含著一個 ...
  • 1、word書寫blog 使用word的blog模板,可以上傳到博客園的隨筆上去。上傳後,在word繼續編輯,再上傳的話,就會覆蓋掉同一篇隨筆。 上傳配置 如果找不到模板的話,可以在上圖中的搜索框內,搜索‘博客文章’,聯網的話,一定能搜到。 如果從未添加過賬戶的話,點擊下圖中的‘新建’按鈕。 賬戶信 ...
  • var common = {}; /** * [pageMask ajax統一請求] * @return {[type]} [description] */ common.pageMask = function() { $.ajaxSetup({ beforeSend: function(xhr) ... ...
  • 微信分享需要手機掃描二維碼,需要對url進行編碼。在https協議下,掃描二維碼時,瀏覽器打不開可能時安全證書導致的。 ...
  • 此處有兩大坑: 1、下載easemob-websdk此npm包時,並沒有下載strophe.js、crypto-js、underscore這三個包,需要自己手動下載。 2、如下方標紅位置所示,需要自己手動改動npm包內代碼才可使用。 一、安裝npm包 1、npm install easemob-we ...
  • 恢復內容開始 恢復內容結束 ...
  • GitHub : "https://github.com/WozHuang/mp extend" 相關文章 : "小程式全局狀態管理,在頁面中獲取globalData和使用globalSetData" "通過頁面預載入(preload)提升小程式的響應速度" 主要目標 小程式本身的坑不少,開發時免不 ...
  • 1、配置此路由的標題title 2、配置組件是否需要緩存 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...