337p人体粉嫩胞高清图片,97人妻精品一区二区三区在线 ,日本少妇自慰免费完整版,99精品国产福久久久久久,久久精品国产亚洲av热一区,国产aaaaaa一级毛片,国产99久久九九精品无码,久久精品国产亚洲AV成人公司
網易首頁 > 網易號 > 正文 申請入駐

這個Flask后端教程藏了3層架構,新手看完少走2年彎路

0
分享至


一個完整用戶系統的后端代碼,網上能搜到上萬份。但把「為什么這樣寫」講清楚的,十不足一。

這篇教程用Flask+MySQL搭了一套帶登錄、注冊、商品展示的全棧應用。代碼量不大,卻塞進了三層架構、會話管理和數據庫交互三種核心模式。對想從調包俠進階的開發者來說,這是塊不錯的墊腳石。

三層架構不是炫技,是分工

教程把系統拆成表現層、業務邏輯層、數據訪問層。表現層只管渲染模板和收發表單,業務層處理驗證和流程控制,數據層只和MySQL打交道。

這種拆法讓改需求變得便宜。想換前端框架?動表現層就行。數據庫從MySQL遷到PostgreSQL?改數據層的連接配置。各層之間用接口約定,而不是直接掏對方的數據結構。

Flask本身沒強制分層,所以新手常犯的錯誤是把SQL語句直接糊在路由函數里。教程里的products()路由雖然簡單,但已經做了示范:cursor的創建、查詢、關閉三步走,沒讓數據庫連接泄漏到全局。

會話管理:Flask的secret_key到底防什么

代碼里有一行容易被跳過:app.secret_key = 'secret-key'。這串字符是會話簽名用的私鑰,不是加密用戶數據的。

Flask的session默認存客戶端cookie里,內容是Base64編碼的JSON,任何人都能解碼看明文。secret_key的作用是生成HMAC簽名,讓服務端能識別cookie有沒有被篡改。攻擊者改了session里的customer_id,簽名對不上,服務端直接拒掉。

教程用的'secret-key'是占位符,生產環境得換成32字節以上的隨機串。2023年有團隊因為把密鑰提交到GitHub,被爬蟲批量薅走數據庫憑證,這類事故在OWASP報告里年年上榜。

登錄流程的防御細節

顧客登錄路由customer_login做了幾件事:POST請求時取表單數據,SQL參數化查詢防注入,驗證通過后往session寫用戶ID和姓名,失敗則回傳錯誤信息。

參數化查詢的%s不是字符串拼接,是MySQLdb的占位符機制。即使用戶輸入' OR '1'='1,也會被當作普通字符串處理,不會篡改查詢語義。這是2008年就成熟的防御手段,但2024年的漏洞庫里依然能搜到拼接SQL的新項目。

session里只存了customer_idcustomer_name,沒存密碼哈希。這是正確的——密碼驗證是一次性的,沒必要在內存里留著。有些框架的示例代碼會把整個用戶對象塞進session,既浪費帶寬又增加泄露面。

注冊校驗的邊界情況

注冊路由customer_signup的校驗邏輯值得細看。先檢查四個字段是否全填,再比對密碼和確認密碼,最后查郵箱是否已存在。三步校驗的順序有講究:前端該做的格式檢查(如郵箱正則)這里沒做,因為教程聚焦后端;但后端必須防的重復注冊和空值注入,一步沒落。

密碼比對用明文,教程注釋里應該提了生產環境要換bcrypt或Argon2。明文存儲是2010年前的做法,現在連CSDN都不再犯這個錯。如果這是教學代碼,需要加顯式警告;如果是項目代碼,屬于需要立即修復的漏洞。

查重郵箱的SQL用了SELECT id而不是SELECT *,這是個小優化。MySQL的覆蓋索引機制下,只查主鍵可以不走回表,雖然在這個數據量下差別微乎其微,但習慣養成后在大表上能省出數量級的時間。

模板渲染的權限暗示

登錄和注冊路由都傳了rolerole_key給模板,說明這套系統可能還有管理員或其他角色。模板層根據這些變量渲染不同的文案和跳轉鏈接,但真正的權限校驗應該在路由裝飾器或中間件里做。

教程沒展示管理員代碼,但從結構能推測:如果/admin路由只檢查session.get('admin_id'),那偽造session就能越權。完整的方案是每次請求都查數據庫驗證角色,或者把角色信息寫進JWT并設短過期時間。Flask-Login這類擴展封裝了這些細節,但理解原生實現有助于調bug。

MySQL連接的隱式坑

配置段把用戶名密碼寫死在代碼里,是教程的常見妥協。實際部署至少要用環境變量或密鑰管理服務,Docker場景下可以掛secret文件。

更隱蔽的問題是連接池。Flask-MySQLdb每次請求新建連接,小流量沒事,并發稍高就會打爆MySQL的max_connections。生產環境該換SQLAlchemy配連接池,或者把Flask跑在Gunicorn多進程模式下分擔壓力。教程沒提這些,但代碼結構預留了替換空間——數據層集中在幾個路由函數里,不像有些項目把SQL撒得滿屏都是。

數據庫名noeari看起來是隨機打的,這種命名在團隊協作時會制造困惑。測試環境用app_test、生產用app_prod是更清晰的約定,配合Flask的app.config.from_envvar可以按環境加載不同配置。

商品列表路由products加了is_available = 1的過濾條件,說明數據庫里可能有軟刪除或下架機制。沒展示的是這個字段誰有權修改——如果普通用戶能通過某個接口把自己買的商品標為不可用,就屬于業務邏輯漏洞。三層架構防不了這種錯,得靠測試用例覆蓋。

代碼里沒異常處理。MySQL連接失敗會拋OperationalError,直接暴露500頁面和堆棧信息。Flask的errorhandler裝飾器可以攔截這些異常,返回友好的錯誤頁并記日志。對新手教程來說,省略異常處理是合理的,但上線前必須補上。

session的持久化也沒提。默認cookie-based session在瀏覽器關閉后就消失,要實現「記住我」功能得換服務端存儲,比如Redis或數據庫表。Flask-Session擴展做了這層封裝,但理解cookie的局限性能幫你選對方案。

整個項目的代碼風格是教學式的:變量名直白,注釋分段清晰,沒有抽象過度。比如路由函數里直接操作cursor,沒封裝成DAO類。這種寫法在真實項目里會膨脹,但作為入門材料,讓讀者一眼看清數據流向比追求架構完美更重要。

如果你跟著敲完這套代碼,下一步該問自己:如果把MySQL換成MongoDB,哪些層要動?如果要做API版本控制,URL路由怎么設計?如果用戶量漲到十萬,session存儲怎么擴展?這些問題沒有標準答案,但三層架構給了你做決定的坐標系。

教程最后沒給部署指南,這是故意的——本地跑通和上線運維之間,還隔著Nginx配置、HTTPS證書、日志輪轉、監控告警十條街。那些是另一篇文章的篇幅,也是區分「能寫代碼」和「能扛系統」的分水嶺。

你現在手邊有類似的項目嗎?是直接把SQL寫在視圖函數里,還是已經拆出了獨立的數據層?

特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關推薦
熱點推薦
重磅|2026QS世界大學學科排名正式發布!

重磅|2026QS世界大學學科排名正式發布!

新航道官方號
2026-03-25 19:41:30
2026年財運大爆發!這三星座咸魚翻身!

2026年財運大爆發!這三星座咸魚翻身!

別人都叫我阿螫
2026-03-26 00:41:27
李連杰當面一句“我剛換了心臟”,謝苗臉唰一下白了,氣都不敢喘

李連杰當面一句“我剛換了心臟”,謝苗臉唰一下白了,氣都不敢喘

西樓知趣雜談
2026-02-28 21:36:48
新郎婚禮遲到2個小時,婆婆大方宣布:彩禮全退,新娘竟當場退婚

新郎婚禮遲到2個小時,婆婆大方宣布:彩禮全退,新娘竟當場退婚

白云故事
2025-03-21 17:50:07
美媒承認駐中東愛國者和薩德幾乎全軍覆沒,中式殺傷鏈喜事將近?

美媒承認駐中東愛國者和薩德幾乎全軍覆沒,中式殺傷鏈喜事將近?

共工之錨
2026-03-26 01:07:03
摩根大通CEO竟鼓吹: 打贏這場戰,才好跟中國對壘

摩根大通CEO竟鼓吹: 打贏這場戰,才好跟中國對壘

觀察者網
2026-03-25 16:56:10
美國懸賞1000萬美金,通緝一中國四川小伙,他到底做了什么?

美國懸賞1000萬美金,通緝一中國四川小伙,他到底做了什么?

泠泠說史
2026-03-16 18:10:44
周杰倫《太陽之子》詞曲拉胯MV平庸,歌迷:完全記不住旋律

周杰倫《太陽之子》詞曲拉胯MV平庸,歌迷:完全記不住旋律

光影新天地
2026-03-24 14:41:27
內部人士:NBA或將取消快船隊科懷·倫納德的“無效”合同

內部人士:NBA或將取消快船隊科懷·倫納德的“無效”合同

好火子
2026-03-25 23:51:43
突然爆火!和黃金一樣“一天一個價”,網友:終于不用放家里吃灰了

突然爆火!和黃金一樣“一天一個價”,網友:終于不用放家里吃灰了

山東教育電視臺
2026-03-25 21:09:16
英媒:阿森納在研究簽KK7的可能性,球員有意但大巴黎不放人

英媒:阿森納在研究簽KK7的可能性,球員有意但大巴黎不放人

懂球帝
2026-03-26 01:28:07
日本獻十九歲美貌藝伎拉攏印尼總統,卻改寫了歷史走向

日本獻十九歲美貌藝伎拉攏印尼總統,卻改寫了歷史走向

嘮叨說歷史
2026-03-23 10:26:21
西班牙隊面臨幸福煩惱!擁有巴薩+阿森納門神 世界杯主力門將4選1

西班牙隊面臨幸福煩惱!擁有巴薩+阿森納門神 世界杯主力門將4選1

球場沒跑道
2026-03-25 14:34:19
親戚借車從不加油,這次他故意空著油箱給她,她老公卻急了:我上次不是剛加了600塊的油嗎!

親戚借車從不加油,這次他故意空著油箱給她,她老公卻急了:我上次不是剛加了600塊的油嗎!

品讀時刻
2026-03-25 09:04:33
余承東:問界M6 24小時訂單突破60000臺 展車已到店

余承東:問界M6 24小時訂單突破60000臺 展車已到店

CNMO科技
2026-03-24 17:14:29
奧迪突然官宣:32.29萬起,新車正式上市

奧迪突然官宣:32.29萬起,新車正式上市

高科技愛好者
2026-03-25 23:08:37
丟失巴黎主力位置,德轉預熱舍瓦利耶身價:最低跌至2800萬歐

丟失巴黎主力位置,德轉預熱舍瓦利耶身價:最低跌至2800萬歐

懂球帝
2026-03-25 07:57:05
重大利好,全線爆拉了!

重大利好,全線爆拉了!

君臨財富
2026-03-25 15:41:25
上海一男子每天3包煙,持續幾十年!醫生:全身沒一根血管是好的

上海一男子每天3包煙,持續幾十年!醫生:全身沒一根血管是好的

上觀新聞
2026-03-24 13:32:07
趙心童:謝菲爾德已成為我在英國的家,很高興將世錦賽留在這里

趙心童:謝菲爾德已成為我在英國的家,很高興將世錦賽留在這里

懂球帝
2026-03-25 12:33:08
2026-03-26 02:00:49
野生運營
野生運營
懂點產品,懂點AI,正在努力給平淡日子搞點新花樣。
36文章數 0關注度
往期回顧 全部

科技要聞

紅極一時卻草草收場,Sora宣布正式關停

頭條要聞

伊朗:正在搜捕逃亡美軍

頭條要聞

伊朗:正在搜捕逃亡美軍

體育要聞

35歲替補門將,憑什么入選英格蘭隊?

娛樂要聞

張雪峰遺產分割復雜!是否立遺囑成關鍵

財經要聞

管濤:中東局勢如何影響人民幣匯率走勢?

汽車要聞

智己LS8放大招 30萬內8系旗艦+全線控底盤秀實力

態度原創

游戲
藝術
家居
親子
軍事航空

PS6升級動力遭質疑!玩家或當“PS5釘子戶”

藝術要聞

張雪峰走了,他公司所在的這棟樓高177.8米,耗資超10億!

家居要聞

輕奢堇天府 小資情調

親子要聞

智利幼兒教育覆蓋率僅43%,專家吁提升投資與優先地位

軍事要聞

伊朗重申非交戰國家船只可安全通過霍爾木茲海峽

無障礙瀏覽 進入關懷版