国产av一二三区|日本不卡动作网站|黄色天天久久影片|99草成人免费在线视频|AV三级片成人电影在线|成年人aV不卡免费播放|日韩无码成人一级片视频|人人看人人玩开心色AV|人妻系列在线观看|亚洲av无码一区二区三区在线播放

網(wǎng)易首頁 > 網(wǎng)易號 > 正文 申請入駐

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

0
分享至


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

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

三層架構(gòu)不是炫技,是分工

教程把系統(tǒng)拆成表現(xiàn)層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問層。表現(xiàn)層只管渲染模板和收發(fā)表單,業(yè)務(wù)層處理驗(yàn)證和流程控制,數(shù)據(jù)層只和MySQL打交道。

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

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

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

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

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

教程用的'secret-key'是占位符,生產(chǎn)環(huán)境得換成32字節(jié)以上的隨機(jī)串。2023年有團(tuán)隊因?yàn)榘衙荑€提交到GitHub,被爬蟲批量薅走數(shù)據(jù)庫憑證,這類事故在OWASP報告里年年上榜。

登錄流程的防御細(xì)節(jié)

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

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

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

注冊校驗(yàn)的邊界情況

注冊路由customer_signup的校驗(yàn)邏輯值得細(xì)看。先檢查四個字段是否全填,再比對密碼和確認(rèn)密碼,最后查郵箱是否已存在。三步校驗(yàn)的順序有講究:前端該做的格式檢查(如郵箱正則)這里沒做,因?yàn)榻坛叹劢购蠖?;但后端必須防的重?fù)注冊和空值注入,一步?jīng)]落。

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

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

模板渲染的權(quán)限暗示

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

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

MySQL連接的隱式坑

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

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

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

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

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

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

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

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

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

你現(xiàn)在手邊有類似的項(xiàng)目嗎?是直接把SQL寫在視圖函數(shù)里,還是已經(jīng)拆出了獨(dú)立的數(shù)據(jù)層?

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

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.

相關(guān)推薦
熱點(diǎn)推薦
演員李萍官宣當(dāng)姥姥,飛美國陪女兒待產(chǎn)心焦急,外孫漂亮白里透紅

演員李萍官宣當(dāng)姥姥,飛美國陪女兒待產(chǎn)心焦急,外孫漂亮白里透紅

離離言幾許
2026-03-23 20:20:53
馬震任重慶市委組織部部長

馬震任重慶市委組織部部長

上觀新聞
2026-03-25 21:24:26
官方發(fā)文!李湘風(fēng)波終于迎來結(jié)局,讓她懷二胎的男人,能松口氣了

官方發(fā)文!李湘風(fēng)波終于迎來結(jié)局,讓她懷二胎的男人,能松口氣了

悅君兮君不知
2026-03-25 02:41:14
47票贊成、53票反對!限制特朗普戰(zhàn)爭權(quán)力的議案再遭否決,民主黨議員:美國士兵正在犧牲,國會卻在隱瞞

47票贊成、53票反對!限制特朗普戰(zhàn)爭權(quán)力的議案再遭否決,民主黨議員:美國士兵正在犧牲,國會卻在隱瞞

每日經(jīng)濟(jì)新聞
2026-03-25 14:09:05
回鄉(xiāng)遇同學(xué),得知他退休金1600,我謊稱2500,幾日后一堆包裹上門

回鄉(xiāng)遇同學(xué),得知他退休金1600,我謊稱2500,幾日后一堆包裹上門

人間百態(tài)大全
2026-03-24 07:05:03
一家子全是美籍,卻還在國內(nèi)“撈金”,年賺4億,賬上還存有130億

一家子全是美籍,卻還在國內(nèi)“撈金”,年賺4億,賬上還存有130億

云景侃記
2026-02-26 23:05:22
深夜,中東突發(fā)!霍爾木茲,伊朗開始收錢了!

深夜,中東突發(fā)!霍爾木茲,伊朗開始收錢了!

中國基金報
2026-03-25 00:18:04
善惡有報,移居英國僅2年,57歲吳秀波再迎噩耗,步入李易峰后塵

善惡有報,移居英國僅2年,57歲吳秀波再迎噩耗,步入李易峰后塵

有范又有料
2025-12-17 14:54:06
豐田賽那SIENNA終于大降價!最高優(yōu)惠6.6萬,是時候抄底入手了?

豐田賽那SIENNA終于大降價!最高優(yōu)惠6.6萬,是時候抄底入手了?

優(yōu)視汽車
2026-03-25 10:30:36
不打了!再見莫蘭特!NBA又一球星賽季報銷

不打了!再見莫蘭特!NBA又一球星賽季報銷

籃球?qū)崙?zhàn)寶典
2026-03-25 20:45:04
最大續(xù)航1068km!比亞迪批量申報100度+電池車型,鈦7、大唐在列

最大續(xù)航1068km!比亞迪批量申報100度+電池車型,鈦7、大唐在列

侃故事的阿慶
2026-03-23 14:19:31
一男子失業(yè)拿了50萬賠償回村里,逢人說欠了30萬外債,誰料第二天叔伯兄弟,都上門來“送溫暖”了

一男子失業(yè)拿了50萬賠償回村里,逢人說欠了30萬外債,誰料第二天叔伯兄弟,都上門來“送溫暖”了

不二大叔
2026-03-19 21:29:20
全球資產(chǎn)管理巨頭貝萊德CEO:若油價達(dá)到每桶150美元,將引發(fā)全球經(jīng)濟(jì)衰退

全球資產(chǎn)管理巨頭貝萊德CEO:若油價達(dá)到每桶150美元,將引發(fā)全球經(jīng)濟(jì)衰退

紅星新聞
2026-03-25 16:13:23
片酬不少拿,卻演啥毀啥!這3位“戲混子”男星,演戲看著太別扭

片酬不少拿,卻演啥毀啥!這3位“戲混子”男星,演戲看著太別扭

觀察者海風(fēng)
2026-03-24 23:58:08
騎士續(xù)約哈登有兩種方式哈登選哪一種? 明夏再離開騎士?

騎士續(xù)約哈登有兩種方式哈登選哪一種? 明夏再離開騎士?

仰臥撐FTUer
2026-03-25 09:29:35
我愛上41歲女人,她開口:玩玩可以但不結(jié)婚,得知真相我癱坐在地

我愛上41歲女人,她開口:玩玩可以但不結(jié)婚,得知真相我癱坐在地

小月故事
2026-03-19 17:08:37
我到52歲才頓悟:沒有愛可以做夫妻,但沒有愛一定做不了情人!

我到52歲才頓悟:沒有愛可以做夫妻,但沒有愛一定做不了情人!

千秋歷史
2026-03-22 20:27:55
以色列終于破防,伊朗打出開戰(zhàn)以來最大規(guī)模傷害!

以色列終于破防,伊朗打出開戰(zhàn)以來最大規(guī)模傷害!

戰(zhàn)爭史
2026-03-24 11:40:07
就在重慶!這個央企總部即將入駐!

就在重慶!這個央企總部即將入駐!

奇思妙想生活家
2026-03-25 12:12:23
向華強(qiáng)家族江湖往事:新義安老大與九龍皇帝

向華強(qiáng)家族江湖往事:新義安老大與九龍皇帝

文娛春秋Plus
2026-03-25 09:14:06
2026-03-26 00:20:49
野生運(yùn)營
野生運(yùn)營
懂點(diǎn)產(chǎn)品,懂點(diǎn)AI,正在努力給平淡日子搞點(diǎn)新花樣。
35文章數(shù) 0關(guān)注度
往期回顧 全部

科技要聞

紅極一時卻草草收場,Sora宣布正式關(guān)停

頭條要聞

伊朗放話愿意與"主和派"萬斯談 特朗普表態(tài)

頭條要聞

伊朗放話愿意與"主和派"萬斯談 特朗普表態(tài)

體育要聞

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

娛樂要聞

張雪峰經(jīng)搶救無效不幸去世 年僅41歲

財經(jīng)要聞

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

汽車要聞

智己LS8放大招 30萬內(nèi)8系旗艦+全線控底盤秀實(shí)力

態(tài)度原創(chuàng)

健康
教育
旅游
時尚
藝術(shù)

轉(zhuǎn)頭就暈的耳石癥,能開車上班嗎?

教育要聞

高考地理中的庫容量與蓄水量

旅游要聞

探秘云南保山勐赫小鎮(zhèn),感受與怒江貢山相擁的獨(dú)特魅力!

女人過了40歲別胡亂穿衣,趕緊看看這些日系穿搭,舒適又耐看

藝術(shù)要聞

《百花譜》,這個春天畫花不用愁!

無障礙瀏覽 進(jìn)入關(guān)懷版