欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

Flask與Django雙框架協(xié)作:校園閑置物品換購(gòu)平臺(tái)實(shí)戰(zhàn)詳解

Flask與Django雙框架協(xié)作:校園閑置物品換購(gòu)平臺(tái)實(shí)戰(zhàn)詳解 看到基于flask-django這種題目的時(shí)候不少同學(xué)第一反應(yīng)是:這倆框架是不是得二選一?或者怕寫(xiě)成用Django做了個(gè)主頁(yè)、用Flask做了個(gè)登錄頁(yè)的縫合怪。其實(shí)這類(lèi)設(shè)計(jì)題目真正想考察的是你能不能理解兩個(gè)Web框架各自的能力邊界并且用一套合理的架構(gòu)讓它們協(xié)作完成一個(gè)完整業(yè)務(wù)。這個(gè)校園個(gè)人閑置物品換購(gòu)平臺(tái)我當(dāng)初從需求分析到部署上線完整走了一遍坑踩了不少但做完之后對(duì)Python Web開(kāi)發(fā)的理解確實(shí)上了一個(gè)臺(tái)階。這篇文章我會(huì)把整套設(shè)計(jì)思路、核心數(shù)據(jù)表結(jié)構(gòu)、雙框架協(xié)作方式、關(guān)鍵代碼實(shí)現(xiàn)以及部署階段遇到的真實(shí)問(wèn)題全部梳理出來(lái)。不管你是要做課程設(shè)計(jì)、畢業(yè)設(shè)計(jì)還是單純想練手兩個(gè)主流Python框架這篇都值得看完。1. 雙框架并存的核心思路:主業(yè)務(wù)收斂、輔助功能外放先直接說(shuō)結(jié)論:一個(gè)項(xiàng)目里同時(shí)出現(xiàn)Flask和Django絕不是讓它們做重復(fù)的事而是讓每個(gè)框架去做自己最擅長(zhǎng)的事。1.1 Django和Flask的能力邊界Django自帶ORM、Admin后臺(tái)、用戶(hù)認(rèn)證體系、表單處理、CSRF防護(hù)這種全家桶特性非常適合承載業(yè)務(wù)主鏈路。對(duì)于校園閑置物品換購(gòu)平臺(tái)來(lái)說(shuō)用戶(hù)注冊(cè)登錄、物品發(fā)布、訂單交易、后臺(tái)審核這些核心模塊用Django來(lái)做能省掉大量重復(fù)造輪子的工作而且數(shù)據(jù)模型和數(shù)據(jù)庫(kù)遷移都通過(guò)Django ORM統(tǒng)一管理代碼維護(hù)成本低。Flask則是一個(gè)輕量級(jí)框架它不替你做任何決定但勝在靈活、啟動(dòng)快、寫(xiě)小服務(wù)非常順手。在這個(gè)項(xiàng)目里我把推薦接口、數(shù)據(jù)統(tǒng)計(jì)聚合、圖片壓縮處理這類(lèi)相對(duì)獨(dú)立的輔助功能放到了Flask側(cè)。這類(lèi)功能的特點(diǎn)是:邏輯相對(duì)獨(dú)立、調(diào)用頻率可能很高、不影響主交易流程即使某個(gè)接口掛了也不能拖垮用戶(hù)下單。1.2 雙框架協(xié)作的三種常見(jiàn)模式我見(jiàn)過(guò)不少團(tuán)隊(duì)做這類(lèi)雙框架項(xiàng)目拆法大致有三種:協(xié)作模式實(shí)現(xiàn)方式適用場(chǎng)景優(yōu)缺點(diǎn)方式A:共享數(shù)據(jù)庫(kù)獨(dú)立服務(wù)Django跑主站Flask跑API子服務(wù)兩者連同一個(gè)MySQL通過(guò)HTTP接口互相調(diào)用課程設(shè)計(jì)、畢業(yè)設(shè)計(jì)也是本文采用的方案架構(gòu)清晰、容易演示但要注意兩個(gè)框架訪問(wèn)同一批表時(shí)的模型一致性問(wèn)題方式B:主進(jìn)程嵌入用werkzeug的DispatcherMiddleware把Flask應(yīng)用作為Django的子應(yīng)用掛載只想演示同時(shí)使用了兩個(gè)框架時(shí)用來(lái)交差部署簡(jiǎn)單但兩個(gè)框架的session、中間件會(huì)互相干擾后期難維護(hù)方式C:完全微服務(wù)化各自獨(dú)立數(shù)據(jù)庫(kù)通過(guò)REST API松耦合通信分布式結(jié)課項(xiàng)目演示效果好但數(shù)據(jù)一致性難保證工作量也大我最終選了方式A。理由很現(xiàn)實(shí):課程設(shè)計(jì)和畢設(shè)的評(píng)審老師最看重的是業(yè)務(wù)閉環(huán)也就是用戶(hù)能發(fā)布物品、能下單、能完成換購(gòu)。共享一個(gè)MySQL能保證交易的強(qiáng)一致性Flask只負(fù)責(zé)讀多寫(xiě)少的輔助接口就算Flask掛了Django站點(diǎn)的核心功能也不受影響。這其實(shí)是真實(shí)企業(yè)里主業(yè)務(wù)收斂、輔助功能外放思想的一個(gè)簡(jiǎn)化版答辯的時(shí)候這樣講非常加分。1.3 為什么推薦先設(shè)計(jì)架構(gòu)而不是先寫(xiě)代碼很多同學(xué)拿到題目第一件事就是django-admin startproject然后就開(kāi)始寫(xiě)models。我的建議是反過(guò)來(lái)先花半天時(shí)間把這個(gè)平臺(tái)到底有哪些角色、哪些核心流程、哪些狀態(tài)想清楚。你可以問(wèn)自己三個(gè)問(wèn)題:誰(shuí)是系統(tǒng)用戶(hù)?學(xué)生、管理員還可能有什么?最核心的流程是什么?發(fā)布物品、發(fā)起換購(gòu)、確認(rèn)交換、互相評(píng)價(jià)。哪些功能寫(xiě)進(jìn)Django哪些拆給Flask?根據(jù)依賴(lài)關(guān)系劃分而不是按頁(yè)面劃分。想清楚這三個(gè)問(wèn)題后面寫(xiě)代碼就是照?qǐng)D施工而不是邊寫(xiě)邊改。這個(gè)項(xiàng)目里我最深刻的體會(huì)就是:前期架構(gòu)多花的時(shí)間后期至少能省三倍。2. 校園換購(gòu)平臺(tái)的需求本質(zhì):不是簡(jiǎn)單二手交易閑置物品換購(gòu)聽(tīng)起來(lái)和閑魚(yú)、轉(zhuǎn)轉(zhuǎn)差不多但落在校園場(chǎng)景里需求邏輯其實(shí)有明顯區(qū)別。搞清楚這些數(shù)據(jù)庫(kù)表設(shè)計(jì)才有的放矢。2.1 校園場(chǎng)景的三個(gè)核心差異第一,用戶(hù)身份天然可信。注冊(cè)必須綁定學(xué)校域名郵箱或?qū)W號(hào)這意味著平臺(tái)內(nèi)交易雙方的違約成本更高不需要像閑魚(yú)那樣做復(fù)雜的芝麻信用體系。第二,交易以線下自提為主。大學(xué)生活動(dòng)范圍高度集中宿舍區(qū)、教學(xué)樓、食堂就是天然的交貨點(diǎn)。所以系統(tǒng)不需要物流模塊但要記錄交易地點(diǎn)偏好比如只限本校圖書(shū)館自提。第三,換購(gòu)包含了物物交換和補(bǔ)差價(jià)。這是這個(gè)項(xiàng)目和普通二手交易平臺(tái)最大的區(qū)別。用戶(hù)發(fā)布物品時(shí)除了標(biāo)價(jià)還可以寫(xiě)明想交換什么比如用一臺(tái)Kindle換一副降噪耳機(jī)可以補(bǔ)差價(jià)50元。這意味著訂單表的設(shè)計(jì)不能只有買(mǎi)家、賣(mài)家、金額三個(gè)字段。2.2 核心角色與功能邊界我把系統(tǒng)拆成前臺(tái)、后臺(tái)、輔助服務(wù)三塊:角色核心功能所屬框架普通學(xué)生注冊(cè)登錄、瀏覽物品、發(fā)布閑置、發(fā)起換購(gòu)、留言詢(xún)問(wèn)、確認(rèn)收貨、評(píng)價(jià)Django系統(tǒng)管理員審核物品、處理舉報(bào)、用戶(hù)封禁、數(shù)據(jù)統(tǒng)計(jì)Django Admin Flask統(tǒng)計(jì)接口輔助服務(wù)物品推薦、瀏覽量統(tǒng)計(jì)、圖片壓縮、Excel導(dǎo)出Flask功能邊界定了之后頁(yè)面結(jié)構(gòu)就清楚了。前臺(tái)總共沒(méi)幾個(gè)頁(yè)面:首頁(yè)(物品流)、物品詳情、發(fā)布頁(yè)、個(gè)人中心、訂單列表、站內(nèi)信。管理后臺(tái)直接用Django Admin改一改就夠用不需要額外寫(xiě)。2.3 交易狀態(tài)機(jī):整個(gè)業(yè)務(wù)最核心的部分換購(gòu)流程不是簡(jiǎn)單的下單-付款-發(fā)貨-收貨因?yàn)榇嬖陔p方交換物品的情況狀態(tài)機(jī)必須多幾條分支。我自己項(xiàng)目里的狀態(tài)流轉(zhuǎn)是這樣設(shè)計(jì)的:用戶(hù)A發(fā)布物品X,狀態(tài)為在售。用戶(hù)B發(fā)起購(gòu)買(mǎi)或換購(gòu)請(qǐng)求物品X變?yōu)榻灰字型瑫r(shí)生成一條訂單記錄。雙方約定時(shí)間地點(diǎn)線下驗(yàn)貨。雙方都在系統(tǒng)中點(diǎn)擊確認(rèn)交換或確認(rèn)收貨訂單變?yōu)橐淹瓿?。如果任何一方在交易中超時(shí)未確認(rèn)可以申請(qǐng)取消訂單變?yōu)橐讶∠锲稾自動(dòng)回到在售。單獨(dú)把換購(gòu)拎出來(lái)說(shuō):當(dāng)B提出我想用物品Y換你的X時(shí)系統(tǒng)要同時(shí)鎖定X和Y兩件物品直到雙方確認(rèn)完成或者取消。這個(gè)雙向鎖定邏輯容易漏寫(xiě)業(yè)務(wù)代碼里一定要同時(shí)處理兩個(gè)物品的狀態(tài)。3. 數(shù)據(jù)庫(kù)設(shè)計(jì):換購(gòu)業(yè)務(wù)的核心表長(zhǎng)什么樣選型上我用了MySQL 8.0原因無(wú)他校園網(wǎng)環(huán)境里MySQL最通用后面查資料、找問(wèn)題都容易。Django側(cè)用ORM管理表結(jié)構(gòu)Flask側(cè)通過(guò)SQLAlchemy讀取同一批表。3.1 用戶(hù)表與擴(kuò)展資料表Django自帶的auth_user不要直接改而是建一張profile表一對(duì)一關(guān)聯(lián)。需要存的就是學(xué)號(hào)、學(xué)校郵箱、宿舍區(qū)域、信用分、頭像路徑。class Profile(models.Model): user models.OneToOneField(User, on_deletemodels.CASCADE, related_nameprofile) student_id models.CharField(max_length20, uniqueTrue, verbose_name學(xué)號(hào)) campus_email models.EmailField(uniqueTrue, verbose_name校園郵箱) dorm_area models.CharField(max_length50, blankTrue, verbose_name宿舍區(qū)域) credit_score models.IntegerField(default100, verbose_name信用分) avatar models.ImageField(upload_toavatars/, blankTrue)為什么不直接在User上加字段?因?yàn)镈jango的User模型被Admin、認(rèn)證、session到處引用直接改字典字段容易在后續(xù)升級(jí)或第三方庫(kù)適配時(shí)報(bào)錯(cuò)。一對(duì)一的Profile幾乎是所有Django項(xiàng)目的標(biāo)準(zhǔn)做法。3.2 物品表:狀態(tài)和換購(gòu)意向是靈魂物品表是整個(gè)平臺(tái)的流量核心字段設(shè)計(jì)直接影響后續(xù)的檢索和交易。class Item(models.Model): STATUS_CHOICES [ (on_sale, 在售), (trading, 交易中), (sold, 已售出), (off_shelf, 已下架), ] title models.CharField(max_length100) category models.ForeignKey(Category, on_deletemodels.SET_NULL, nullTrue) description models.TextField() price models.DecimalField(max_digits8, decimal_places2) want_exchange models.CharField(max_length200, blankTrue, verbose_name想換的物品) condition_level models.IntegerField(choices[(i, f{i}成新) for i in range(1, 11)]) image models.ImageField(upload_toitems/) owner models.ForeignKey(User, on_deletemodels.CASCADE, related_nameitems) status models.CharField(max_length20, choicesSTATUS_CHOICES, defaulton_sale) view_count models.IntegerField(default0) created_at models.DateTimeField(auto_now_addTrue)這里有一個(gè)值得說(shuō)的細(xì)節(jié):condition_level我用了0到10的成新度而不是幾乎全新/輕微使用痕跡這樣的模糊描述。原因很簡(jiǎn)單:成新度便于后期用SQL做排序和篩選比如只看九成新以上的物品文本字段就沒(méi)法高效查。3.3 訂單表:換購(gòu)和購(gòu)買(mǎi)共用一張表我見(jiàn)過(guò)很多項(xiàng)目把購(gòu)買(mǎi)訂單和換購(gòu)訂單分成兩張表,這是個(gè)坑。因?yàn)閾Q購(gòu)本質(zhì)上就是雙方互為買(mǎi)家和賣(mài)家的交易拆成兩張表后查詢(xún)我參與過(guò)的所有交易就變得非常痛苦。正確的做法是用一張order表通過(guò)判斷exchange_item字段是否為空來(lái)區(qū)分交易類(lèi)型:字段類(lèi)型說(shuō)明id主鍵訂單號(hào)itemFK主物品buyerFK發(fā)起交易的人sellerFK物品發(fā)布者exchange_itemFK可空若為換購(gòu)則指向買(mǎi)家提供的物品priceDecimal成交價(jià)或補(bǔ)差價(jià)statusCharFieldpending / confirmed / completed / cancelledcreated_at / updated_atDateTime記錄時(shí)間關(guān)鍵邏輯是:如果exchange_item不為空那么這筆訂單成交時(shí)buyer的exchange_item狀態(tài)必須變?yōu)閟old同時(shí)item狀態(tài)變?yōu)閟old。這兩個(gè)更新必須放在同一個(gè)數(shù)據(jù)庫(kù)事務(wù)里否則會(huì)出現(xiàn)A以為換成功了、B的物品還掛著賣(mài)的數(shù)據(jù)錯(cuò)亂。3.4 留言、舉報(bào)、評(píng)價(jià)表這三張表結(jié)構(gòu)都比較簡(jiǎn)單。留言表關(guān)聯(lián)物品和用戶(hù);舉報(bào)表關(guān)聯(lián)被舉報(bào)的物品或留言;評(píng)價(jià)表關(guān)聯(lián)訂單買(mǎi)家和賣(mài)家各自只能評(píng)價(jià)一次用order_id reviewer_id做聯(lián)合唯一約束。這些都屬于快速迭代的表先建起來(lái)后續(xù)有需求再加字段就行。數(shù)據(jù)庫(kù)設(shè)計(jì)這塊我的實(shí)際經(jīng)驗(yàn)是:不要想著一步到位建出完美表結(jié)構(gòu)先讓核心交易閉環(huán)跑通再根據(jù)實(shí)際頁(yè)面反饋補(bǔ)索引和字段。這個(gè)項(xiàng)目里我最開(kāi)始沒(méi)給item.status加索引結(jié)果數(shù)據(jù)量到幾千條時(shí)首頁(yè)查詢(xún)明顯變慢后來(lái)才補(bǔ)上。對(duì)課程設(shè)計(jì)級(jí)別的數(shù)據(jù)量來(lái)說(shuō)這一步不做也沒(méi)事但知道了對(duì)答辯有好處。4. Django主站:從注冊(cè)登錄到訂單流轉(zhuǎn)的實(shí)現(xiàn)Django側(cè)承載了平臺(tái)的全部寫(xiě)操作我按用戶(hù)-物品-訂單-后臺(tái)四條線來(lái)講。4.1 校園身份驗(yàn)證:注冊(cè)時(shí)攔截非校園郵箱校園平臺(tái)最大的特色是身份可信所以注冊(cè)環(huán)節(jié)要攔住校外人。實(shí)現(xiàn)方式就是在UserCreationForm的子類(lèi)里重寫(xiě)clean_email強(qiáng)制郵箱后綴為學(xué)校域名。class CampusUserCreationForm(UserCreationForm): email forms.EmailField(requiredTrue) def clean_email(self): email self.cleaned_data[email].lower() if not email.endswith(your-university.edu.cn): raise forms.ValidationError(請(qǐng)使用校園郵箱注冊(cè)) return email這里的your-university.edu.cn替換成你自己的學(xué)校域名即可。另一個(gè)可選的驗(yàn)證是讓用戶(hù)填學(xué)號(hào)再和管理員維護(hù)的學(xué)號(hào)表比對(duì)不過(guò)課程設(shè)計(jì)階段用郵箱后綴就夠用了。4.2 物品發(fā)布的圖片處理物品發(fā)布頁(yè)用ModelForm綁定Item模型圖片上傳這塊有幾個(gè)容易踩的坑。第一個(gè)是默認(rèn)的ImageField一次只支持一張圖想支持多圖就得建一個(gè)ItemImage子表;第二個(gè)是用戶(hù)上傳的原圖動(dòng)輒幾兆直接存服務(wù)器既浪費(fèi)空間又拖慢頁(yè)面加載。我的做法是在保存時(shí)用Pillow把圖片壓縮兩份:一份是列表頁(yè)用的縮略圖(例如400x300裁剪)一份是詳情頁(yè)用的原圖(限制最大邊1600px)。上傳邏輯寫(xiě)在form.save()里重寫(xiě):def save(self, commitTrue): item super().save(commitFalse) if self.cleaned_data.get(image): img Image.open(self.cleaned_data[image]) img.thumbnail((1600, 1600)) # 壓縮后保存到 MEDIA_ROOT并重新賦值路徑 if commit: item.save() return item這段代碼的核心意圖是:不要在模板里做任何圖片縮放全部在服務(wù)端生成好物理文件。Django模板層雖然也能做縮略圖但那是在每次請(qǐng)求時(shí)動(dòng)態(tài)處理的高并發(fā)下CPU直接被打滿(mǎn)。4.3 訂單狀態(tài)機(jī)的事務(wù)控制當(dāng)用戶(hù)B對(duì)物品X發(fā)起換購(gòu)時(shí)要同時(shí)做三件事:創(chuàng)建訂單、把X的狀態(tài)改為交易中、把B的物品Y的狀態(tài)也改為交易中。這三個(gè)寫(xiě)操作必須在一個(gè)原子事務(wù)里用Django的transaction.atomic包起來(lái)。from django.db import transaction transaction.atomic def create_exchange_order(item_x, item_y, buyer, price_diff): order Order.objects.create( itemitem_x, exchange_itemitem_y, buyerbuyer, selleritem_x.owner, priceprice_diff, statuspending, ) item_x.status trading item_x.save() item_y.status trading item_y.save() return order是否要用select_for_update()加行鎖?如果只是課程設(shè)計(jì)數(shù)據(jù)量小、并發(fā)低不加也能跑。但如果你在答辯時(shí)想展示自己對(duì)并發(fā)問(wèn)題的理解這是絕佳素材。select_for_update()會(huì)在數(shù)據(jù)庫(kù)層面鎖定這兩件物品的行防止兩個(gè)用戶(hù)同時(shí)發(fā)起換購(gòu)導(dǎo)致?tīng)顟B(tài)錯(cuò)亂。item_x Item.objects.select_for_update().get(pkitem_x_pk) item_y Item.objects.select_for_update().get(pkitem_y_pk)這里要提醒一句:select_for_update()必須在事務(wù)內(nèi)使用也就是說(shuō)調(diào)用這個(gè)查詢(xún)的函數(shù)要被transaction.atomic包裹否則鎖會(huì)在查詢(xún)后立刻釋放起不到作用。4.4 用Django Admin做管理后臺(tái)管理后臺(tái)我?guī)缀鯖](méi)有額外寫(xiě)頁(yè)面全部靠Django Admin定制。核心配置就是把Item、Order、Report注冊(cè)進(jìn)去并定制列表展示字段:admin.register(Item) class ItemAdmin(admin.ModelAdmin): list_display (title, owner, price, status, created_at) list_filter (status, category) search_fields (title, owner__username) actions [force_off_shelf] admin.action(description強(qiáng)制下架選中物品) def force_off_shelf(self, request, queryset): queryset.update(statusoff_shelf)actions自定義操作在處理舉報(bào)時(shí)非常管用:管理員在舉報(bào)列表里看到被舉報(bào)物品勾選、下拉選擇強(qiáng)制下架、執(zhí)行三步搞定。不需要寫(xiě)任何前端代碼。5. Flask輔助服務(wù):推薦接口和統(tǒng)計(jì)看板怎么落地Django把主要業(yè)務(wù)包圓了那Flask在項(xiàng)目里到底干什么?我這邊定了兩個(gè)明確的活:推薦接口和統(tǒng)計(jì)看板。這兩塊邏輯簡(jiǎn)單、讀多寫(xiě)少、和主流程解耦非常適合用Flask起一個(gè)輕量服務(wù)。5.1 Flask推薦接口:基于瀏覽記錄的簡(jiǎn)單協(xié)同過(guò)濾推薦這塊不用整復(fù)雜的機(jī)器學(xué)習(xí)模型課程設(shè)計(jì)階段做看過(guò)這個(gè)物品的人還在看同類(lèi)物品就夠了。算法原理很簡(jiǎn)單:根據(jù)用戶(hù)在ItemViewLog表里的瀏覽記錄找出瀏覽過(guò)當(dāng)前物品的所有用戶(hù);再查這些用戶(hù)還瀏覽過(guò)哪些同分類(lèi)的物品;按出現(xiàn)次數(shù)倒序取前6個(gè)排除用戶(hù)已擁有的物品。app.route(/api/recommend/int:item_id) def recommend(item_id): item db.session.get(Item, item_id) viewers [v.user_id for v in db.session.query(ItemViewLog).filter_by(item_iditem_id)] candidates {} for uid in viewers: for vlog in db.session.query(ItemViewLog).filter_by(user_iduid).all(): if vlog.item_id ! item_id: candidates[vlog.item_id] candidates.get(vlog.item_id, 0) 1 ranked sorted(candidates.items(), keylambda x: x[1], reverseTrue)[:6] return jsonify([{item_id: k} for k, _ in ranked])這段代碼本身沒(méi)什么技術(shù)含量但它在架構(gòu)上定義了Flask負(fù)責(zé)計(jì)算、Django負(fù)責(zé)展示的協(xié)作模式。前端頁(yè)面通過(guò)fetch(/api/recommend/3)拿到推薦列表再渲染物品卡片主站代碼保持干凈。5.2 統(tǒng)計(jì)看板:給管理員看的輕量報(bào)表第二個(gè)Flask接口是統(tǒng)計(jì)看板。我需要幾組數(shù)據(jù):每日發(fā)布物品數(shù)、當(dāng)前在售物品分類(lèi)占比、熱門(mén)物品Top10。直接在Flask里用SQLAlchemy聚合查詢(xún)?nèi)缓蠓祷豃SON前端用Chart.js渲染圖表。app.route(/api/stats/category) def stats_category(): rows db.session.query(Item.category_id, func.count(Item.id)).group_by(Item.category_id).all() return jsonify([{category_id: cid, count: cnt} for cid, cnt in rows])這個(gè)統(tǒng)計(jì)接口如果也塞進(jìn)Django里代碼量和路由復(fù)雜度都會(huì)增加。放在Flask這邊整個(gè)Django項(xiàng)目只需要在Admin后臺(tái)里嵌一個(gè)iframe或?qū)懸粋€(gè)fetch調(diào)用就能展示圖表。5.3 雙框架共享同一個(gè)MySQL的模型一致性問(wèn)題這是整個(gè)項(xiàng)目里最隱蔽的坑。Django的ORM會(huì)自動(dòng)給模型加字段和約束比如多對(duì)多關(guān)系會(huì)生成中間表在某些情況下還有局部索引。Flask的SQLAlchemy模型是從零手工寫(xiě)的兩邊字段定義稍有出入查詢(xún)結(jié)果就可能出問(wèn)題輕則查不到數(shù)據(jù)重則SQLalchemy報(bào)字段不存在。我的經(jīng)驗(yàn)是:以Django的模型為準(zhǔn)Flask側(cè)只做只讀查詢(xún)的模型定義字段精簡(jiǎn)到只定義要用到的部分并且不允許Flask側(cè)做任何寫(xiě)操作。比如Item表在Flask側(cè)只需要定義id、title、category_id、price、status、view_count這幾個(gè)字段因?yàn)橥扑]和統(tǒng)計(jì)只用到這些。這樣兩邊模型的字段交集很小出錯(cuò)的概率就低。還有一個(gè)細(xì)節(jié):created_at字段在Flasks側(cè)定義時(shí)必須加上timezoneTrue否則查出來(lái)的時(shí)間會(huì)比實(shí)際時(shí)間慢8小時(shí)。這個(gè)問(wèn)題我排查了很久最后發(fā)現(xiàn)是Django啟用了USE_TZTrueMySQL里存的是UTC時(shí)間SQLAlchemy默認(rèn)按本地時(shí)間解析兩邊時(shí)區(qū)沒(méi)有對(duì)齊。5.4 Flask服務(wù)的獨(dú)立部署Flask服務(wù)最終是作為一個(gè)獨(dú)立進(jìn)程跑的。開(kāi)發(fā)環(huán)境直接python app.py就行部署時(shí)我用Gunicorn來(lái)啟動(dòng)和Django那邊的uWSGI區(qū)分開(kāi)。這樣兩個(gè)服務(wù)互不干擾Flask掛了重啟FlaskDjango掛了重啟Django。gunicorn -w 2 -b 127.0.0.1:5001 app:app日志單獨(dú)寫(xiě)到flask_app.log方便排查問(wèn)題。6. 開(kāi)發(fā)到部署階段的真實(shí)踩坑清單這部分是全文含金量最高的地方。以下每一條我都實(shí)際遇到過(guò)不給結(jié)論直接給排查思路。6.1 Python版本和Django版本之間的兼容性先檢查服務(wù)器上的Python版本再選Django版本。Django 4.2要求Python 3.10以上如果服務(wù)器是3.8裝新版Django直接報(bào)語(yǔ)法錯(cuò)誤。我一開(kāi)始在本地Windows上用Python 3.12開(kāi)發(fā)一切正常部署到Linux服務(wù)器發(fā)現(xiàn)系統(tǒng)自帶的Python是3.8最后鎖定方案是Django 4.1.7 Flask 2.3兼容性最穩(wěn)。提示:做項(xiàng)目前先確定團(tuán)隊(duì)或?qū)嶒?yàn)室服務(wù)器的Python版本python3 --version一看便知不要想當(dāng)然裝最新版。6.2 Pillow擴(kuò)展庫(kù)裝不上的問(wèn)題圖片處理依賴(lài)Pillow在純凈系統(tǒng)上經(jīng)常裝失敗。報(bào)錯(cuò)信息通常是RequiredDependencyException: zlib或者jpeg。原因很直白:系統(tǒng)缺底層圖片庫(kù)。解決方式:# Ubuntu/Debian sudo apt-get install libjpeg-dev zlib1g-dev pip install Pillow6.3 圖片上傳后頁(yè)面404本地開(kāi)發(fā)時(shí)MEDIA_URL和MEDIA_ROOT配置正確圖片能顯示。部署到Nginx后所有圖片路徑全部404。原因是Django本身不提供靜態(tài)文件服務(wù)Nginx需要把包括/media/和/static/在內(nèi)的路徑直接代理到服務(wù)器的物理目錄。Nginx配置里加一段:location /media/ { alias /var/www/project/media/; }這個(gè)坑幾乎人人都會(huì)踩因?yàn)檫@屬于Nginx配置不屬于Django代碼教程里很少寫(xiě)清楚。6.4 表結(jié)構(gòu)改來(lái)改去的遷移災(zāi)難開(kāi)發(fā)過(guò)程中我多次修改Item模型導(dǎo)致遷移文件堆積數(shù)據(jù)庫(kù)狀態(tài)和模型不同步的怪問(wèn)題時(shí)有出現(xiàn)。后來(lái)養(yǎng)成一個(gè)習(xí)慣:每次改模型前先python manage.py makemigrations --dry-run看看即將生成的遷移操作是否符合預(yù)期再真正執(zhí)行。如果已經(jīng)亂套了怎么辦?我的經(jīng)驗(yàn)是別硬修遷移文件直接重置:python manage.py migrate app_name zero python manage.py makemigrations python manage.py migrate但前提是能接受清空該app的數(shù)據(jù)。開(kāi)發(fā)階段無(wú)所謂如果是接近答辯的數(shù)據(jù),就不要這么干。6.5 換購(gòu)并發(fā)導(dǎo)致的狀態(tài)錯(cuò)亂有次測(cè)試時(shí)發(fā)現(xiàn),兩個(gè)同學(xué)同時(shí)點(diǎn)擊換購(gòu)按鈕,同一件物品生成了兩筆訂單。原因就是查詢(xún)物品狀態(tài)和創(chuàng)建訂單不在一個(gè)事務(wù)里,也沒(méi)有加行鎖。修復(fù)方案前面已經(jīng)說(shuō)了:select_for_update()加transaction.atomic。這是一個(gè)非常好的答辯回答題目,面試官問(wèn)到如何防止超賣(mài)時(shí),你拿這個(gè)項(xiàng)目里真實(shí)修過(guò)的bug舉例,說(shuō)服力遠(yuǎn)超背書(shū)。6.6 Django時(shí)區(qū)與MySQL時(shí)區(qū)不一致前面提到Flask側(cè)查時(shí)間差8小時(shí),其實(shí)Django側(cè)也遇到過(guò)。解決方案是:# settings.py USE_TZ True TIME_ZONE Asia/Shanghai這樣Django在讀寫(xiě)MySQL時(shí)會(huì)自動(dòng)把UTC時(shí)間轉(zhuǎn)換為東八區(qū)。Flask側(cè)則是手動(dòng)datetime.now(timezone.utc)或者直接查詢(xún)時(shí)加上convert_tz。6.7 雙服務(wù)部署時(shí)Nginx的upstream配置兩個(gè)服務(wù)同時(shí)跑,前端要同時(shí)訪問(wèn)Django的/路徑和Flask的/api/路徑,靠Nginx路由區(qū)分:upstream django_backend { server 127.0.0.1:8000; } upstream flask_backend { server 127.0.0.1:5001; } server { listen 80; server_name your-domain.com; location /api/ { proxy_pass http://flask_backend; } location / { proxy_pass http://django_backend; } }這樣一個(gè)域名同時(shí)跑兩個(gè)Python Web應(yīng)用,演示的時(shí)候不用來(lái)回切換端口,交互體驗(yàn)也自然。6.8 頁(yè)面模板和靜態(tài)資源的重復(fù)加載最后是一個(gè)容易被忽略的性能問(wèn)題。Django的模板是每次請(qǐng)求都渲染一遍,如果有高頻頁(yè)面(比如首頁(yè)物品流),建議加一層緩存。最簡(jiǎn)單的做法是Django的cache_page裝飾器緩存首頁(yè)60秒:from django.views.decorators.cache import cache_page urlpatterns [ path(, cache_page(60)(views.index), nameindex), ]加完緩存后,首頁(yè)壓力大幅下降,Flask推薦接口那邊也輕松不少。7. 答辯演示和后續(xù)擴(kuò)展的建議做完項(xiàng)目到真正演示還有一段距離。我見(jiàn)過(guò)實(shí)力不錯(cuò)但演示翻車(chē)的,也見(jiàn)過(guò)功能一般但演示節(jié)奏極好的?;趯?shí)際經(jīng)驗(yàn)分享幾點(diǎn)。7.1 演示前準(zhǔn)備好種子數(shù)據(jù)和錄屏不要現(xiàn)場(chǎng)發(fā)布物品、現(xiàn)場(chǎng)拍圖。提前把一個(gè)品類(lèi)下放滿(mǎn)十幾件物品,圖片用真實(shí)拍的照片而非占位圖,這樣評(píng)委打開(kāi)首頁(yè)時(shí)視覺(jué)效果好很多。同理,推薦接口的演示也別用空數(shù)據(jù)庫(kù)去測(cè),先在ItemViewLog里造好一批瀏覽記錄,否則推薦結(jié)果永遠(yuǎn)為空。錄屏軟件開(kāi)好,萬(wàn)一現(xiàn)場(chǎng)網(wǎng)絡(luò)不穩(wěn)定或者服務(wù)沒(méi)起來(lái),放錄屏照樣能講完。7.2 講清楚框架邊界比講功能更重要答辯時(shí)評(píng)委最常問(wèn)的就是:你為什么要用Flask,Django不能做推薦接口嗎? 這時(shí)候你把第1節(jié)的架構(gòu)圖往白板上一畫(huà),說(shuō)明寫(xiě)操作集中在Django、讀密集的輔助服務(wù)放Flask、共享數(shù)據(jù)庫(kù)保證一致性,評(píng)委立刻知道你理解架構(gòu)設(shè)計(jì),而不是只會(huì)堆功能。7.3 后續(xù)可以擴(kuò)展的三個(gè)方向這個(gè)項(xiàng)目做完后,想進(jìn)一步延伸可以考慮三條線:給物品加全文搜索,用Django的SearchVector或者接入Elasticsearch,解決物品多了之后分類(lèi)篩選不好用的問(wèn)題;把推薦服務(wù)升級(jí)成基于用戶(hù)行為排序的算法,比如根據(jù)分類(lèi)偏好加權(quán),不改變架構(gòu),只改Flask側(cè)的計(jì)算邏輯;加Redis緩存熱點(diǎn)數(shù)據(jù),首頁(yè)物品流和推薦結(jié)果都緩存到Redis,進(jìn)一步減輕數(shù)據(jù)庫(kù)壓力。我自己做這個(gè)項(xiàng)目的最大體會(huì)是:技術(shù)難點(diǎn)不在某個(gè)框架的API上,而在如何讓兩個(gè)框架各司其職、協(xié)同不打架。把這個(gè)問(wèn)題想透,你就能從跟著教程敲代碼進(jìn)階到真正理解Web應(yīng)用怎么搭。希望這篇能幫你少走幾個(gè)彎路。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久作爱| 5月婷婷综合| 深爱激情五月网| 伊人热婷婷| 色噜噜狠狠色综合日日| 五月天免费色| 久久婷婷综合基地| 欧美黄色一级| 婷婷成人五月天| 激情网第四色| 99ri精品视频在线观看| 欧美婷婷九月| 色色色香蕉五月婷| AA片在线观看视频在线播放 | 五月天啪啪啪| www好屌操| 色五月婷婷1| 五月天色丁香| 六月婷婷综合激情| 热久久99热欧美国产亚洲| 99男人天堂| 国产黄色在线| 久久久国产精品黄毛片| 五月丁香六月婷综合成人综合| 亚洲狠狠操| 婷婷在线播放av| 亚洲欧洲一二| 丁香五月天日韩无码| 欧洲亚洲免费视频9 | 91丨九色丨老农村| 91在线人| 国产特黄色精品一区二区三区精品无广告| 公的粗大挺进了我的密道| 丁香六月婷婷| 丁香五月综合福利视频导航| 噜综合| 2013AV天堂| www,超碰| 五月婷婷综合激情小说| 丁香婷婷AV| 99热伊人| 农村熟妇高潮精品A片| 中文字幕有多少字| 另类激情中文| 天天操综合网| 少妇人妻人伦A片| 五月婷五月婷伊人伊人五月婷| 激情丁香五月AV| 婷婷五月丁香国产| 色婷婷色综合激情91| 99久久超级| 日本欧美成人片AAAA| 午夜丁香婷婷| 一二线视频 另类| 久热免费视频| 操大屄五月天视频| 超级碰碰视频无码| 日韩99视频| 色综合久久88| 五月婷婷啪啪啪| 婷婷欧美激情| 婷色五月| 99热精品综合| 婷婷五月成人系列| 色五月 五月婷婷| 六月丁香激情网| 五月丁香免费看| 综合五月丁香六月婷婷| 九九re精品视频在线观看| 播四月婷婷六月丁香| SS丁香五月婷婷| 五月丁香六月综合激情网| 久久成人性爱| 日日操天天| 色婷婷在线视频久| 五月日韩中文字幕| 色婷婷狠狠18禁| 亚洲网站999| 另类小说五月天| 久久婷婷五月免费视频| 丁香六月狠狠干| 天天色丁香| 日本美女上人| 97精品人人A片免费看| 婷婷五月天综合在线| 婷婷五月天激情文学| 超碰激情网| 丁香色婷婷五月天| 成人国产网| 丁香六月婷婷社区| 婷婷,五月天,丁香,第一| 色色色视频免费无码 | www.婷婷五月天.com| 色99视频| 五月婷婷婷综合网| 深爱开心激情网| 伊人狠狠狠综合| 99久在线精品99re8热| www.sezonghe| 九热视频| yazhochengrenavwang| 香蕉乱插| 米奇影视五月天| 五月丁香在线观看| 婷婷欠久少妇| 五月婷婷另类| 五月婷婷激情综合av| www.91.com黄| 色婷婷无吗| 99ri精品在线观看| 亚洲舔观看| 96精品国产综合久久久久久| 激情综合网五月在线播放| 色视五月天婷婷| 99爱免费在线视频| 五月婷婷综合视频| 99.N在线视频| 婷婷五月丁香六月天亚洲综合| 婷婷伊人综合中文字幕| 丁香花婷婷五月天| 亚洲丁香网| 日韩成人av在线| 九九婷婷激情综合网| 影音先锋 一区| 激情婷婷狠狠干| 色噜噜狠狠色综合成人99| 无码少妇高潮喷水A片免费| 色月丁| 婷婷亚洲天堂| 九九aV| 久热精品视频在线观| 99成人免费热视频| 综合色、色综合| 99ri视频在线播放| 久久金品黃色| 日操夜操天天操不卡| 思思99热在线| 中文字幕在线日亚州9| 丁J香六月首页| 激情美女五月天| 丁香综合婷婷五月天| 韩日另类| 五月丁香激情六月| 热日韩欧美| 伊人网欧美在线男人天堂五月丁香 | 久久久久久久人妻| 婷婷五月在线免费| 99啪啪| 五月丁香偷拍| 天天干天天干天天干天天干天天干| 深爱激情五月天婷婷网| 国产XXXX搡XXXXX搡麻豆| 天天操B| 久久九九免费视频| 天天综合色丁香| 国产精品成人av在线观看春天| 精国产品一区二区三区A片| 久久久99免费视频| 日日.c| www.五月天婷婷| 日日肏天天操| 玖玖99精品视频| 亚洲AV激情五月综合网| 激情AV| 婷婷自拍| 五月丁香网站| 久久婷婷内射| 99ri精品视频在线观看| 91九色熟女| 五月停停色| 国产欧美日韩一区二区三区| 婷婷六月五月| 九九在线91| 久久久久人妻中文| 操操操91| 五月天婷婷綜合院| 丁香色综合| 99久久玖玖| 欧美超碰亚洲| 99操碰| 九九综合九九| 无码成人AAAAA毛片AI换脸| 丁香五色月婷婷网| 人妻六月天| 狠狠人人婷婷| 99热热九九| 丁香伊人网| 99热99干| 国产人妻人伦精品一区二区| 99热在线观看免费精品| 五月丁香六月婷婷亚洲天堂网站| 激情综合五月丁香六月婷婷| 操碰91| 七七九九色色| 噜噜五月天综合| 日本五月天网站| 丁香六月婷婷综合欧美| 国产伦亲子伦亲子视频观看| 人人干人人操人人摸| 97干视频在线| 天天插操| 欧美色色色色色色色色色色| 人人色性网| 天天色中文字幕女优AV| 色综合久久天天综合网| 亚洲色婷婷视频| 蜜乳人妻一区二区三区| 成人国产欧美大片一区| 性高潮久久久久久-九九九九九九九九九九热-成人AV | 4399啪啪视频| 久操福利| 欧美日韩一区二区三区四区| 玖玖无码中文| BlACKEDRAW视频一区二区| 色婷婷超碰| 美女五月激情| 亚洲无码猫咪| 国产精产国品一二三在观看| 色婷| 丁香综合婷婷五月天| 大香蕉婷婷| www.seqingwuyuetian| 激情小说视频图片网| 激情黄色小说色五月| 99re热视频这里只精品| 伊人五月综合网| 丁香五月婷中字幕| 思思精品久久艹| 欧美日本黄色| 婷婷综合在线视频| 综合另类激情| 五月婷婷操操| 无码激情AAAAA片-区区| 天天日日夜夜| 激情五月婷| 激情五月五月婷婷| 五月丁香777| 婷婷伊人激情婷婷| 丁香六月狠狠| 综合亚洲色色| site:xiongshengzz.com| 欧美碰碰碰| 91精品激情9| 99色视频| 99视频在线| 色五月激情五月| 色五月色综合| 襙逼网| 只有精品视频在线观看| 久久久中文| 久久丁香婷婷五月| 丁香五月最新网址| www91精品| 色域五月丁香| 婷婷五月综合色小姐小说| 疯狂做受XXXX高潮A片| 久久99精品九九久久久婷婷| 成人AV免费观看| 国产精品色婷婷久久久精品| 97操碰碰无码视频| www.99在线| 播播网色播播| 97碰| 五月婷婷激情综合| 五月天大香蕉| 无码成人AAAAA毛片AI换脸| 激情五月婷婷| 日本视频不卡123区| 日日干夜夜干| 欧美日本韩国亚洲| 五月色丁香婷婷综合| 2018夜夜草| 久久久com| 色色色色色色网站| 99操| 丁香五月伊人| 操人久久| 99精品热视频只有精品10| 97碰免费视频在线| 多精窝99在线视频| 9久热这里只有精品| 激情综合亚洲色婷婷五月| 丁香亚洲婷婷五月| 夜夜操天天干| 久久99久久99久久99人受| 99久久九九| 综合网亚洲| 五月天伊人| 五月综合久久| 少妇熟女视频一区二区三区| 超碰成人在线免费观看| 91精品丝袜久久久久久| 另类丁香五月天区图| 第四色婷婷色五月| 99久精品视频| 中文成人在线| 停停五月色宗合| 欧在线一区| 夜色综合网| 亚洲无码另类| 五月天国产成人| 丁香五月第九色| 天天五月情| 天天日天天日天天搞| 婷婷六月综合激情| 亚洲第一综合| 亚洲人妻Av| 亚洲VA欧美VA| 婷婷五月色激情欧美激情| 久久五月丁香| 中文字幕高清av| 91久久| 婷婷精品在线| 亚洲综合网 665566| 五月婷婷综合网| 久久六月婷婷| 依人大香蕉| 99热这里有精品2| 亚洲五月停停| 欧美交换配乱吟粗大25P| 91碰免费视频| 久久亚洲色导航| 五月天色婷婷av| 在线只有精品| 爱穴久久| 99久热这里有精品| 色婷婷9| 丁香性爱在线视频| 五月色丁香综合| www婷婷| 99久久国产宗和精品1上映| 91丨人妻丨国产丨丝袜| 毛片新网地| 久久9视频| 97操在线资源| 日本操逼九九九九58日本操逼| 九月丁香| 久9热视频在线观看| 五月天激情婷婷五月天久久| 九九色图| 全高清无码视頻| 九九热精品视频九九| 99热综合网| 亚洲婷婷婷| 五月激情婷婷女| 4399成人黄A片| 亚洲成人av在线播放| 丁香五月激情综合在线观看| 五月天婷婷影院| 男人天堂99| 色J香五月天| 青柠影视免费高清电视剧| 九月婷婷在线观看| 五月丁香六月婷婷综合网站 | 97色视频网| 大波美女VA网站| 婷婷爱五月天| 九九超日本| 综合五月天婷婷色| 久久综合五月天激情小说网站 | 五月婷久久草| 色五月婷婷小说亚洲中文字幕组| 性爱五月婷| 婷婷五月激情欧美大胆视频| 亚洲在线免费成人| 天天干天天爽天天操| 青柠影视免费高清电视剧| 婷婷五月天综合网| 六月丁香啪啪| 久久66er久久| 99热在线观看| 五月丁香六月香综合激情| 狠狠草在线观看| 婷婷五月综激情| 天天狠狠夜夜狠狠2023| 亚洲婷婷激情综合激情999精品| 天天摸夜夜夜| 大伊香蕉玖玖爱| 激情 婷婷| 欧美日本不卡黄色片| 天天插天天| 啪啪日本欧美| 亚洲人成色A777777在线观看| 久热99久热| 五月亭亭网成人在线视频| 丁香六月成人网| 久久婷婷视频| AV伊人青草丁香六月| 婷婷五月天AV| 丁香五月在线看| 中文字幕在线不卡视频| 婷综合| 97人人干| 超碰亚洲欧美| 日本色色网站| 婷婷五月天无码熟女| 啊v视频在线观看| 免费AV在线网址| 91操在线视频| 婷婷五月综合激情小说| 97碰成超视频免费视频| 国产精品美女| 五月婷婷中文字幕| 成人色五月天婷婷| 91五月花丁香| 99re8这里只有精品99re8热视频| 99精品爱| 欧美婷婷日本| 夜夜操加勒比| 五月丁香婷婷激情视频| 一起草AV| 色婷婷yy久| 色色热| aaaaa不卡| 五月天激情色色| 色色色综合色| 草美女在线观看视频在线播放 | 狠狠色成人影片| 五月天婷婷社区久久综合| 无码操B| 伊人五月人妻精品| 九九re精品视频在线观看 | 午夜激情久久| 免费黄色片子| 开心激情网五月| 久久激情五月| AV大片在线观看| 玖玖在线视频| 激情开心五月天| 成人片久久网站| 丁香五月婷婷激情中文| 人妻丰满精品一区二区A片| 五月丁香综合在线| www超碰| 亚洲AV日韩在线观看| 人人操AV| 丁香美女主播视频在线观看| 韩日在线熟女| 香蕉视频91| 秋霞三及片| 少妇性按摩无码中文A片| 永久天堂日本| 天天干天天做| 久久精彩免费视频精彩免费视频| 天天综合色| 成人网站免费sxj| 欧美日朝成人| www.婷婷久久五月天| 日日夜夜天天综合| 日本色99| 六月丁香婷婷综合狠狠爱夜夜爱| 欧美色色色色色色色| 婷婷五月天成人五月天| 91色色色| 另类图片五月天婷婷| 色欲色香综合网| 色日本综合| 激情综合亚洲色婷婷五月| 婷婷五月天成人五月天| 色五月中文字幕| 九色在线五月婷婷网址| 无码人妻AV久久久一区二区三区| 欧美激情五月天| 丁香六月激情| 婷婷五月亚洲综合| 色五月激情综合网| 99热亚洲精品| 99热97| 五月婷婷影院| 五月天操逼网| 九九色影视| 激情五月丁香六月综合AVXXXX| 丁香五月综合图片在线观看| 婷婷伊人激情婷婷| 五月社区婷婷激情| 午夜性爱影视一区77| www.粉嫩av.com| 久久综合无| 天天操天天曰天天射| 天天艹| 69久热| 另类五月激情| 色婷婷精品视频在线播放| 久久婷婷青青草| 激情综合色五月丁香| 欧美人与性动交CCOO| 天天爽天天操| 1024在线一区| 九九碰九九爱97超碰| 97香蕉碰碰人妻国产欧美| AAA久久| 亚洲成av人影院| 天天综合精品| 久9热插入| 看逼中文字幕| 色婷婷香蕉| 日日干日日| 五月天婷婷色色| 亚洲A片成人无码久久精品青桔| 国外亚洲成AV人片在线观看| 天色色综合网| 婷婷五月天AV| 亚洲色欲AAAAAA| 99热在线这里| 二色AV| 婷婷五月无码| 久热在线中文字幕色999舞| 伊人婷婷福利网| 亚洲无aV在线中文字幕 | 五月色无码| 天天爽夜夜爽天天爽夜夜爽| 超碰chaompinm| 双性美人被调教到喷水A片| 亚洲国产黄色电影| 1024人妻| 啪啪啪啪五月天| 激情小说之五月| 五月激情婷婷在线| 综合色99| www五月天com| 色婷婷六月性| 深爱五月激情| 五月综合无码| 色婷婷色丁香色欲av| 色综合丁香| 欧美久草在线日本一级特黄大片做受9在线观看韩国电影《两个女人》未删减-毛片 | 五月丁香999| 日韩AV大全| 久久综合爱| www.婷婷.com| 影音先锋91男人资源在线播放| 91无码视频| 五月天激情图| 日日夜夜天天综合| 色五月大| 麻豆五月丁香婷婷| 五月丁香黄色视频| 疯狂做受XXXX高潮A片| 婷婷五月天毛片| 丁香五月亭亭六月综合激情网| 五月婷婷 激情五月| 99热久| 午夜天堂一区人妻| 久久新地址| 五月天综合婷婷| 婷婷五月天福利| 婷婷久久性爱| 直接看的AV| 亚洲成人综合在线| 操日本三片99| 激情五月六月丁香| 操操啪| 九九热99视频在线| 五月婷婷影| 丁香五月影院| 欧美久久婷婷| 久久色五月| 欧美A片在线视频免费观看| 丁香五月激情六月欧亚激情综合导航| 久久免费婷婷视频| 综合久久狠狠| 91艹人| 激情综合网五月天| 久久五月丁香婷婷| 成人版视频在线观看| 欧美日本97| 26uuu亚洲精品国产| AA片在线观看视频在线播放| www.99热最新视频8| 久久久婷| 久久久思思热| 99热成人| 人妻videos人妻高清| 亚洲乱码日产精品BD| 激情深爱综合| 大地9中文在线观看免费高清 | 色色色区| 久久久久久激情| 美欧成人视频| 婷婷丁香五月亚洲免费| 日日操夜夜操中国无码| 五月天色婷婷综合| 中文字幕综合网| AV在线观看网站| 在线另类视频| 丁香五月电影| 婷婷五月开心中文字幕在线| 五月天另类小说久久小说网| 中文乱子伦视频| 91精品久| 亚洲午夜视频| 亚洲欧洲另类| 少妇性BBB搡BBB爽爽爽视頻| 丁香六月激情国产| 啪啪黄页网| 91大神操美女| 深爱丁香网| 少妇人妻丰满做爰XXX| 天天舔天天摸视频| …亚洲黄色在线播放日韩、av中文a…| 激情五月婷婷六月丁香| 婷婷五月天六点丁香五月| 97AV在线视频| 99热99免费| 伊人九热| 天天肏在线观看| 五月婷婷综合热| 成人做爰A片免费看视频| 六月狠狠综合| 亚洲婷婷久久综合| 九九香蕉网| 五月天六月婷| 五月天成人综合| 九九9久九9国产视频| 无码 色| 97人人做| 夜色五月天| 欧美成人日韩| 五月天婷婷影院| 亚洲V国产V欧美V久久久久久| 久热视频这里只有精品| 欧洲亚洲免费视频9| 性无码专区无码| 五月丁香花激情综合网| 啪啪啪综合网| 激情五月天.色网| 69精品人人人人| 停停五月天激情网| 激情五月,色五月| 2022久久婷婷| 五月天婷婷久久| 激情久久久久久久久久| 69婷婷丁香午夜| www.五月天婷婷| 襙逼网| 丁香五月欧美色综合| 狠狠精品干练久久久无码中文字幕| 五月色俺婷婷| 丁香无五月网| 丁香五月91| 91夫妻网站九色| 久久久网站| 五月天开心激情综合网| 99热这里只有精品13| 国产成人+综合亚洲+天堂| 国产av天天插天天操天天爽| 五月天色色网站| 五月天婷婷视频小说| 婷婷久久免费看| 天天摸天天肏| 国产精品汇聚精彩第二页 - 高清完整版在线 - 青蛙AV | 日韩黄黄| 大香蕉中文| 天天日天天肏天天奸| 99热这里只有精品搜| 啪啪啪啪五月天| 色色婷| 99碰碰视频| 99ri视频在线观看| 国产熟妇乱子伦hd| 狠狠干狠狠色| 六月丁香五月天| 久久性视频| 五月婷婷丁香| 日本WWW九九九| 五月婷在线播放| 这里只有九九精品| 综合激情深爱| 热的无码综合视频| 五月婷婷网站| 新激情五月天色播| 亚洲色精彩| 啪啪啪大香蕉| 久久婷色| 亚洲网站在线鸭子av| 激情婷婷丁香五月天| 99在线视频免费| 玖色色综合| BlACKEDRAW视频一区二区| 日韩黄色中文字幕| 青青久在线视频免费观看| www.夜夜操| 天天综合色| 99re在线观看| 激情综合色婷婷啪啪五月天| 成人婷婷色综合| 97婷婷五月丁香| 99久久婷婷国产综合精品电影| 欧美交换配乱吟粗大25P| 性做久久久久久久免费看 | 亚洲99综合| 亚洲啪啪视频| 色色色视频| 五月亚洲激情| 婷婷五月天小说网| 激情综合一| 丁香五月AV| 婷婷婷婷婷婷婷五月丁香| 欧美人妻一区二区| 粉嫩AV久久一区二区三区| 99国产精品久久久久久久久久久| 天天日P天天射P| 男人天堂 久久| www久久艹| 久热久色| 国产另类综合| 婷婷内射视频在线| 偷拍五月丁香| 日本97在线看片| 激情五月婷婷视频一区二区三区| 九九色综合网| 五月丁香啪啪啪啪| 狠狠综合网| 婷婷导航| 色色色色色色综合网| 大香蕉人人人| 成人va在线观看视频| 热99这里只是精品| 五月天婷婷视频30| 97资源欧美日韩大香蕉超碰一区| 国产高潮A片羞羞视频涩涩| 色婷婷五月天av在线| 综合性爱网| 天天插天天玩天天干| 婷婷激情六月综合| 思思热在线精品视频| 丁香五月婷婷影院| 九九美女视频| 天天综合久久| 五月婷婷色播| 97在线观看| 成人AV免费观看| 99精品在线下载| 婷婷五月丁香啪啪| 91伦| 九九九九九无码| 99热免费| 91丁香综合| 99热精品在线| 日日操夜夜骑| 欧美情色电影一区二区| 91色综合网| www夜夜操comwww| 996er热| 丁香五月婷婷欧美成人色图| 亚洲一区先锋影音| 五月婷在线观看| 狠狠久久婷| 亚洲激情丁香五月基地| 天天激情站| se.久久视频在线观看| 26uuuu精品一区二区| 欧美视频五区| 人操91在线| 亚洲激情视频在线观看| 五月丁香激情综合| 岛国AAAV| 五月色俺婷婷| 91操碰| 9久精品视频| 久久久这里有精品| 狠狠色综合图片| 深爱激情小说五月婷婷| 99精品网| 丁香六月婷婷开心| 狠狠激情五月天| 亚洲亚洲人成综合网络| 99在线观看视频免费| 婷婷精品在线| 草草影院爱爱| 超碰免费大香蕉| 国产婷婷久久| 美女五月狠狠| 996热re视频在线观看视频| 99热这里只有精品无码| 欧美叉叉叉BBB网站| 婷婷区日本| 五月综合久久| 狠狠艹狠狠艹| 国精产品一区一区三区免费视频| 六月婷婷深深爱| 五月激情综合网| 秋霞性爱AV| 九九色综合九九色| 久久这里精彩免费在线观看| 色99在线视频| 五月丁香爱婷婷深深| 人妻人人操| 凹凸7777操操操| 国产精产国品一二三在观看| 久久五月婷综合网| 天天爽天天操| 久婷婷久草| 婷婷五月性感| 国产精品色婷婷AV综合色色| 超碰99热精品| 婷婷五月AV| WWW,色五月| 中字幕视频在线永久在线观看免费| 色婷婷六月激情| 久久精品A片777777| 婷婷六月五月天综合| 第四色色六月色综合| 久久丁香综合| 色五月色五天色情网| 综合色影| 婷婷色五月激情| 国产精自产拍久久久久久蜜 | 色婷天天| 99视频内射三四| 天天舔天天| 99视频极品在线香蕉| 五月天婷婷伊人| 久久九九怡红院| 国产精品日本一区二区在线播放 | 久久综合天天综合| 极品另类| 五月激情影院| 五月婷久久在线| 成人片在线免费看| 亚洲无码99| 5月婷婷性视频| 色色色色色五月| 婷婷久久五月| 高清无码中文字幕aVDV| 开心五月婷婷综合在线精品素人| 五月丁香综合啪啪| 五月丁香天堂网婷婷| 五月天停停日日| 色色热| 色婷婷基地| 婷婷五月丁香久久| 曰本久久女| 伊人久久大香线蕉av一区| 日本天天综合| 国产操肏网站| 性做久久久久久久免费看| www、色色色| 色婷婷丁香网| 国产女生爱爱AA| 日本三级中国三级99| 成人小说 五月天 婷婷| 操逼五月婷婷| 丁香五月婷婷五月| 婷婷激情5月| 激情五月综合网| 婷婷五月激情综合网| 色五月婷婷在线| 免费观看的婷婷五月视频在线| 袁子仪视频观看| 久久婷婷人人| 九月色婷婷婷| 成人av免费观看| 婷婷五月综合社区| 丁香婷在线| 天天草狠狠擦| 久久视频婷婷视频| 久久91久久91色欲精品| 国产FREESEXVIDEOS性中国 | 激情五月天黄色小说| 婷婷色中文| 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | 国产裸舞福利资源在线视频| 夜夜爱影院| 琪琪布丁香社区激情五月天| 五月天播播| 婷婷五月色惰| 中文AV网站| 五月丁香婷中文字幕| 亚洲日本激情| 丁香婷婷基地| 91色噜噜狠狠狠狠色综合| 丁香五月欧美婷婷综合| 亚州美女| 狠狠干狠狠干| 色噜噜狠狠色综合日日| 丁香五月天视频| 一级性爱视频| www开心激情网| 狠狠操天天操天天操| 99er日韩| 中海油常州环保涂料有限公司| 日本久草福利| 久久五月婷婷丁香| 一级性感毛片| 色色色9 9 9| 无码人妻丰满熟妇奶水区码| 五月丁香六月激情综合| 91狠狠色丁香婷婷综合久久| 99热这里有精力| 五月色影院| 丁香色色色| 婷婷五月色| 99热国产| 色婷婷丁香五月| 91丨九色丨43老版熟女| 久操人妻| 日韩成人网址| 99久久婷婷国产综合精品草原| 久久婷婷五月天激情| 丁香五月综合激情性爱| 五月丁香六月玩女人| 俺去也综合| 99热这里只有精品5| 激情无码网| 五月天婷婷基地综合网| 五月婷婷久久久| 97香蕉久久超级碰碰高清版| 色婷婷综合网| 嫩草视频在线观看| 激情综合五月天| 天天揷综合网| 久久XX日本综合| 婷婷丁香成人五月天| 亚洲小电影在线观看黄999| www.久久爱| 婷婷色色狠狠| 婷婷五月综合视频| 五月激情婷婷丁香| 欧美久久婷婷| 五月天综合在线| 91夫妻视频| 国产免费av网站| 丁香五月91| AV在线观看网站| 99国产小视频2013| 人人操人av| 五月婷婷婷| 五月丁香婷婷啪啪| 色婷婷亚洲婷婷| 9999热免费视频视频| 色婷婷精品视频| 九九热只有这里精品| 在线综合婷婷| 99只有精品| 欧美丁香五月| 国产欧美熟妇另类久久久| 亚洲色区17| 色域五月婷婷丁香| 六月丁香婷婷色综合| 99热这里只有精品官网| 免费黄色视频网址| 野战J办公桌椅H| 免费亚洲成人电影AV| 另类的婷婷| 狠狠草狠狠草| 色婷婷a v| 丰满人妻妇伦又伦精品国产| 久草a片| 五月综合视频在线| 九九99视频| 日韩九区| 果冻传媒A片一二三区| 夜色综合网| 啄木鸟黑丝一区二区| 亚洲热视频| 狠狠操狠狠爱| 91色色色视频| 色丁香五月天射婷婷爱婷婷| 国产三级秋霞| 婷婷成人五月天成人文学| 99精品偷拍视频| 99re热精品视频国| 婷婷激情视频| 色婷婷伊人激情在线观看| 狼人久草| 舔色婷婷| 午夜不卡久久精品无码免费 | 色玖玖综合| 天天色天天干天天插| 久久婷.com| 9视频在线成人网站| 婷婷色激情网| 欧美丁香五月天| 性一交一乱一交A片久久四色| 97干在线免费| 天天草天天爱| 色婷婷婷婷| 中文字幕网站在线观看| 久久五月婷天天干| 狠狠爱综合| 婷婷天堂综合| 97九色视频| 大香蕉丁香婷婷| 26uuu激情五月天| AV九九| 99热国内精品| 天天色综合网1| 青青草青青草五月天| 五月激情丁香久久综合网| www.五月天婷婷| 六月婷婷天堂| http://www.lingjunshare.com/| 亚洲综合五月| 九九色色色| 96丁香六月婷婷蜜桃综合久久| 影音先锋男人AV资源站| 六月丁香婷婷天堂| 亚洲乱码日产精品BD| 九九热这里只有精品首页| 日本精品99网站| 99这里有精品| 69人人操人人爽| 思思热在线免费视频| 99国产精品久久久久久久久久久| 五月花综合网| www.99热视频| 婷婷四月 成人 狠狠干| 亚洲成人影视在线观看| 在线另类视频| 激情五月天色色网| 天天肏天天肏天天肏| 丁香五月AV| 五月婷婷色色网址| 色婷婷五月天偷拍| 超91在线视频| 久久人人九| 99热免费精品| 亚洲操逼片| 99热婷婷| 丁香六月婷婷色XXXXX| www,五月天com| 亚洲中文字幕网| 天天综合亚洲综合网天天αⅴ| 五月综合色| 五月丁香六月在线欧美| av九九| 激情综合网,五月| 亚洲乱码日产精品BD| 99色免费视频| 久久色吧| 狠狠香蕉| 欧亚色色| 91在线就要啪| 99亚洲精品视频| 91打屁股视频网站| 337p大胆噜噜噜噜噜91Av| 日韩成人精品中文字幕| 男女啪啪做爰高潮无遮挡| 日逼免费视频| 五月丁香婷婷色播无码| 久久99综合网| 97成人丁香婷婷| 色婷婷伊人激情在线观看| 丁香婷婷月| 99视频久久| 日韩无码AV电影网站| 色婷婷综合视频| 99熟女视频| 婷婷综合网| 欧美日本一区二区三区| 九月婷婷激情| 99网| 五月婷婷久草在线视频综合| 婷婷五月丁香欧洲| 五月婷在线观看| 亚洲AAAA网| 欧美日韩国产伦精品日韩人妻一| 啪啪激情网| 青青草六月丁香| 婷色视频| 免费AV播放| 丁香六月婷婷综合缴| 六月婷婷激情| 五月激情综合婷婷| 久久久99久久| 婷婷 月 丁香| 六月丁香婷婷视频综合在线观看| 9精品久久999| 99在线热| 伊人五月成人| 综合AV在线| 任你干aa| 色色综合网站| 国产色99| 婷婷激情丁香五月天综合| 色色色九九九五月婷婷| 激情综合无码| 这里只有精品在线免费视频| 久久婷色| 亚洲九九婷婷| 婷婷丁香五月综合| 丁香久久综合| 婷婷丁香色五月久久88| 婷婷午夜精品久久久| 99九九这里有免费视频| 久久久999精品| 情趣视频66| 99热网站在线观看| 熟女啪啪视频| 亚州第一黄网| 国产精产国品一二三在观看| 99精品视频在线观看| 四色女婷婷| 日韩婷婷| 亚洲综合一区二区| 日操熟女| 综合五月天| 久久东京热婷婷五月| 思思 热 99| 五月色婷婷综合色| www.婷婷亚洲基地| 超碰在线观看三级片| 狠狠综合| 人妻激情综合| 天天爽夜夜爽天天爽夜夜爽| 亚洲天堂AV免费片| 久9热| 亚洲成人综合网在线免费观看| 亚洲超碰在线| 99黄色性生活| 草综合14| 久久99热这里只有精品23| WWW.久久久久久久| 99久久偷拍视频| 五月综合人妻| 成人龟情网丁香五月| 丁香九月激情| 色999五月色| 婷婷五月天色播| www..999热久| 五月丁香操婷逼| 色~性~乱~伦~噜| 五月天婷婷綜合院| 精品爆操| 色99无码| 31色区视频免费看| 秋霞AV吧| 超碰人妻公开在线| 成人草榴视频| 成人视频网| 免费观看全黄做爰的视频| 久久婷婷色| 六月色色婷婷| 秋霞影音91人妻久久| 久久婷婷五月天丁香| 桃色五月婷婷| 婷色影院| 欧美成人AAA片一区国产精品| 综合激情五月丁香| 五月综合视频| 99久久久久| 欧美肉大捧一进一出免费视频| 99精品在线| 99色视频| 大地9中文在线观看免费高清| 亚洲精品一区无码A片| 国产精品涩涩涩视频网站| 99国产精品久久久久久久久久久| 国自产拍偷拍精品啪啪一区二区| 99热9| 无码激情AAAAA片-区区| 婷婷激情五月呦呦| 婷婷在线日韩综合| 大香婷婷| 色婷婷操逼| 99热久| 激情五月天啪啪| 综合综合网| 99热在线这里| 超碰成人在线观看| www色婷婷| 国产乱妇乱子在线播视频播放网站 | 丁香五月开心婷婷| 激情五月天开心总和网| 五月性色| 色婷婷狠狠18禁| 日日干日日| 丁香婷婷天堂| 青青草99热久久精品国| 啪啪综合| 99亚洲精品| 五月婷A V在线| 色五月婷婷青娱乐| www.久久久久久久| 99色啊| 天天综合中文| 成人版视频在线观看| 综合婷婷| www.久久色.com| 色爽九九| 九月婷婷综合八月丁香在线观看| 深爱婷婷丁香五月激情| 色香久久| 色婷婷基地| 色色网91| 色区久久| 五月婷婷激情四月| 色噜噜狠狠色综合日日| 超碰在线人妻| 激情影院69| 国产亚洲99久久精品| 亚洲人妻一区二区 | 91seav| 五月丁香天堂网婷婷| 亚洲人妻Av| 精品国产一区二区三区四区阿崩| 吾爱AV导航| 99精品色色| 精品人妻在线| 午夜天堂一区人妻| 日韩超碰在线| 五月之婷婷| 天天日天天摸| 天天爽夜夜操| 国产1区2区3区| 凹凸操Av| 丁香五月天婷婷激情| 激情五月天99色| 天天色天天噜| 亚洲精品视频在线播放| 五月天色色色网| www.av视频xx999.com| 91色在线 | 日韩| 午夜不卡久久精品无码免费| 超碰人人操人人干| 婷婷综合精品视频97| 九九这里只有精品| 五月丁香激| www、色色色| 五月婷丁香| 久久99网站| 五月丁香婷婷深深爱| 久久综合站| 夜夜操夜夜爽| 色婷婷在线播放| 色色综合激情| 天天摸天天高潮天天爽| 噜噜噜久久| 成人 在线 日韩| 五月天婷婷伊人| 色呦呦在线| 日韩啪啪视频| 婷婷五月,偷窥偷拍网| 五月激情综合婷婷| 九九草热在线观看| 狠狠爱综合网| 五月丁香性爱| 成人av中文字幕| 九月婷婷综合网| 开心五月深爱五月丁香五月激情五月 | 五月天偷拍| 色婷婷97| 99热99在线| 色欲色欲久久宗合网| av 一区三区四区| 久久免片| 激情小说五月天| 综合色影院| 婷婷久久五月天中文字幕在线观看| 这里只有精品视频一区| 极品人妻VIDEOSSS人妻| 青草性爱视频| 五月激情综合网| 亚洲精99| 99riAv1国产在线观看| 正宗黄色毛片| WWW.17C亚洲精品| 丁香五月停停基地| 丁香五月婷老师| 91日综合欧美| 日本丁香五月| …亚洲黄色在线播放日韩、av中文a…| 五月婷天天搞视频| 综合精品99| 伊人婷婷大香蕉|