欧美成人午夜精品久久久,国产?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
返回資訊列表
99热在线播放| 久久女婷| 久久这里面只有精品视频| 婷婷五月天,影院| 五月婷婷性爱网| 翔田千里 50岁 无码| 九九免费在线视频| 久久机热这里只有精品免费视频| 中文字幕五月久久婷婷| 99国产99| 国产欧美日韩综合精品一区二区| 亚州操人在线视频| 成人午夜无码视频| 伊人五月综合网| 狠狠色丁香婷婷基地| 久久一级片| 国产成人精品亚洲线观看| 偷拍五月丁香| 夜夜干夜夜操| 五日激情综合| 久久黄色片| 狠狠香婷婷五月| 五月天色站| 日本视频久久| 日韩AV无码影片| 另类图片天天影视在线观看| 色99在线视频| 久久狠狠干| 91久久婷婷人人澡草| 性色人人爽| 超碰爱爱爱| 1024人妻无码中文字幕| www.婷婷五月.com| 壅壅儕家a| 91精品国产综合久久久不卡电影| 人人爽网| 99综合入口| 大战熟女丰满人妻AV| 思思热在线播放| 激情五月久久| 色99视频| 99精品视频在线观看| 99精品激情| 成人在线高清| www.henhenl| 婷婷伊人綜合中文| 久9热视频在线观看| 色五月婷婷五月天激情综合| 女操碰| 免费看片操逼| 99re6热在线精品视频播放速度| 99精品在线观看视频| 久热精品在看| 久热这里只有精品3| 秋霞黄色一级久久| 五月婷婷九| 久久人妻伦理| AV九九| 婷香五月| 99人妻碰碰久久久禁片| 国产黄色一级片| 日本在线wwww| 婷婷91| 丁香五月区| 光棍影院日韩精品| 婷婷五月激情综合啪啪| 激情黄色小说色五月| 激情五月色婷婷| 超碰免费大香蕉| 中文字幕成| 国产永久一黄| 色五月婷婷中文字幕| 色综合中文色综合网| 视频1区2区| 激情四射婷婷色色色| 丁香婷婷五月人体| 日韩成人精品中文字幕| 色丁香久综合在线久综合在线观看| 色色影院aaaav| xx色综合| 五月婷婷六月激情| 99在线精品免费视频| 中文字幕乱码亚洲精品一区| 六月婷婷最新网址| 琪琪秋霞| 天天做天天干天天综合网| 日韩按摩二区| 91肏| 成人国产欧美大片一区| 日韩一级网站| 亚洲激情图文小说| 国产精品色| 99啪啪| 成功精品影院| 天天操加勒比| 久狠日av| 日本九九九九| 激情五月综合第一页| 大香蕉五月天婷婷| 97色色色色色| 免费看欧美成人A片无码| 亚洲永远av在线播放| 久久婷婷五| 天天射天天干天插色综合| 丁香五月亚洲激情婷婷射| 婷婷五月天va| 91欧美日韩综合| 另类少妇人与禽zOZZ0性伦| 色色色激情网| 涩涩涩,com| 天天狠狠干| 任你爽免费视频| 亚洲乱码日产精品BD| 操比激情五月| 六月婷色六月| 综合五月婷婷| 五月 成人 婷婷| 天天人人天天爽| www.99热视频| 99爱操| 国产超碰在线| 丁香婷婷五月| 色 五月 天 婷婷 丁香 九月| 九九色精品| 五月婷婷自拍| 97超级碰| 天天爽夜夜爽夜爽精品| 被强行糟蹋的女人A片| 停停五月色宗合| 日操五月婷| 99九九99九九九视频精彩| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 噼里啪啦完整版中文在线观看| 超碰不卡在线| 亚洲天堂色色| 人人操91色| 97丁香五月天| 色五月丁香婷婷久草| 亚洲成人av中文| 性爱动图国产麻豆一区二区三区| 色婷婷www| 91久女| 五月天天天综合| 五月丁香色综合| 婷婷亚洲在线| 色婷婷狠狠干芒果TV| 五月婷婷影院| 伊人六月丁香婷婷| 成人综合视频网址| WWW.夜夜| 国产综合A片| 亚洲五月综合色播| 九色成人AV在线| 66久久视频在线| 大香网伊人久久综合| 久久99jiu9| 琪琪理论片| 激情av| 日本三级韩三级99久久| 天天日天天操心| 99色网站| 久久97| 婷婷久久五月天| 另类激情五月| 国产五月丁香在线| 日本视频不卡123区| 99在线观看视频蜜臀| 开心婷婷五月| 五月婷AV| 久久99网址| 能看的AV| 婷婷激情伍月网| 五月综合无码| 99精品爱| 五月丁香亭亭A片| 99热九九热| 97精品综合久久内射| 五月的色婷婷高潮| 人妻综合网| 婷婷久久五月| 九玖欧洲亚洲| 亚卅毛片| 中字幕视频在线永久在线观看免费| 激情网五夜婷婷| 丁香激情网| 欧美久久五月婷婷| 美欧成人视频| 国产精品A成V人在线播放 | 色香五月天| 婷婷丁香五月天综合在线日韩| 26UUU在线观看| ai97re99一本| 丁香婷婷五月| 天天色噜| 人妻videos人妻高清| 日本操B视频在线观看| 婷婷爱五月天人人爱| 潮汕成人AV片在线| 性色五月天| 欧美色播综合在线观看| 97色在线观看视频| 婷婷99视频全集高清| 91婷婷五月天嫩女| 九九热这里有精品23| 好叼操在线观看| 亚洲这里只有精品| 五月丁香六月婷婷亚洲激情综合| 97色女人在线| 久久婷综| 色五月亚洲| 婷婷色五月丁香六月欧美啪| 五月视频日本免费观看| 色婷婷成人网| 天天视频精品9| 丁香五月在线自慰| 国产色色色色| 天天综合亚洲综合| 《诡秘之主》在线观看| 久色激情| 色 噜噜 九月 婷婷| 91精品久久久久久综合五月天| 夜夜爽日日躁| 日本久热| 激情五月综合久久| 亚洲天堂AV综合网| 久久久激情| 丁香六月情| 狠狠色丁香五月婷巨| 伊人大香蕉爱聚| 开心五月婷婷激情| www.99热在线| 综合激情五月天六月婷免费视频| 就爱干 在线| 婷婷五月精品中文字幕| 日逼影音先锋AV男人资源站| 99热久久这里只有精品| 丁香五月激情综合| 丁香六月婷婷久久综合| 在线观看中文字幕亚洲| 97五月天| 丁香婷婷五月综合| 久久这里只有精品视频1| 桔色成人官方网站| 狠狠va| 99re免费精品视频| 狠狠色噜噜狠狠狠狠综合| 久久五月婷天天干| 丁香六月丁香婷婷激情| 丁香五月欧美婷婷综合| 蜜桃婷婷丁香综合久久开心亚洲| 成人国产欧美大片一区| 97久久人人人干| 六月丁香五月婷婷| 色综合色色| 超碰人人操人人干| 精品人人操| 99色色网| 俺也去综合| 疯狂做受XXXX高潮A片| 久久综合九九| 狠狠草狠狠草| 另类小说色婷婷| 亚洲另类在线观看| www.天天干| www激情| 天天操人人干| 超碰在线91| 色婷婷小说网| 不卡在线中文字幕无| 激情综合久久| 欧美顶级少妇做爰HD| 久久久人妻| www99在线观看视频| 久久hd| 色色色婷婷五月| 99爱爱网| 五月花婷婷| 丁香六月激情综合| 激情性爱五月天网页| 婷婷无五月无码视频| 色色五月婷婷网| 亚洲av电影网站| 狠狠色综合无线观看| 教师性爱毛片| 色天使色婷婷| 久月丁香爱婷婷综合| 婷婷五月丁香五月丁香| 开心五月综合| 色色色国产| 丁香五月电影| 极品五月天| 免费成片在线观看| 91操碰| 欧美天天爽| 91婷婷五月天综合视频| 天天舔天天爽| 极品少妇XXXX精品少妇偷拍| 超级碰碰碰久久网站| 五月婷婷,狠狠操| 五月天三级久久| 亚洲五月天色| 草综合14| 在线观看免费视频| 婷婷狠狠97| jiujiu热在线视频| 日日艹思思热| 婷婷丁香色五月| 亚洲人妻AV| 99热在线观看| 亚洲啪啪视频| 桔色成人在线| 99操逼| 岛国AAAV| 亚洲激情丁香五月天色| 久久丝袜婷婷| 亚洲操女| 婷婷五月天777| 色欲天天综合| 午夜婷婷| 超碰免费大香蕉| 婷婷亚洲丁香五月| 日韩啪啪网| 欧美性生交xXxX久久久| 玖玖视频福利| 99色综合| 久久五月热| 天天艹天天综合网| 精品人妻伦一二三区久| 殴美97色| 日韩婷婷五月天| 亚洲va国产va天堂va综合va| 69凹凸成人综合网| 视频综合网| 精品亚洲VA网站| 婷婷亚洲综合| 亚洲精品视频在线播放| 激情五月综合| 色婷婷色综合| 久久机只有这里精品| 亚洲AV综合网| 成人网站av免费网站推荐| 婷婷激情五月综合在线视频| 99热精品在线| 国产韩日亚洲美州欧亚综合在线| 激情综合五月天| 一级黄在线| 91丨九色丨东北熟女| 婷婷五月六月| 丁香伊人五月色婷婷五十路| 婷婷伊人五月| 中文中文在线| 丁香婷婷六月激情| 大香蕉久久| 91超碰在线观看| 日日肏夜夜干| 伊人超碰在线| 五月天伊人综合| 成人无码髙潮喷水A片| 综合久久影院| 99视频内射三四| 99热热这里只精品996小说| 九九精品视频在线6| 桃色成人网| 日本女va| 中文字幕日产A片在线看| a色色色色色| 色综合久久久久| 亚洲色图五月丁香| 五月丁香啪啪啪啪| 激情综合网丁香| 色情成人五月天| 亚洲精品国产成人AV在线| 婷婷色综合av| 婷婷色九月| 五月色网| 开心久久爱五月天| 思思久久久婷婷| 天天综合亚洲综合| 碰人人97| 久操福利| 99热99网| 丁香五月-激情综合| 激情婷婷内射| 五月天丁香久久综合| 激情五月丁香激情综合网 | 99色色色色| 亚洲欧美日韩另类| 天堂久久婷婷| 激情网五夜婷婷| 丁香色五月 97干| 激情综合五月激情| 久久密臀婷婷| 91九色国产| 97热九九| 搡BBBB搡BBB搡五十| 五月天激情Av| 婷婷五月色惰| 开心五月天激情网| 久久99热这里只有精品| 超碰激情网| 婷婷伊人网| 天天爽天天日人人爱| 狠狠色 综合色区| 激情五月狠狠| 婷婷六月激情小说网| 国精产品一区一区三区免费视频| 精品无码99| 九一牛视频探花| 久9热视频| 五月婷婷在线视频免费观看| 五月婷婷9| 午夜成人天堂久久无码日韩久久| 婷婷五月天日逼| 九九久久玖玖爱| 午夜成人网站在线观看| 五五月五月| 欧美人人超级碰| 色九月婷婷| 亚洲久久婷婷| 久久之人妻| 91中文狠狠综合| 狠狠色大香蕉| 激情五月天色婷婷综合| 99自拍视频| 色播激情| 国产偷人爽久久久久久老妇APP| 激情文学五月丁香六月婷婷| 国产va在线视频| 丁香五月久久社区| 国产精品18久久久| 午夜丁香婷婷| 五月丁香六月婷婷激情视频在线观看免费 | 精品婷婷丁香五| 99热精品在线| 狠狠的日| 五月婷婷综合潮喷| 九九精品这里只有| 五月天成人综合| 色婷婷8| 丁香色婷婷五月天| 丁香五月激情网| 九玖欧洲亚洲| 激情综合五月色在线| 丁香五月婷婷五月基地| 天天干天天日蜜臀av| 婷婷中文字幕| 五月婷婷人人人操| 99只有这里有精品在线视频| www.sezonghe| 色插综合网| www.狠狠| 五月天激情影院| 五月天婷婷涩涩| 天天狠狠综合精区| 大学生高潮无套内谢视频| 天天撸天天干天天插| 狠狠色丁香婷婷综合久久97AV| 久久久WWW| 免费成人网在线观看| 91色久| 丁香婷婷大香蕉| 这里只有精彩视频| 中文av网| 噜噜噜久久| 这里只有精品视频99| 五月丁香六月色婷婷| tingtingjiqingwuyue| 99热18| 欧日韩成人| 婷婷5月久久综合网站| 碰97 久| 国产熟妇的荡欲午夜视频| 俺去也五月| 91人人爽狠狠狠| 99乱视频| 日本色道视频网站| 激情综合五月| 99热在线观看| 99riAV成人在线视频| 九九视频在线观看视频6| 国产精品美女久久久久AV超清| 丁香激情网| www.狠狠操| 婷婷视频网| 99在线观看| 婷婷激情四射| 青青草大香| 九九综合影音先锋| 99久久亚洲国产| 欧美伊人9| 猫咪伊人久久| 99热欧美在线观看| 五月婷婷性| 丁香五月在线| 五月色网| 日韩丁香涩| 九久热| 丁香花操逼| 69久久99精品久久久久| 色综合色综合网| 亚洲网站在线鸭子av| 另类色网| 五月丁香六月婷婷综合网缴情| 另类小说激情五月天| 日本五月天网站| 九九香蕉网| 国产精品国产成人国产三级| 日本色超碰| 七七九色| 色婷婷色情| 激情五月丁香五月| 婷婷丁香十月| 大香蕉丁香五月| 五月婷婷六月丁香| 性无码专区无码| 丁香婷婷五月激情四射网| 婷婷娌伦网| 深爱婷婷基地| 五月丁香六月在线| 丁香激情五月| 婷婷色在线播放| 久久久久久天天日天天爱| 99er视频在线| 熟妇人妻中文字幕无码老熟妇| 色婷婷AV久久| 永久思思热在线| 亚洲色 视频| www色色com| 九九99精品视品| 日本综合色色| 丁香六月五月婷婷| 人人操AV| 超碰精品国产首页| 久久亚洲婷婷| 婷婷五月天激情网| 欧美日韩国产一区二区| 成人网站免费sxj| 五月婷婷偷拍| 99热人人操人人操| 婷婷五月天日日日干干干| 伊人激情啪啪| 久久99jiu9| 婷婷成人丁香色情基地30 | 影音先锋四区| 六月合五月婷| 亚洲天堂99| 9热视频在线观看| 五月天 另类图片| 九九在线视频| 中文无码婷婷| 影音先锋天天日| 9色婷婷| 精品国产va久久久久| 婷婷五月天国产在线播放| 天天射网站| 99热91| 丁香五月中文字幕| 91在线日本| 九一99| 久久人妻熟女一区二区| 凹凸探花电影| 久久九九网| 丁香五月另类色婷婷麻豆| 精a品a| 以及AA大片看看| 婷婷色网站| 久久久香| 中文字幕视频在线播放| 国产婷婷综合在线免费视频| 婷婷丁香社区| 热久久这里只有精品| 99干在线视频| 五月色婷婷综合| 丁香婷婷浪潮AV久久综合| 亚洲 无码 中文字幕 中出| 国产成人精品一区二区三区视频| 婷婷亚洲激情在线观看视频 | 精品一二三区久久AAA片| 六月丁香啪啪| 六月婷婷综合| 99re这里只有精品9| 色婷婷久久| 五月天综合久久| 丁香色五月 97干| 任你擦免费视频| 亚洲婷婷五月| 嫩草视频在线观看| 亚洲精品99| 玖玖资源部在线播放| 色婷婷av在线观看| 玖玖精品视频99| 久久精品A片777777| 狠狠狠人妻| 婷婷丁香综合网| 婷婷五月天综合小说网| 色婷婷玖玖影院| 九九无码| 入口五月婷婷六月香| 色婷婷小说| 五月丁香天堂网婷婷| 大香蕉在九| 亚洲综合激情五月| 成人五月天丁香婷| 久久久激情| 精品九九视频| 大香蕉伊在| 天天肏视频| 天天开心婷婷丁香五月| 婷婷六月香| 天天干天天拍| 久热这里只有精品在线观看 | 婷婷五月电影| 综合在线网| 色五月丁香91| 91碰碰| 手机看片日日做夜夜| 一区二区无码视频| 99综合一区| 99国产小视频2013| 91狼友视频在线观看| 婷婷中文字幕| 综合久色五月| 嫩草视频观看| 亚洲高清在线| 99热的无码| 婷婷射图| 大香蕉久久综合网| 亚洲网视屏| 精品一区二区三区木瓜| 大香蕉久久久久| 夜夜嗨一区二区三区直播内容| 五月丁香六月婷婷欧美综合| 五月天激情偷拍| 久久色吧| 久草热8精品视频在线观看| 五月天com| 欧美色骚婷婷五月天| 国产亚洲色婷婷久久99精品9j| 久久99热这里只有精品| 五月久久婷婷成人网| 国产精品久久99| 色级婷婷| 免费视频无码| 五月婷婷欧美| 亚洲婷婷免费| 丁香五月天激情综合网| 超碰免费人人| 九月久久婷婷| 伊人天堂婷婷| 99精品偷自拍| 五月天啪啪| 久久五月天视频| 只有久久精品免费| 亚洲网站在线鸭子av| 99免费青青蜜臀| 免看黄大片AA | 五月丁香六月成人| 久久婷婷91| 中文字幕乱轮| 人妻VideOssS人妻高清| 日本特黄aaaaa| www.色99| 99干视频| 色天使色婷婷| 婷婷丁香先锋资源网站| 亚洲成人日韩无码精品| 日韩一区二区A片免费观看| 丁香五月天堂| 伊人色综合网| 99无码精品| 久综合网| 色色色99| 久久久五月天| 婷婷久草| 99这里只有精品|v| 丁香五月婷婷色| 久久免片| 五月丁香六月婷| 婷婷色在线| 99精品自拍| 97色久| 99日本黄站| 日日爽天天| 婷婷五月天在线观看免费 | 无码人妻精品一区二区蜜桃色欲| 六月色色| 国产精品久久久久久久久久免费| 国产亚洲精品久久久久久豆腐| 亚洲另类电影| 国产做爰视频免费播放| 日本V在线观看不卡视频网站| 成人免费120分钟啪啪| 亚洲激情综合| 色色a| www五月| 国产亚洲精品久久久久苍井松| 任你爽视频| 色婷婷亚洲婷婷| 婷婷丁香五月综合| 91精品久久久久久久久久| 五月天婷婷无码| 一区二区传媒视频| 草草女人亚洲| 成人做爰A片免费看视频| 日本人人超碰| 丁香花五月天婷婷成人社区| 桃色成人网| 九九99九九精品视频| 色五月大| 日本va欧美va欧美va精品| 思思99热热热99| 五月欧美色色五月| 国产婷婷五月在线视频| 亚洲va成人va成人va在线观看| 91婷婷| 五月婷婷 婷婷五月 一区二区 久久久| 免費观看aV在线网址| 综合九九久久| 婷婷爱在线观看| 午夜精品777| 五月婷在线视频免费看| 五月天激情电影| 国产成人精品一区二区三区视频 | 五月天婷婷色色| 丁香五月成人论坛| 荷兰av一级| 大香蕉啪啪网| 婷婷不干网| 丁香色色色| 99视频精品8 | 欧美日韩国产成人在线| 九九av| 丁香五月激情无码视频| www.99久久久| 久久婷婷五月综合色区| 久久与婷婷| 色丁香在线视频| 九九性爱网| 丁香五月久久| a色婷婷| 五月天小说激情| 丁香婷婷性久久| 国产欧美精品AAAAAA片| 99热亚洲精品| 欧美激情综合色综合色| 97色片| 日韩人人操| 另类的婷婷| 狠狠色成人影片| 亚洲电影在线观看| 97久久久| 欧美五月婷婷| 亚洲色区17| 99er6| 九九综合| 色五月自偷自拍婷婷婷婷| 丁香五月激情综合在线观看| 婷婷激情性爱| 97人人操com| 狠狠狠狠狠草| 丰满少妇猛烈A片免费看观看| 欧美三级黄色片久久| 五月丁香婷婷中文网| 五月天啪啪啪| 九九热啪啪| 99久久成人| 精品一二三区久久AAA片| 色丁香五月天| 色婷婷综合影院| 亚洲综合视频八| 婷婷色日本| 日韩九区| 丁香五月最新网址| 播五月开心婷婷欧美综合| 丁香激情综合| 五月天婷婷丁香视频| 超碰在线国产| 天天做天天爱天天爽夜夜揉| 9久久久久久久久久久| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 久久久婷婷婷| 香蕉婷婷| 99久久亚洲国产| 亚洲日韩欧美综合VA| 操99| WWW.五月天9999| 色噜噜狠狠色综合日日| 这里只有精品免费在线视频| 九九热欧美| 99 热国产在| 99在线观看| 色综合丁香| 亚洲黄色影视| 婷婷六月色| 欧美黄色AA片哗啦啦啦| 婷激情五月天视频导航| 丁香婷婷啪啪| 亚洲成色综合网站免费观看| 久久大香蕉| 久热这里只有精品在线观看 | 五月综合色| 五月天无码| 五月婷婷丁香| 色操b| 丁香婷婷久久综合在线| 丁香五月六月综合激情| 玖玖婷婷色五月| 亚洲五月天婷婷| 玖玖色综合| 99这里有精品| site:pzdcoin.com| 国产精品第一国产精品| 久久五月激情| 97超级碰碰碰| 99超级碰免费视频| 青青夜夜狠狠夜夜狠狠| 人人肏逼视频在线一区二区| 日韩视频99| AA久久| 亚洲色热| 久久99成人性爱高清视频| 久久99激情五月天| 97碰久久| 色婷婷4| 久久99草五月婷婷| AV在线免费网站| 欧洲亚洲欧洲99久久| 9在线9在线婷婷在线国产| 久久与婷婷| 丁香激情五月综合网| 久热A片| 色综合大香蕉| 久热这里只有精品99re,久热这里只有精品7 | 日本女va| 超碰人人操人人9| 色综合丁香| 婷婷在线午夜| 亚洲图色五月天| 色婷婷色99国产综合精品| 先锋av性爱成人电影| 五月激情射| 少妇人妻人伦A片| 婷婷五月天第三页| 五月丁香婷婷福利| 日韩操女| 久久精品99国产精品日本| 99热免费看| 天天激情综合| 99久热精品在线| 五月天激情小说| 欧美日本国产欧美日本韩国99| 天天摸,天天爽| 超碰网站在线观看| 亚洲V国产V欧美V久久久久久| 丁香婷婷五月天在线视频| 婷婷五月成人有| 色五月色图| 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | av免费在线网站| 五月婷婷六月丁香| 91.com男女操| 五月激情综| 亚洲天堂AV免费片| 久久98热re| 亚洲99精品九九在线| 人妻中文在线| 夜夜谢天天干| 99亚洲无码| 99久久国产成人精品| 99婷婷国产最新视频| 婷婷99综合| 婷婷狠狠操| 色婷婷先锋| 色色色色综合| 综合色综合| 久久激情综合| 九九av| 夜夜躁婷婷AV| 成人视频免费观看高清完整版在线观看| 99国产精品白浆在线观看免费| 欧美 日韩 成人 在线| 在线1青婷| 六月婷婷激情小说网| 做爱夜夜干天天操| 天天久久狠狠色综合| 久久久久久久久久久久久久久久久精典| 超碰碰碰碰| 婷婷色五月激情| 男人的天堂五月丁香| 夜夜干天天干| dingxiangtingtingliuyue| 国产成人一区二区三区在线观看| 婷婷五月丁香91| 五月天六月婷婷| 婷婷五月色丁香在线看| 色婷婷最爱五月| 热九九在线| 天堂综合久| 亚洲综合在线播放| 国产精品国产| 《久久综合九色综合97婷婷| 99综合成人视频在线观看| 狼人伊人天堂| 农村熟妇高潮精品A片| 色综合99| 99色色网| 色婷婷电影网| 国产日韩精品SUV| 99精品在线观看| 激情玖玖sh| 少妇搡BBBB搡BBB搡毛茸茸| 久久婷婷视频| 无码免费人妻A片AAA毛片西瓜| 天天舔天天爽| 99热这里只有精品99| 国产亚洲精品久久久久久久久动漫 | 天天日天天干天天插天天射| 夜夜撸天天日| www夜夜操comwww| 色色色99| 色你久久| 婷婷五月六月| 九九热最新| 亚洲字幕AV一区二区三区四区| 婷婷激情小说| 婷婷丁香综合网| 色色色色色色色五月| 狠狠色婷婷色| 激情五月色综合网| 影音先锋一区二区三区| 六月婷婷香蕉| 青青草a在线| 婷婷中文字幕版| 思思热AV| 玖玖色综合网| 91丨九色丨东北熟女| 伊人99久久| 色婷婷综合电影| 色五月成人| 91艹人| 亚洲色情网站| 这里只有精品视频在线| www.99热| 亚洲AV日韩在线观看| 九九99香蕉在线视频播放| 色色吧综合| 一二三区视频韩国| 丁香五月社区| 五月婷婷六月天| 日本综合99| 婷婷综合视频| 婷婷丁香六月激情综合| 亚洲五月天另类小说图片| 中文字幕永久在线| 久久曰9| 激情综合五| 少妇婷婷五月天| 五月综合激情| 爱99干99| 色丁香五月天| WWW.夜夜| 99无码视频| 成人无码中文| 激情久久四色| 九九热在线精品| 婷婷视频网| 九九综合图片网| 丁香5月啪啪| 碰超99| 九月丁香八月婷婷加勒比| 插逼综合网| 99成人无码| 99re视频在线播放| 婷婷黄色网| 婷婷 久综合| 综合婷婷都市激情| 中文字幕日本最新乱码视频| 久久激情五月婷婷| 天天搽天天射| 婷婷久久精品| 日本在线观看99| 亚洲国产色婷婷| 激情五月天网站| 国产女生爱爱AA| 亚洲丁香五月天在线视频| 亚洲六月色婷婷| 超碰69天堂| 五月六月丁香婷婷在线观看| 五月天婷婷在线AN| 热久69| 99日韩网站| 99色在线| 久久9久久| 五月婷婷六月情| 91在线资源| 夜夜www| 婷婷五月天AV| 肏日网在线看| 天天干天天干天天干天天干天天干天天干天天| 任你爽免费视频| 99偷拍视频在线日本| 天天操夜夜爽| 97日本操| 色婷婷丁香AV综合| 国产美女无遮挡裸体毛片A片| 久久曰曰| 97香蕉久久超级碰碰高清版| 激情99| 色五月涩涩婷婷| AV网在线观看| 久久欧洲综合网| 91制片厂久久久国产电影| 五月丁激情| 六月丁丁香| 色五月之第四色| 99精品免费| 亚洲激情免费久久| 99视频自拍| 欧美成性色| 99精品免费| 另类图片激情五月天| 九九热在线精品视频| sS丁香五月婷婷| 日本欧美成人片AAAA| 人人草公开操| 熟妇无码乱子成人精品| 另类婷婷丁香| 久久人妻熟女一区二区| 五月丁香网站在线播放| 狠狠干最新地址| 激情 婷婷 丁香五月天| 超碰亚洲欧美| 婷婷五月天成人综合网| 色五月婷婷丁香凹凸| AV性爱在线| …亚洲黄色在线播放日韩、av中文a…| 婷婷五月天激情开心网| 亚洲成人另类| 九九在线视频| 婷婷五月AA五月在线| 九色综合网| 久久婷婷综合五月趴| 米奇激情婷婷| 色婷婷狠狠久久综合五月 | 色婷婷激情| 日韩操人| 禁欲电影完整版在线播放| Va另类视频| 欧美色偷偷大香| 99精品在线观看| 日韩欧洲亚洲| 五月丁香影院| 婷婷五月六月激情| 97国产精品女人碰碰| 亚洲综合视频在线| 天天肏屄夜夜爽| 亚洲偷| 丁香五月视频在线观看| 天天网曰日曰夜夜综合永久免费| www.maotanji.com| 丁香蜜臀黄色婷婷五月天| 粉嫩AV久久一区二区三区| 色婷婷狠狠18| 中文字幕AV在线播放| 国产亚洲精品AAAAAAA片| 狠狠操狠狠干综合| 欧美在线干| 亚洲色图欧美色图日本视频| 成人va在线播放| 久久黄A片| www.久操| 五月婷婷中文字幕| 亚洲噜色| 日本啪啪天堂| 欧美情色一区| 国产avapp 网| 综合xx网| 欧美性爱中文字幕| 中文字幕中文有码在线| 天天干天天做| 日 日干 日日做| 99久热精品在线| 色五月婷婷五月天| 精品人妻一区| 五月天六月天| 98永久精品| 超碰操日| 丁香六月激情| 久久久免费精彩视频| www.夜夜操.con| 日韩成人AV在线| 90色免费视频| 人妻久久久久久久 | 色婷视频| 婷婷丁香人妻天天| 他改变了拜占庭| 狠爱婷色| 两性婷婷丁香五月| av九九| 五月天色不卡| 婷婷五月天激情综合深爱| 99久.| 丁香五月婷婷Av| 五月伊人91| 五月婷婷丁香五月| 99热只有| 99九九精品| 色五月在线| 久久性爱视频| 26uuu色五月| 天天狠狠综合精区| 九九热在线视频| 天天综合五月天| 99热只有这里有精品| 五月丁香六月婷婷色| 亚洲中文字幕AV| 色五月自偷自拍婷婷婷婷| 激情五月天.色网| 亚洲色网络| 色五月色图| 色婷婷成人| 五月天激情社区| 婷婷激情综合色五月久久,色婷婷丁香花,丁香婷婷五月情天,久久婷婷五月综合色 | 久久视这里只有精品| 五月天伊人综合| 99资源人人| 日韩熟女啪啪视频| 思思热视频| 九九aV| 另类视在线| 五月丁香激情综合网| 国产视频婷婷| 婷婷噜噜| 亚洲五月天婷婷在线| 激情深爱综合| 思思99精品视频在线观看| 婷婷五月天成人导航| 99热亚洲| 日日干五月天婷婷| 久久精品99| 欧美在线干| 日本在线视频www色| 9热视频在线观看| 91九色熟女| 任你日视频| www.久9| 亚洲在线视频321| 午夜日日| 欧洲亚洲免费视频9| 婷婷久久五月天丁香| 五月丁香综合在线| 99啪在线视频| 丁香六月婷婷久久高清| AV操逼网| 99色天堂| 婷婷5月开心6月| 五月天久久成人| 97韩国久久电影院| 九九热最新地址| 色婷婷日本| www.色综合| 99欧美| 欧美日韩91| 成人美女网| 综合激情五月天| 婷婷干| 成人人操| 99热爱爱干干日| jiujiu无码五区| 久热这里只有精品66| 狠狠五月综合在线| 色婷婷激情| 五月丁香六月在线| 97久久超碰| 婷婷精品在线| 26uuu欧美日韩| 99精品久久久久久久婷婷久久 | 婷婷五月天熟妇| xx人人xx| 任你日视频| 日本婷婷五月天| 亚洲天堂色| 久久综合影院| 婷婷五月天激情网址| 婷婷色系婷色| 蜜桃五月天| 超碰在线免费| www久久久| 伊人久热91| 九九熱最新視頻| 美国天天日天天操| 另类视频一区| 中文字幕 中文字幕明步| 色婷婷亚洲综合av| 免费国产VA国产免费| 六月丁香激情综合| 色丁香五月| 色色色综合网| 百度一下国产精品A| 久草大| 欧美亚洲婷婷五月| 五月丁香 啪啪| 大色鬼综合| 丁香五月ⅤA久久久| 激情五月天婷婷久久久久久久久久久| 色小说五月婷婷| 人人摸人人操人人爽| 果冻传媒A片一二三区| 色玖玖爱| 这里只有精品视频一区| 久久五月丁香| 超爽内射| 蜜臀A∨在线水帘洞| 狠狠色噜噜狠狠| 亚洲欧洲中文日韩久久AV乱码| 五月丁香久久综合色| 丁香五月婷婷呀| 人人操97| 天天肏天天舔AV| 五月丁香婷婷久久| 色哟哟精品| 婷婷热色| 色色日韩无码| 五月天色色色| 9 9热这里有精品| 思思热99在线| 99热地址| 99九九在线视频| 五月丁香六月婷婷开心网| 超碰在线人妻| 成人网在线视频| 六月色播| 婷婷五月天天| 五月丁了香蕉综合| 日本超碰在线| 婷婷色五月天色| 99热 在线观看| 996er热| 婷婷五月天久久综合88| 天天综合天天玩夜夜玩天天玩夜夜玩 | 成人在线综合| 国产精品 的国产| 人妻久久久久久久久妻久久久久| 狠狠综合网| 激情综合网色五月| 天天天干夜夜夜操| www.玖玖九| tingtingzonghewang| CHINESE熟女老女人HD视频| 日本熟妇精品99| 欧美va在线观看| 婷婷伊人75| 五月丁香婷婷五月| 天天干天天干天天操| 热九九精品| 亚洲啪视频| 麻豆雪千夏| 久久精品人妻| 青青草五月天| 国产欧洲欧洲精品久久| 色婷婷丁香AV综合| 婷婷涩五月天综合| 区欧美日韩成人| 战争与艾拉电影免费观看| 夜夜爽天天爽| WWW.桔色成人.COM入口|