免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

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

Django外賣(mài)配送分析系統(tǒng)實(shí)戰(zhàn):從數(shù)據(jù)建模到可視化

Django外賣(mài)配送分析系統(tǒng)實(shí)戰(zhàn):從數(shù)據(jù)建模到可視化 我一直在用Python做數(shù)據(jù)分析類的項(xiàng)目最近一段時(shí)間把整套外賣(mài)配送分析流程搬到了Django上從訂單數(shù)據(jù)清洗、指標(biāo)統(tǒng)計(jì)到圖表可視化全部在一個(gè)Web項(xiàng)目里閉環(huán)完成。這個(gè)系統(tǒng)說(shuō)到底解決的是一個(gè)很常見(jiàn)的尷尬運(yùn)營(yíng)手里攢著大量訂單數(shù)據(jù)、配送記錄和商家信息但每次想看某個(gè)時(shí)段的配送情況、哪個(gè)區(qū)域單量爆發(fā)、哪位騎手效率下降都得讓技術(shù)臨時(shí)跑SQL或手動(dòng)拉Excel數(shù)據(jù)口徑換一個(gè)就要重新算一遍。把分析固化成一個(gè)Django系統(tǒng)之后日常運(yùn)營(yíng)打開(kāi)瀏覽器就能看到所有關(guān)鍵指標(biāo)這比我以前用腳本處理數(shù)據(jù)再生成報(bào)告要直觀得多。適合誰(shuí)看兩個(gè)方面一是剛學(xué)完Django基礎(chǔ)、想找一個(gè)完整體驗(yàn)數(shù)據(jù)建模、接口開(kāi)發(fā)、圖表渲染全流程的新手二是需要用Web方式做數(shù)據(jù)分析可視化的開(kāi)發(fā)人員比如餐飲、即時(shí)配送、本地生活這類業(yè)務(wù)場(chǎng)景。如果你只是想把CSV文件畫(huà)個(gè)圖那用Jupyter Notebook就夠沒(méi)必要上系統(tǒng)但如果你希望最終交付的是“一個(gè)能給別人用的產(chǎn)品”這篇文章的經(jīng)驗(yàn)應(yīng)該對(duì)你有價(jià)值。項(xiàng)目代號(hào)里的“35k9z86f”不用糾結(jié)就是當(dāng)時(shí)內(nèi)部倉(cāng)庫(kù)的一個(gè)標(biāo)識(shí)編號(hào)跟技術(shù)方案沒(méi)有關(guān)系。1. 系統(tǒng)整體設(shè)計(jì)與技術(shù)選型思路1.1 外賣(mài)配送分析系統(tǒng)到底要解決什么問(wèn)題外賣(mài)配送的本質(zhì)是“訂單-商家-配送員-時(shí)間-位置”五要素的協(xié)同。單看一張訂單表沒(méi)有任何意義把訂單、配送員、商家、時(shí)間、位置聯(lián)合起來(lái)才能回答以下問(wèn)題門(mén)店的訂單集中在哪些時(shí)段午高峰和夜宵時(shí)段是不是同樣需要運(yùn)力外賣(mài)平均配送時(shí)長(zhǎng)是多少哪個(gè)環(huán)節(jié)拖后腿是接單慢、到店慢還是送達(dá)慢哪些商圈或配送區(qū)域單量密集需不需要調(diào)整配送運(yùn)力每個(gè)騎手每天承接多少單平均配送用時(shí)多少有沒(méi)有異常超時(shí)單哪些商家貢獻(xiàn)了主要銷售額客單價(jià)水平又如何這些問(wèn)題的共同點(diǎn)是它們都不是單表查詢可以解決的必須把多張表關(guān)聯(lián)起來(lái)做分組聚合。所以數(shù)據(jù)建模時(shí)就要按“業(yè)務(wù)流程”去建模而不是按“報(bào)表需求”去建。一開(kāi)始如果只想著“我要一個(gè)訂單表”最后做出來(lái)的系統(tǒng)一定會(huì)在統(tǒng)計(jì)時(shí)處處碰壁比如想分析騎手效率時(shí)發(fā)現(xiàn)訂單表里根本沒(méi)有騎手ID。先把業(yè)務(wù)鏈路理清楚再設(shè)計(jì)表結(jié)構(gòu)這套思路放到任何數(shù)據(jù)分析項(xiàng)目里都通用。1.2 為什么選擇Django而非Flask或Node我經(jīng)常被問(wèn)到一個(gè)問(wèn)題做數(shù)據(jù)分析可視化為什么不用Flask說(shuō)實(shí)話Flask確實(shí)也能做但我更看重Django的自帶能力。下面這個(gè)對(duì)比表可以直觀看出來(lái)能力DjangoFlaskNode/ExpressORM內(nèi)置遷移機(jī)制完善需要自己選配SQLAlchemy需要單獨(dú)選型Admin后臺(tái)自帶可直接錄入數(shù)據(jù)需要擴(kuò)展包需要額外開(kāi)發(fā)用戶認(rèn)證內(nèi)置User/Permission自己集成自己集成模板渲染自帶模板引擎Jinja2可選自己選適合場(chǎng)景完整業(yè)務(wù)系統(tǒng)輕量API/原型高并發(fā)實(shí)時(shí)系統(tǒng)Django是水電齊全的精裝房Flask是毛坯房。做外賣(mài)配送分析系統(tǒng)時(shí)我們需要的東西——用戶管理、數(shù)據(jù)庫(kù)遷移、模型關(guān)系、后臺(tái)錄入、模板渲染——Django全都提供了我只需要把業(yè)務(wù)邏輯填進(jìn)去。這也是我在眾多方案里選Django的核心原因。而且對(duì)新手來(lái)說(shuō)Django的“約定優(yōu)于配置”特性會(huì)減少很多決策成本對(duì)團(tuán)隊(duì)來(lái)說(shuō)Django的項(xiàng)目結(jié)構(gòu)規(guī)范性對(duì)后期維護(hù)幫助很大。1.3 可視化方案ECharts還是Chart.js還是AntV數(shù)據(jù)可視化分兩層后端負(fù)責(zé)把統(tǒng)計(jì)結(jié)果算出來(lái)前端負(fù)責(zé)把統(tǒng)計(jì)結(jié)果畫(huà)出來(lái)。選型時(shí)我主要考慮三點(diǎn)圖表類型是否覆蓋需求需要折線圖、柱狀圖、餅圖、熱力圖、地圖ECharts覆蓋最全。中文資料與社區(qū)成熟度ECharts文檔很完善遇到問(wèn)題可以快速找到解決方案。部署與定制成本ECharts支持按需引入構(gòu)建也支持直接用靜態(tài)js文件很適合企業(yè)內(nèi)部系統(tǒng)。Chart.js能畫(huà)基礎(chǔ)圖表但熱力、地圖類較弱AntV功能強(qiáng)但學(xué)習(xí)成本高。最終選擇ECharts核心原因是它的“開(kāi)箱即用”程度最高。另外一個(gè)實(shí)際經(jīng)驗(yàn)是ECharts的官方示例庫(kù)非常豐富很多需求直接改官方示例代碼就能完成這對(duì)不擅長(zhǎng)前端樣式的后端開(kāi)發(fā)者尤其友好。2. 環(huán)境準(zhǔn)備與項(xiàng)目骨架搭建2.1 開(kāi)發(fā)環(huán)境與版本選擇指南寫(xiě)代碼首先是環(huán)境。我的建議是Python版本3.10、3.11、3.12都行。Django 4.2 LTS官方支持到2026年Django 5.x支持到2029年生產(chǎn)環(huán)境優(yōu)先選LTS版本本地開(kāi)發(fā)可以用較新版本。數(shù)據(jù)庫(kù)本地演示用SQLite部署用MySQL 8.0或PostgreSQL。如果是面向正式運(yùn)營(yíng)的系統(tǒng)不建議用SQLite因?yàn)椴l(fā)寫(xiě)入能力有限多個(gè)后臺(tái)用戶同時(shí)錄單時(shí)容易鎖庫(kù)。代碼編輯VSCode搭配Python插件或PyCharm選哪種都行只要把虛擬環(huán)境和Django環(huán)境跑通。安裝步驟python -m venv venv source venv/bin/activate pip install django4.2.16 pip install pillowPillow是后面處理圖片和地圖素材時(shí)需要用到的基礎(chǔ)庫(kù)。Windows下如果使用MySQL安裝mysqlclient容易編譯失敗有兩個(gè)解決路徑安裝whl包或者改用pymysql在項(xiàng)目的__init__.py中加入import pymysql; pymysql.install_as_MySQLdb()。我個(gè)人的習(xí)慣是項(xiàng)目早期統(tǒng)一用SQLite讓團(tuán)隊(duì)先跑通功能等數(shù)據(jù)量上來(lái)或者并發(fā)需求出現(xiàn)再遷移到MySQL。Django遷移工具在兩種數(shù)據(jù)庫(kù)之間切換成本很低這也是選Django的一個(gè)明顯好處。2.2 創(chuàng)建Django項(xiàng)目和App項(xiàng)目名叫takeout_analysis下面建兩個(gè)業(yè)務(wù)apporders和analysis。命令如下django-admin startproject takeout_analysis . python manage.py startapp orders python manage.py startapp analysis有人會(huì)問(wèn)“為什么把orders和analysis分開(kāi)用一個(gè)app不行嗎”這里有一個(gè)模塊劃分的考慮。orders只負(fù)責(zé)數(shù)據(jù)實(shí)體Store、Courier、Order、DeliveryRecordanalysis負(fù)責(zé)統(tǒng)計(jì)視圖、API接口和圖表頁(yè)面。后續(xù)如果需要把orders換成其他業(yè)務(wù)系統(tǒng)analysis能獨(dú)立復(fù)用。數(shù)據(jù)、分析兩個(gè)模塊的解耦比一個(gè)app里所有代碼堆在一起好維護(hù)得多。2.3 settings配置要點(diǎn)打開(kāi)settings.py重點(diǎn)改三塊。第一塊是INSTALLED_APPSINSTALLED_APPS [ django.contrib.admin, django.contrib.auth, django.contrib.contenttypes, django.contrib.sessions, django.contrib.messages, django.contrib.staticfiles, orders, analysis, ]第二塊是數(shù)據(jù)庫(kù)。本地先用SQLiteDATABASES { default: { ENGINE: django.db.backends.sqlite3, NAME: BASE_DIR / db.sqlite3, } }第三塊是靜態(tài)文件。ECharts的js文件放到static目錄STATIC_URL static/ STATICFILES_DIRS [ BASE_DIR / static, ]把這三塊配置寫(xiě)在項(xiàng)目早期能避免后面開(kāi)發(fā)到一半再去補(bǔ)基礎(chǔ)配置。這里特別注意一定要提前配好時(shí)區(qū)TIME_ZONE Asia/Shanghai USE_TZ False統(tǒng)計(jì)折線圖按時(shí)段聚合時(shí)如果時(shí)區(qū)不對(duì)你會(huì)很痛苦地發(fā)現(xiàn)數(shù)據(jù)全部偏移了幾個(gè)小時(shí)。第5章我會(huì)專門(mén)說(shuō)這個(gè)坑。3. 數(shù)據(jù)模型設(shè)計(jì)與業(yè)務(wù)邏輯實(shí)現(xiàn)3.1 外賣(mài)配送分析需要哪些核心數(shù)據(jù)表數(shù)據(jù)模型設(shè)計(jì)是整個(gè)系統(tǒng)的地基。我建議首版先建下面五張表表名主要字段說(shuō)明Shop 店鋪表name、category、address、longitude、latitude、rating保存商家基礎(chǔ)信息供訂單關(guān)聯(lián)和區(qū)域分析Courier 配送員表name、phone、status、region配送員信息關(guān)聯(lián)配送記錄Order 訂單表order_no、shop、customer_phone、created_at、amount、delivery_fee、status訂單主體分析業(yè)務(wù)量、銷售額DeliveryRecord 配送記錄表order、courier、accepted_time、arrived_shop_time、delivered_time、distance_km配送鏈路的時(shí)間戳用于計(jì)算各環(huán)節(jié)耗時(shí)Region 區(qū)域表city、district、name、latitude、longitude、radius商圈/區(qū)域定義用于熱力分析與運(yùn)力規(guī)劃這里有一個(gè)設(shè)計(jì)經(jīng)驗(yàn)不要把所有東西都塞在訂單表里尤其是配送時(shí)間戳。原因在于訂單的“交易屬性”和“配送履約屬性”是兩類數(shù)據(jù)交易屬性相對(duì)固定配送履約屬性變更頻繁如果都放一張表一個(gè)騎手改派訂單會(huì)導(dǎo)致記錄不斷被更新歷史報(bào)表追蹤會(huì)很麻煩。拆分之后訂單表只管訂單本身配送記錄可以保留多條歷史軌跡甚至能給同一條訂單保留改派前后兩條配送記錄分析時(shí)取最新一條即可。ORM示例from django.db import models class Shop(models.Model): name models.CharField(max_length100) category models.CharField(max_length50, blankTrue) longitude models.FloatField() latitude models.FloatField() rating models.FloatField(default0) class Order(models.Model): STATUS_CHOICES [ (pending, 待接單), (delivering, 配送中), (completed, 已完成), (cancelled, 已取消), ] order_no models.CharField(max_length32, uniqueTrue) shop models.ForeignKey(Shop, on_deletemodels.CASCADE, related_nameorders) created_at models.DateTimeField(db_indexTrue) amount models.DecimalField(max_digits10, decimal_places2) delivery_fee models.DecimalField(max_digits8, decimal_places2) status models.CharField(max_length20, choicesSTATUS_CHOICES, defaultpending)在訂單的created_at上加db_indexTrue因?yàn)楹竺嫠汹厔?shì)分析都會(huì)按這個(gè)字段分組聚合有索引和沒(méi)索引的區(qū)別非常明顯。3.2 用Django ORM完成日常查詢、刪除與聚合熱搜詞里有“django執(zhí)行查詢-刪除對(duì)象”這里展開(kāi)說(shuō)。Django ORM最常用的幾個(gè)操作。新增一條訂單shop Shop.objects.get(id1) Order.objects.create( order_no202501010001, shopshop, created_at2025-01-01 12:00:00, amount35.50, delivery_fee5.00, statuscompleted, )查詢已完成訂單數(shù)量completed_count Order.objects.filter(statuscompleted).count()刪除對(duì)象# 刪除單條 order Order.objects.get(order_no202501010001) order.delete() # 批量刪除delete() 會(huì)返回(coll_count, {model_name: count}) Order.objects.filter(statuscancelled).delete()刪除時(shí)需要注意外鍵行為。在on_deletemodels.CASCADE下刪除店鋪會(huì)連帶刪除該店鋪的訂單如果只想保留歷史訂單選models.PROTECT或SET_NULL更安全。聚合統(tǒng)計(jì)是分析系統(tǒng)的核心用aggregate和annotatefrom django.db.models import Count, Sum, Avg total_amount Order.objects.filter( statuscompleted ).aggregate(totalSum(amount), avgSum(amount) / Count(id))按店鋪統(tǒng)計(jì)訂單數(shù)result ( Order.objects.filter(statuscompleted) .values(shop__name) .annotate(order_countCount(id)) .order_by(-order_count) )看到shop__name這種寫(xiě)法代表跨表關(guān)聯(lián)查詢。Django ORM可以用雙下劃線把關(guān)系鏈串起來(lái)這是分析系統(tǒng)里最常用的寫(xiě)法。我經(jīng)常跟新手強(qiáng)調(diào)數(shù)據(jù)量不大的時(shí)候先在Django shell里驗(yàn)證SQL的結(jié)果對(duì)不對(duì)再寫(xiě)進(jìn)視圖不要直接在瀏覽器里刷頁(yè)面調(diào)試。3.3 Admin后臺(tái)快速錄入與CSV批量導(dǎo)入Django自帶Admin是這套方案的一個(gè)隱性優(yōu)勢(shì)。orders/admin.pyfrom django.contrib import admin from .models import Shop, Order, Courier, DeliveryRecord admin.register(Order) class OrderAdmin(admin.ModelAdmin): list_display (order_no, shop, created_at, amount, status) list_filter (status, created_at)這樣運(yùn)營(yíng)人員就能直接用后臺(tái)錄單、查單。但是手動(dòng)錄入大量歷史數(shù)據(jù)不現(xiàn)實(shí)最好做一個(gè)CSV導(dǎo)入接口。最簡(jiǎn)單的版本import csv from django.http import HttpResponse from django.db import transaction def import_orders(request): ... with transaction.atomic(): for row in reader: shop Shop.objects.get(idrow[shop_id]) Order.objects.create( order_norow[order_no], shopshop, created_atrow[created_at], amountrow[amount], delivery_feerow[delivery_fee], statusrow[status], )用transaction.atomic()包住整個(gè)導(dǎo)入過(guò)程萬(wàn)一中間有一行數(shù)據(jù)異常要么全部回滾要么全部寫(xiě)入不會(huì)出現(xiàn)“導(dǎo)了一半數(shù)據(jù)庫(kù)里臟數(shù)據(jù)”的情況。另外CSV導(dǎo)入前建議先做字段完整性校驗(yàn)比如訂單號(hào)是否重復(fù)、店鋪ID是否存在減少入庫(kù)后才發(fā)現(xiàn)問(wèn)題的概率。4. 數(shù)據(jù)分析指標(biāo)與可視化實(shí)現(xiàn)4.1 外賣(mài)配送分析的指標(biāo)怎么定義才不跑偏在寫(xiě)聚合查詢之前先把指標(biāo)口徑統(tǒng)一否則后面返工特別痛苦。我常用的口徑定義訂單量趨勢(shì)按天或按小時(shí)統(tǒng)計(jì)“已完成”訂單數(shù)取消單不計(jì)入業(yè)務(wù)量。平均配送時(shí)長(zhǎng)delivered_time - created_at只統(tǒng)計(jì)已完成訂單。高峰時(shí)段按小時(shí)分桶統(tǒng)計(jì)訂單量找出top10時(shí)段往往午高峰和夜宵時(shí)段一起出現(xiàn)。騎手效率統(tǒng)計(jì)每位騎手的日均完成單量、平均配送時(shí)長(zhǎng)、超時(shí)率。區(qū)域熱度把所有完成訂單的店鋪經(jīng)緯度聚合到區(qū)域網(wǎng)格用熱力圖表示。商家貢獻(xiàn)按店鋪聚合銷售額、訂單量、客單價(jià)。這里我特別建議加一個(gè)“取消率”指標(biāo)某一時(shí)段取消率突然升高很可能代表配送壓力過(guò)大或惡劣天氣影響比單純看訂單量更早發(fā)現(xiàn)問(wèn)題。比如周五晚高峰突降暴雨訂單量可能沒(méi)變但取消率翻倍這時(shí)候運(yùn)營(yíng)就應(yīng)該提前安排增援運(yùn)力而不是等到訂單積壓才反應(yīng)。4.2 后端API如何返回可視化需要的數(shù)據(jù)把統(tǒng)計(jì)邏輯放在視圖函數(shù)里返回JSON給前端。一個(gè)訂單量趨勢(shì)接口的完整寫(xiě)法from django.http import JsonResponse from django.db.models import Count from django.db.models.functions import TruncHour from .models import Order def order_trend_api(request): trend_data ( Order.objects.filter(statuscompleted) .annotate(hourTruncHour(created_at)) .values(hour) .annotate(order_countCount(id)) .order_by(hour) ) items [{ hour: item[hour].strftime(%Y-%m-%d %H:00), count: item[order_count], } for item in trend_data] return JsonResponse({items: items})注意幾個(gè)細(xì)節(jié)TruncHour是Django 2.2之后內(nèi)置的數(shù)據(jù)庫(kù)函數(shù)可以在數(shù)據(jù)庫(kù)層面按小時(shí)截?cái)鄷r(shí)間比Python里循環(huán)處理快很多。不能用item[hour]直接丟給JsonResponsedatetime對(duì)象不是JSON可序列化類型所以要先用strftime格式化。如果列表里中文亂碼在JsonResponse里加上json_dumps_params{ensure_ascii: False}即可。如果要做騎手效率排行接口可以仿照這種寫(xiě)法from django.db.models import Count, Avg, F def courier_stats_api(request): stats ( DeliveryRecord.objects .values(courier__name) .annotate( order_countCount(id), avg_minutesAvg(F(delivered_time) - F(accepted_time)) ) .order_by(-order_count)[:20] ) items [{ name: item[courier__name], count: item[order_count], avg_minutes: round(item[avg_minutes].total_seconds() / 60, 1) if item[avg_minutes] else 0, } for item in stats] return JsonResponse({items: items})F表達(dá)式用于在數(shù)據(jù)庫(kù)層面對(duì)同一行的多個(gè)字段做運(yùn)算不需要把整行加載到Python內(nèi)存中性能上更優(yōu)。這也是熱詞里“django執(zhí)行查詢”被頻繁搜索的原因——ORM的查詢能力直接決定了分析系統(tǒng)的開(kāi)發(fā)效率。4.3 前端渲染讓圖表動(dòng)起來(lái)前端需要兩張核心圖表訂單趨勢(shì)折線圖和店鋪排行柱狀圖。模板頁(yè)面templates/analysis/dashboard.htmldiv idtrendChart stylewidth:100%; height:400px;/div div idshopChart stylewidth:100%; height:400px;/div script src{% static echarts.min.js %}/script script function renderTrend(items) { var chart echarts.init(document.getElementById(trendChart)); chart.setOption({ title: { text: 訂單量趨勢(shì) }, tooltip: { trigger: axis }, xAxis: { type: category, data: items.map(item item.hour) }, yAxis: { type: value }, series: [{ type: line, smooth: true, areaStyle: {}, data: items.map(item item.count) }] }); } fetch(/analysis/order-trend/) .then(res res.json()) .then(data renderTrend(data.items)); /script前端拿到數(shù)據(jù)后只用負(fù)責(zé)把數(shù)組映射到坐標(biāo)軸數(shù)據(jù)計(jì)算邏輯全在后端這個(gè)分離結(jié)構(gòu)對(duì)后期維護(hù)友好得多。改圖表類型、加第二個(gè)Y軸都不需要?jiǎng)雍蠖舜a。不建議在服務(wù)端動(dòng)態(tài)拼接大段JS調(diào)試起來(lái)非常痛苦。模板里的console和onerror在開(kāi)發(fā)階段可以保留等穩(wěn)定了再清理掉。4.4 大屏模式的擴(kuò)展思路做演示的時(shí)候會(huì)發(fā)現(xiàn)單張卡片式圖表不夠直觀。我的做法是在dashboard頁(yè)面基礎(chǔ)上再做一個(gè)大屏頁(yè)面三行多列頂部放核心數(shù)字卡片今日訂單量、平均配送時(shí)長(zhǎng)、訂單完成率中部放訂單趨勢(shì)折線圖和商家餅圖底部放熱力圖和時(shí)間維度切換按鈕。ECharts的grid布局可以自由控制每張圖的位置。如果需要大屏自動(dòng)刷新用setInterval(() { refreshData(); }, 30000)每30秒重新請(qǐng)求一次接口。這樣業(yè)務(wù)團(tuán)隊(duì)把大屏投到會(huì)議室電視上不需要手動(dòng)刷新就能實(shí)時(shí)掌握運(yùn)力情況。5. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄5.1 時(shí)區(qū)問(wèn)題直接導(dǎo)致統(tǒng)計(jì)折線圖偏移8個(gè)小時(shí)這個(gè)是新手最容易崩潰的問(wèn)題。本地測(cè)試的時(shí)候數(shù)據(jù)正常部署到服務(wù)器后圖表全部比實(shí)際晚8小時(shí)或早8小時(shí)。原因就是Django的USE_TZ默認(rèn)是True數(shù)據(jù)庫(kù)保存的是UTC時(shí)間你看到的本地時(shí)間其實(shí)是模板渲染時(shí)轉(zhuǎn)換的但分組統(tǒng)計(jì)TruncHour按UTC截?cái)嗪笏愠鰜?lái)的自然不是北京時(shí)間。我的處理方式是把項(xiàng)目定位為“本地業(yè)務(wù)系統(tǒng)”直接在settings里設(shè)TIME_ZONE Asia/Shanghai、USE_TZ False所有時(shí)間戳在錄入時(shí)先統(tǒng)一轉(zhuǎn)成本地時(shí)間再入庫(kù)。如果以后要展示給海外用戶再把USE_TZ改成True并在模板里調(diào)用localtime過(guò)濾器。用USE_TZFalse犧牲了一點(diǎn)國(guó)際化彈性但換來(lái)的是統(tǒng)計(jì)口徑簡(jiǎn)單直接尤其在按小時(shí)聚合這種場(chǎng)景下能避免大量誤判。5.2 N1查詢列表頁(yè)面卡成PPT當(dāng)我在店鋪列表頁(yè)面展示所有店鋪及其訂單量時(shí)一開(kāi)始直接寫(xiě)循環(huán)shops Shop.objects.all() for shop in shops: shop.order_count shop.orders.count()表面上看沒(méi)問(wèn)題實(shí)際上每循環(huán)一次就執(zhí)行一條SQL100個(gè)店鋪就是101條查詢。優(yōu)化方法是在查詢時(shí)用annotate一次性搞定from django.db.models import Count shops Shop.objects.annotate(order_countCount(orders))使用Django調(diào)試工具django-debug-toolbar可以在頁(yè)面底部看到SQL查詢數(shù)量和耗時(shí)。我通常把這個(gè)工具當(dāng)作性能檢查的第一道關(guān)卡。如果發(fā)現(xiàn)查詢次數(shù)激增優(yōu)先檢查循環(huán)內(nèi)部有沒(méi)有調(diào)用ORM查詢?nèi)缓蟀淹怄I關(guān)聯(lián)的取值改成select_related或prefetch_related比如orders Order.objects.select_related(shop, deliveryrecord).all()這樣關(guān)聯(lián)表會(huì)通過(guò)JOIN一次取回避免循環(huán)中觸發(fā)額外SQL。5.3 圖表不顯示的幾種原因我遇到過(guò)幾種情況ECharts的容器高度是0。div設(shè)置了寬度但沒(méi)設(shè)置高度或者高度百分比失效圖表直接不顯示。記得給圖表容器寫(xiě)固定高度。js文件路徑404。模板里寫(xiě)了{(lán)% static %}但settings沒(méi)配STATICFILES_DIRS或者沒(méi)執(zhí)行collectstatic。本地開(kāi)發(fā)時(shí)用python manage.py runserver會(huì)自動(dòng)找靜態(tài)目錄生產(chǎn)環(huán)境必須執(zhí)行collectstatic并把文件復(fù)制到STATIC_ROOT。數(shù)據(jù)為空時(shí)數(shù)組為空?qǐng)D表坐標(biāo)軸沒(méi)有分類數(shù)據(jù)看起來(lái)像“白屏”。后端保證返回的數(shù)組不為空前端可以增加空數(shù)據(jù)提示。script放在head里DOM還未渲染完就初始化圖表也會(huì)導(dǎo)致不顯示。我習(xí)慣把圖表相關(guān)script放到body的最后或者用window.onload包一層。5.4 接口中文亂碼與跨域JSON返回的數(shù)據(jù)如果含中文需要return JsonResponse(data, json_dumps_params{ensure_ascii: False})如果不指定默認(rèn)會(huì)把中文轉(zhuǎn)成\uXXXX格式瀏覽器里顯示為“亂碼”。這個(gè)其實(shí)不影響功能但排障時(shí)很難讀。后來(lái)考慮把前端獨(dú)立做成Vue或React應(yīng)用就需要CORS跨域支持。用pip安裝django-cors-headerssettings里加CORS_ALLOW_ALL_ORIGINS True開(kāi)發(fā)環(huán)境生產(chǎn)時(shí)改成白名單。這步提前配好不虧。5.5 數(shù)據(jù)庫(kù)索引統(tǒng)計(jì)查詢慢的元兇訂單表數(shù)據(jù)量起來(lái)后Order.objects.filter(statuscompleted, created_at__range[start, end])這類查詢會(huì)變慢。解決方式很簡(jiǎn)單class Order(models.Model): ... created_at models.DateTimeField(db_indexTrue) status models.CharField(max_length20, db_indexTrue)對(duì)于經(jīng)常做group by shop_id的場(chǎng)景可以添加聯(lián)合索引class Meta: indexes [ models.Index(fields[status, created_at]), ]用聯(lián)合索引可以讓“按狀態(tài)時(shí)間”的過(guò)濾和聚合都更快。我在數(shù)據(jù)達(dá)到幾十萬(wàn)行時(shí)做過(guò)對(duì)比加索引前后單次統(tǒng)計(jì)從秒級(jí)下降到了毫秒級(jí)這個(gè)優(yōu)化成本很低收益卻很明顯。6. 部署上線與后續(xù)擴(kuò)展思路6.1 使用Gunicorn和Nginx把系統(tǒng)跑起來(lái)開(kāi)發(fā)環(huán)境runserver只適合調(diào)試正式上線用Gunicorn。流程pip install gunicorn gunicorn takeout_analysis.wsgi:application --bind 0.0.0.0:8000 --workers 3workers數(shù)量一般按CPU核心數(shù)*21設(shè)置。然后配置Nginx反向代理server { listen 80; server_name your_domain; location /static/ { alias /path/to/takeout_analysis/static/; } location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }靜態(tài)文件交給Nginx托管動(dòng)態(tài)請(qǐng)求轉(zhuǎn)發(fā)給Gunicorn。如果服務(wù)器是Linux系統(tǒng)提前安裝Python環(huán)境和相關(guān)依賴操作流程與本地安裝類似。Docker部署也是常見(jiàn)的路線把項(xiàng)目寫(xiě)成Dockerfile創(chuàng)建鏡像后運(yùn)行容器環(huán)境一致性問(wèn)題能大幅減少。6.2 后續(xù)可以擴(kuò)展哪些能力讓系統(tǒng)更完整第一個(gè)是實(shí)時(shí)推送。如果業(yè)務(wù)希望大屏頁(yè)面能實(shí)時(shí)更新訂單數(shù)據(jù)可以在Django基礎(chǔ)上引入Channels用WebSocket把新訂單推送前端。Django和WebSocket的整合并不復(fù)雜核心是配置ASGI應(yīng)用、定義消費(fèi)者前端用WebSocket對(duì)象接收消息再刷新圖表數(shù)據(jù)。第二個(gè)是權(quán)限管理。熱搜詞里提到的“django rabc”本質(zhì)上是基于角色的訪問(wèn)控制。Django自帶User、Group和Permission可以在管理員后臺(tái)分配權(quán)限比如運(yùn)營(yíng)只能看報(bào)表但不能修改歷史數(shù)據(jù)管理員才能管理店鋪和配送員。這個(gè)模塊做好后系統(tǒng)就不再只是開(kāi)發(fā)者的工具可以放心交給業(yè)務(wù)部門(mén)。第三個(gè)是定時(shí)任務(wù)。每天凌晨跑一次數(shù)據(jù)匯總把前一日的訂單量、配送時(shí)效、取消率寫(xiě)入一個(gè)匯總表頁(yè)面只讀匯總表而不是實(shí)時(shí)聚合并表響應(yīng)速度會(huì)更快。實(shí)現(xiàn)方式可以用Celery的beat任務(wù)或者簡(jiǎn)單點(diǎn)用crontab調(diào)用管理命令。第四個(gè)是地理圍欄。給店鋪配置半徑判斷用戶下單地址是否在配送范圍內(nèi)超范圍自動(dòng)提示這個(gè)對(duì)實(shí)際運(yùn)營(yíng)有直接價(jià)值。整體來(lái)看這套“Django ECharts 分析指標(biāo)”的組合做外賣(mài)配送分析系統(tǒng)綽綽有余而且很容易擴(kuò)展成其他業(yè)務(wù)場(chǎng)景的可視化分析平臺(tái)。寫(xiě)到這里我想分享一個(gè)真實(shí)的體會(huì)這類分析可視化項(xiàng)目技術(shù)棧框架并不是最難的真正決定成敗的是數(shù)據(jù)指標(biāo)口徑是否清晰、數(shù)據(jù)模型設(shè)計(jì)是否合理。我一開(kāi)始拿到“外賣(mài)配送分析”需求時(shí)第一版系統(tǒng)什么都想展示結(jié)果做了幾個(gè)圖表后發(fā)現(xiàn)口徑互相矛盾——有的按北京時(shí)間統(tǒng)計(jì)有的按UTC統(tǒng)計(jì)有的把取消訂單也計(jì)算進(jìn)銷售額返工的時(shí)間遠(yuǎn)超預(yù)期。后來(lái)我把所有指標(biāo)口徑寫(xiě)進(jìn)項(xiàng)目README每一個(gè)接口注釋里寫(xiě)清楚計(jì)算邏輯項(xiàng)目才真正穩(wěn)定下來(lái)。所以如果你準(zhǔn)備上手做這樣一個(gè)系統(tǒng)先花兩天時(shí)間整理清楚指標(biāo)定義和字段含義絕對(duì)比急著寫(xiě)代碼有價(jià)值得多。另外再分享一個(gè)小技巧一定要把系統(tǒng)里所有查詢放在數(shù)據(jù)庫(kù)層面聚合用Django ORM的annotate和aggregate不要在Python端循環(huán)求和。我踩過(guò)的坑是剛開(kāi)始圖省事把數(shù)據(jù)拉到Python里算結(jié)果訂單只有幾萬(wàn)條還能忍受到了幾十萬(wàn)條接口直接卡到十幾秒。優(yōu)化到數(shù)據(jù)庫(kù)層面之后同一套統(tǒng)計(jì)邏輯穩(wěn)定在幾百毫秒。這是我個(gè)人在這個(gè)項(xiàng)目里收獲最大的一點(diǎn)希望對(duì)你也有幫助。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
婷婷激情六月中文| 婷婷五月天狠狠搞干| 国产精品一区在线观看你懂的| 激情九九综合网| 免费播放片大片| 亚洲V国产V欧美V久久久久久| 中文av网| 99热这里有精力| 色综合色综合婷婷热| 丁香五月婷婷啪啪视频| 久久综合五月天| 激情五月天综合| 婷婷,五月天,丁香,第一| 区欧美日韩成人| 狠狠色狠狠操| 九九色婷婷| 五月天狠狠干| 这里只有九九精品| 天天舔天天摸天天射| 十区AV| 成人综合网站| 超碰人人色| 激情五月天开心总和网| av免费人人| 插插干干干色| 亚洲五月天综合| 五月丁香婷婷中文| 婷婷午夜| 天天舔天天插天天爱| 婷婷久久性爱| 色婷婷激情四射视频| 九色成人AV在线| 丰满少妇猛烈A片免费看观看 | 99色视频在线观看| 久色视频首页| 色色婷五月天| 国产热精品| 日本色频| 日韩草草草草草草草草草草草草| 秋霞午夜理论 | 国产成人精品一区二区三区视频 | 亚洲、欧美、国产另类笫二区| 天天婬色综合| 麻豆精品| 久久婷婷啪啪视频| 成人噜噜网| 超碰93在线观看| 一本狠婷婷综合| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 五月婷婷少妇之| www.久久爱| 五月丁香激情综合啪啪| 第四色激情网| 五月开心婷婷中文字幕| 亚洲性爱99| 色狠狠色| 5月色亭亭视频| 五月伊人综合| 五月激情丁香| 五月丁香六月婷| 五月天最新网| av在线资源| 人妻久热| 99色视频| 天堂在线伊久| 97自拍99| 91婷婷丁香五月天免费视频网站| 久久黄色免费视频| 99色免费视频| 九九自拍网| 在线看片av| 久久激情综合| 国产AV一区二区三区最新精品| 五月天激情网站| 精品国产一区二区三区四区阿崩| 伊人大香久久| 色色五月婷| 99er这里只有精品| 色综合日日| 九九99视频| 丁香六月激情综合| 97在线精品| 1024国产在线| 六月婷婷激情图片| 综合网五月天123| 婷婷涩涩五月天| 99久视频| AA片在线观看视频在线播放| 99热99| 国产免费一区二区三州老师F1F1| 色亚洲视频| 色丁香久久久| 色五月天在线观看| 日本一区二区三区精品视频| 区区久久妻| WwW天天干| 五月婷婷我| 99视频九九热| 日本波多野结衣视频| 婷婷五月天午夜激情影院| 色色色婷婷五月天| 久久机热这里只有精品| 婷婷六月综合激情| 日本三级片片| 这里只有在线精品| 67194中文字幕| 99热99色| 日本久久婷婷| 色五月婷婷激情| 伊人久久婷婷| 亚洲无码www| 超碰av在线| 激情www.98com| 99只有精品| 99热超碰| 玖玖在线视频| 色呦呦美女| 欧美成人AAA片一区国产精品| 91在线观看www| 97人人超| 色色色热热热| 97luluse| 五月色无码| 操日视频| av操一操| 视色综合| 中文字幕乱码亚洲精品一区| 精品视频这里只有精品| 五月婷精品| 久操香蕉| ss99热| 99热最新| 日本97在线视频| 极品五月天| 久久婷婷五月天| 亚洲乱啪| 婷婷瑟瑟五月天| 中字幕视频在线永久在线观看免费 | 五月五月婷婷| 久久色这里只有精品| 久久亚洲婷婷| 婷婷六月丁香在线| 极品人妻VideOssS人妻| 超碰大香蕉网| 色婷久九| 99在线公开视频| 99国产这里只有精品| 久久久97| 久久五月天合网| 色久影院| 国产白丝在线一区| 色情五月婷| 色综合av超碰| 五月婷婷视频在线观看| 亚洲色基地| 我要看激情五月天| 碰人人97| 99热这里只有精品9| 狠狠干五月| 国产日日夜夜操| 五月丁香五月综合欧美| 五月丁香综合啪啪啪啪啪| 午夜婷婷久久| www九九热| 久久久婷婷五月亚洲97号色| 大香蕉婷婷丁香视频在线| 欧美色色网| 亚洲久久天堂| 这里只有精品免费| 色五月激情综合| 久久伊人五月天| 丁香五月伊人| 久久婷婷亚洲| 9|无码久久久久久| 色色无码| 日本成人小说婷婷六月| 狠狠色噜噜色狠狠狠综合色| 免费视频99| 欧美婷婷九月| 超碰人人操人人干| 国产成人VA| 国产精自产拍久久久久久蜜| 免费视频这里只有精品| 色色色色色色色色色色色色色五月天| 天天操夜夜操| 五月丁香综合激情| 国产肥白大熟妇BBBB视频| 色狠狠六月| 狠狠CAO日日穞夜夜穞AV| 天天噜天天爱| 丁香五月婷婷综合激情啪啪啪啪啪啪啪 | 美国不卡视频| 久热婷婷| 国产一级婬片毛片| 超碰99热精品| 九九色精品| 亚洲色情免费网| 日比网免费国产| 26uuu欧美宗合| 激情五月天婷婷色色色色色色色色色色色| 97AV在线视频| 亚洲色色色色| 最新av在线观看| 色啪网| 深爱丁香激情| 91激情五月开心| 伊人久久婷婷| 色婷婷丁香五月综合| 亚洲第一影院高清无码网站| 超碰人人在线| 激情综合激情五月一起草| 射区导航| 亚洲乱码日产精品BD| 久色五月婷婷综合| 亚洲情色一区| 亚洲中字AV电影在线网站| 天天色综网| 久久久99视频| 婷婷欠久少妇| 男女99免费视频| 超91热| 日本黄色精品| 亚洲欧洲中文日韩久久AV乱码| 五月天激情视频五月天| 色很很96| 艹天天射| 欧美成人猛片AAAAAAA| 亚洲激情精品| 热的五码久久精品| 亚洲一级AV在线免费播放| 亚洲无码色色| 人人射人人高潮| 丁香五月天导航| 中文字幕人妻一区二区| 99热8| 色五月丁香六月婷婷| 国产精品人妻在线网址| 超碰九热| 久久婷婷五月天| 久久九九热视频| 金桔一区二区ab地址| 就去色色五月丁香婷婷久久久| 大香蕉婷婷五月天| 丁香六月久久| 丁香五月av在线| WWW久久久| 亚洲超碰中文字幕| 亚洲精品又粗又大又爽A片| 五月天成人免费视频| 五月婷婷亚洲综合网| 色婷婷久久天天性爱| 字幕网AV中文字幕| www.久久爱| 婷婷丁香六月| 五月婷婷丁香俺日污视频| 婷婷五月天视| 蜜臀AV在线成人| 亚洲蜜乳AV| 国产乱人偷精品人妻A片| 色婷婷免费视频| 久久综合天天综合| 爱草视频在线| 天天拍天天做视频| 丁香五月综合激情久久潮喷| 第四色婷婷日本| 激情五月综合久久| 婷婷伊人75| 亚洲无码影音| 五月天开心色色网| 丁香五月五月婷婷欧美大香蕉| 婷婷丁香色五月| 亚洲无码99| 99国产性感视频| 伊人综合网4| 日韩色色小视频| A1片久久久| 五月婷天堂视频| 最新无毒无码AV| 五月天激情四射| www.minyis.com【JT】实力收量可预付QQ2101460746 | 久久免片| 亚洲综合五月天婷婷丁香| 五月天激情久久| 五月综合久久| 91人人操人人| www.婷婷五月天.com| 人人综合久| 可以看的av| 色色色色av色色色色| 亚洲综合在线丁香五月| 99热这里只有精品在线播放| 99热.com| 六月婷婷综合| 激情五月丁香五月| 激情丁香婷婷| 无码少妇高潮喷水A片免费| av九九| 丁香五月欧美| 中文字幕日产A片在线看| 激情综合网五月婷婷| 五月天成人综合| 色播五月婷婷| .精品久久久麻豆国产精品| 六月丁香啪啪啪| 色综合久久久久| 狠狠穞A片一區二區三區| 91久操| 国产精品99久久久久久久女警| BBWCUCKOLD精品熟妇| 国产精品久久久久久久久久免费| 丁香五月伊人| 久久婷婷丁香| site:xmssd.com| 色五月成人婷婷| 色综合久久88色综合天天人守婷| 激情五月天免费视频| 激情婷婷五月天日本系列| 日本五月婷| 色综合另类| 美欧日韩国产成人在战| 超碰在线99| 亚洲色就是色色色| 97欧美在线| 99热 这里只有精品 国产 日韩| 色五月天中文字幕| 蜘蛛女侠2003满天星免费观看| 婷婷成人视频| 亚洲综合五月天婷婷丁香| 99五月香婷婷丁香在线视频| 99热日| 五月总合激情网| 亚洲熟妇AV综合网五月丁香伊人| 色色亚洲五月天| 91超碰在线播放| 成AV人片一区二区三区久久| 日本在线视频看se99| 51成人| 五月视频日本免费观看| 狠狠色噜噜狠狠狠888| 九九九色综合| 丁香深五月婷婷| www.sebowuyue| 天天摸.天天mo| 久久这里只有欧美| 国产激情综合五月久久| 五月开心啪啪| 天天在线天天综合网色| 97人人做| 九九Y精品热播| 色欲av伊人久久大香线蕉影院| 丁香五月日啪| 人妻AV在线观看| 婷婷五月天综合网| 中文字幕AV网址| 秋霞三级影视资源| 强伦轩人妻一区二区电影| 丁香六月婷婷久久综合| 另类 在线| 亚洲天堂AV免费片| 色五月天堂| 色色五月天 亚洲| 久久久宗合| 婷婷免费无视频| 日本婷久久| 91男人操女人视频| 激情深爱综合| 久操大香蕉| 狠狠一日| 色播五月丁香婷婷| 开心激情网五月天| 天天操天天曰天天射| 五月综合六月丁| 婷婷丁香色五月| 五月天婷婷涩涩| 激情欧美婷五月| 黄网免费观看| 97精品自拍视频| 久色五月婷婷综合| 大地资源色婷婷视频在线 | 最新va在线播放| 久久A极片| 亚洲精品视频在线| 亚洲免费99| 99艹精品在线观看| 五月丁香花激情综合网| 国产国产乱老熟女视频网站97| 色播婷婷大香蕉| 激情五月天电影| www.色五月| 亚洲成人在线播放| 最新av在线观看| 婷五月天六| 欧美激情凹凸丁香网| 丁香五月激情啪啪| 亚洲精品va| 亲子乱AV一区二区三区下载| www.色综合.com| 婷婷丁香十月| 丁香色五月AV在线| 另类激情五月在线视频欧美| 久久丁香婷婷五月| 日本99色| 啪啪婷婷五月天激情| 99热8| 五月天久草| 色婷婷激情五月天在线观看| www.一区二区三区| 亚洲激情综合免费| 日本情色一区二区| www.99热| 99色网站| 午夜色婷婷| 婷婷五月亚洲激情| 六月丁香五月婷婷| 这里只有九九精品| 97在线视频 欧美| 人人妻久久妻| 91人人澡人人爽人人看| 色婷丁香| 久久99这里只有精品| 五月婷婷大香蕉| 日本九九九九| 五月丁香六月激情综合| 婷婷五月天激情亚洲小说| 亚洲字幕AV一区二区三区四区| 婷婷久久久久久久| 五月激情四射网站| 婷婷激情五月综合| 色色五月婷婷久久| 色五月天在线观看| 天天舔天天插天天干| 色婷婷伊人激情在线观看| 日本性激情色播| 丁香五月婷婷激情蜜桃| 国产午夜精品一区二区| 日韩亚洲视频| 中文字幕丰满孑伦无码专区| 婷婷五月天在线综合| 久久综合色情网站| 能看的av网站| 色婷婷a三区麻| 色黄啪啪| 亚洲激情综合| 五月丁香六月婷婷a v| yirenjiqingshiping| 久久这里都是精品| 色色无码日韩| 九一娱乐在线观看视频| 丁香五月婷婷色情综合| 亚洲综合丁香婷婷六月天| www.韩日视频| 五月婷婷综合网| 狠狠狠狠狠狠草| 丁香五月停停av| 日本天堂爱爱| 美女主播野战视步页| 碰超在线九色| 久久久久9999| 四月丁香五月婷婷久久| 激情四射五月天偷偷看婷婷| 色婷婷第四色| 狠狠干婷婷| 色99欧洲色19| 天天干,天天舔| 99精品视频播放| www.婷婷| 婷婷丁香五月天狠狠| 亚洲色图81p| www.色综合| 热热久久99| 久操热线| 月丁香久久久| 免费视频无码| www..999热久| 六月丁香社区| 日本美女天天日天天爽| 色色狼人综合| 九九色插| 成人精品视频99在线观看免费| 熟女激情五月天 | 久久五月天黄色五月天色网址| 亚洲欧美国产A片免费观看| 五月婷婷色| 97婷婷五月天| 五月激情婷婷六月丁香| 九九久久精品| 国产精品汇聚精彩第二页 - 高清完整版在线 - 青蛙AV | 五月天免费色| 99在线观看| 任你干线上免费视频有3吗| 激情综合五月| 丁香五月婷婷啪| a久久免费视频| 九玖视频这里只有精品| 九洲一级A片| 三日本无码| 99热超碰在线| 99久久激情视频| 五月天综合久久| 森林影视大全,最好看的2019年视频 | 久久婷婷五月综合| 囯产精品久久欠久久久久久九大| 丁香婷在线| 五月天婷五月天综合网小说首页-五月天激激婷婷大综合,婷婷亚洲综合五月天小说 | 夜夜撸夜夜骑| 五月色网| 丁香婷婷色色| 99这里热| 六月份天丁香婷婷| 日韩无码色色| 色婷婷狠狠18| 伊人AV五月婷| 婷婷丁香色五月久久88| 操嫩逼电影| 激情五月天噢美| www99精品| 色婷婷五月影院| www久久久久久久| 国产午夜成人免费看片无遮挡| 亚洲天堂色色| 久久久97| 99无码| 国内外色色色色色成人视频| 丁香五月婷婷基地| 99色色网| 极品人妻XXXXOOOO| 国产精产国品一二三在观看 | 操B无码视频国语| 香蕉97碰碰碰欧美| 色欲五月丁香| 色色综合网。| 久久99免费视频| 在线不卡的视频| 九九久久偷拍| 九热视频精品| 五月丁香好婷婷A片网| 91porn一起草| 色丁香婷婷| 99九九在线观看免费| 色久影院| 国产成人+综合亚洲+天堂| 亚洲综合视频在线| 欧美日韩成人在线| 天天干夜夜操A片| 操人妻90p| 狠狠va| 天天噪夜夜爽| 六月丁香社区| 五月天社区| 亚洲婷婷91丁香| 五夜婷婷| 99国产精品久久久久久久久久久| 亚洲激情四射色| 99热在线极品极品| 天堂综合久久| 日日爱678| 婷婷成人综合免费视频| 99思思热只有在这里看| 久热这里只有| 思思久久精品| 国产人妻777人伦精品HD| 激情四射亚洲| 国产精品色婷婷99久久精品| 五月丁香猫咪久久婷婷综合视频激情四射网入口 | 激情五月丁香婷婷夜夜操| 丁香五月 综合| 久草xx性爱视频| 五月天综合在线观看视频| 久久久激情视频| 欧亚成人A片一区二区| 色婷婷综合久久| 婷婷九月丁香天堂丁香天堂| 99精品国产在热久久| 在线色五月婷婷| www夜夜| 97自拍视频在线| 久久人妻熟女一区二区| 欧美亚洲成人在线| www.激情五月天.com| 伊人五月天婷婷| 日韩在线视频网站| 久色精品| 日本一级| 99国产性感视频| 欧美 日韩 成人在线| 思思久久99热只有频精品66| 色五月,婷婷大香蕉| 91蜜桃婷婷狠狠久久综合9色| 久久午夜理论| 欧美日朝成人| 丁香六月综合| 丁香六月婷婷综合色| 久久 视频这里只有精总| 黄色成人网站在线播放| 日韩无码AV电影网站| 91久久综合| 亚洲热综合网在线观看| 亚洲精品电影| 99re久热| 操国产人妻| 婷婷激情人妻| 久久九九热re6这里有精品| 國語久久婷| 五月激情综合深爱| 日韩一级片| 免费看片在线观看| 九九视频热| www.色99| 婷婷五月丁香色综合| 亚洲人人干| www.狠狠| 婷婷的色色五月天| 五月婷婷丁香色播网| 丁香成人五月天| 色哟哟性爱av| 婷婷五月成人系列| 99精品国产乱码久久久人妻| 色色色国产| 思思热久热| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 综合色播| 日韩操逼大片| 国产1区2区| 精品综合五月| 亚洲日韩一页精品发布| 狠狠干综合| 亚洲午夜电影| 欧美日韩国产日本精品四虎网网站物| 人妻精品久久久久久| 亚洲va综合va国产va中文| 色九亚洲| 亚洲成人中心| 色欧美日| 极品人妻VideOssS人妻| 九九精品re免费视频| 精品怡红九九九| 婷婷亚洲天堂| 婷婷五月天改成什么了| 婷婷丁香人妻天天爽| 天天操婷婷| 久久婷婷六月综合综合| 五月婷婷国产| 五月色综合网| 琪琪色影音先锋| 深爱激清网| 精品婷婷丁香五| 亚洲第一视频 久久| 国产肥白大熟妇BBBB视频| 日韩抽插操逼| 日本欧美成人片AAAA| 99色看这里只有精品| 亚洲超碰在线| 九月婷婷综合八月丁香在线观看| 五月丁香色综合| 99久热这里有精品| 丰满老熟妇BBBBB搡BBB| 狠狠干青青草| 亚州第一黄网| 激情五月五月婷婷| 色五月偷偷| 婷婷五月丁香欧洲| 99ri精品视频在线观看| 亚洲av骚货| 欧美五月丁香啪啪响视频| www.久久久久| 天天舔天天插天天干| 丁香五月激情图片婷婷| 亚洲热久久| 亚洲成片在线观看| 中文字幕综合网| 国产激情综合五月久久| www.久久99| 97涩涩丁香五月天| 五月婷婷先锋| 久久久久久97| 免费视频舔| 久热在线中文字幕色999舞 | 999热这里只有美国精品| 深情五月天| 一本色道久久88加勒比—| 天天噜日日噜综合无码| sisi热国产| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 色综合天天综合成人网| 26uuu激情五月天| 婷婷9月天| 日日夜夜狠狠| 日本怕怕视频| 亚洲天堂色| 综合色色婷婷| 99国产小视频免费观看| 97碰 在线视频观看| 婷婷 伊人 久久| 狠狠爱综合网| seuuu婷婷| 丁香五月婷婷亚洲色图| 色五月成人婷婷| 超碰2021| 婷婷久久综合| 丁香美女主播视频在线观看| 久久精典| 色就色94欧美setu| 五月婷婷久久久| 婷婷五月天视频小说| 99伊人婷婷在线| 狠狠操狠狠| 色五月婷婷丁香五月| 亚洲AV成人在线| 99在线精品免费视频| 色色色热| 五月丁香999| 五月亭亭欧美女人| 99精品成人无码A片观看金桔| 5月婷婷6月六月丁香| 色久婷婷五月| 色婷婷丁香社综合| 99精品偷自拍| 色婷婷免费观看| 婷婷激情5月| 久9视频| 99九九热播在线免费视频| 久久99精品久久只有精品| 狠婷婷五月| 五月婷婷另类| 91 九色 入口| 久久大香蕉丁香| 深爱激情五月婷婷| 婷婷伊人网| 六月亚洲| 亚洲综合五月| 激情五月天啪啪| 97色色色色色色色色色色色色色| 淫视馆AV在线| 夜夜AVV| 国产黄大片在线观看画质优化| 久久丁香五月| 丁香 婷婷五月| 妻久久久久| 天天色天天日| 激情又色又爽又黄的A片| 亚洲另类毛片| 五月婷婷久久激情| 婷婷久久精品| 色青青电影色五月| 激情性爱五月天| 婷婷六月伊人| www.色五月| 狠狠色丁香婷婷| 婷婷天天插天天爱| 五月天操逼网| 日韩三十六页| 69热在线| 五月天成人免费视频| 精品国产一区二区三区四区阿崩 | 99久精品视频| 激情人妻蜜夜系列区| 欧美日韩成人一区二区| 六月丁香婷婷在线波多| 亚洲六月色| 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 五月丁香亭亭成人电影| 26UUU欧美激情一区二区| 色婷婷呢狠禁久禁| 激情网站五月| 少妇人妻人伦A片| 免费黄网不卡AV| 青草青草久热这里只有精品| 五月天久久综合婷婷| 不卡在线视频| 丁香五月天激情五月天激情五月天激情网| 婷婷色婷婷| 人五月天婷婷喷水| 六月婷婷视频| 色色色免费视频| 九九av在线| 色情一区二区播放| 夜夜操狠狠操| 婷婷五月成人| 欧美五月婷婷| 2013AV天堂| 99这里是精品| 操操操97| 婷婷亚洲激情在线观看视频| 热99在线| 五月丁香久人妻中文| 丁香午夜天| 曰本久久女| 五月丁香少妇网| 婷婷五月天福利| 九九九热精品| 久超超碰| 2015WWW永久免费观看播放| 丁香五月六月欧美| 97在线观视频免费观看| 天天日夜夜B久久| 色五月天电影| 99 r热| 久久久激情| 99热免费精品| 另类精品视频在线观看| 91porn一起草| 五月婷婷丁香啪啪| 伊人狠狠色婷婷综合丁香一区| 五月六月婷婷| 91在线人| 五月天激情www| 色色图五月天| 婷婷色五月色| 久99久视频精选| 五月丁香六月婷婷的女人| 丁香五月天大香蕉啪啪| 日本激情五月| 亚洲99精品九九在线| 99综合99| 操逼五月婷婷| 婷婷五月天综合色| 99五丁香月| 深爱激情六月| 98热精品| 99热亚洲| 九热视频在线精品15| 久热91精品| 欧美婷婷丁香五月社区| 色婷婷www| 亚洲激情丁香五月天色| 天天操综合网| 日韩六十路91性交电影| 欧美三级巜人妻互换| 伊人狠狠综合| 婷婷五月丁香综合瑟瑟| 婷婷五月情天| 97热久久五月婷婷| 成人 视频免费观看网站| 久久久久久综合88| 色综合色色色| 婷婷五月开心中文字幕色| 国产婷婷色综合AV蜜臀AV | 九九热视频免费观看| 91呦呦呦| 99热综合网| 综合网啪啪| 色色色图| 欧美五月丁香在线观看| 91女人18毛片水多国产| 丁香五月社区| 任你爽视频| 五月丁香久久| 亚洲色综合性| 一本色道久久88加勒比—| 99综合在线| 六月丁香五月婷婷首页| 色色色com| 日韩啊啊啊| 成人电影一区| 色伦专区97中文字幕| 久热网在线视频| 97性视频| 亚洲日韩一页精品发布| 五月天色婷婷伊人网| 99久精品视频| 九九色色| 亚洲最大五月天成人网| AV成人在线播放| 99自拍视频在线观看| 欧美综合五月丁香六月婷| 超碰在线播放免费观看| 国产成人网| 精品人妻久久久久久久| 无码髙清| 深爱五月天| 91精品综合久久久久久五月丁香| 国产精品成人AV在线| 午夜少妇在线观看视频| 五月丁香六月情| 欧美天天草人人草| 岛国AAAV| 99性视频| 噜噜噜精品欧美成人在线观看| 婷婷伊人75| 天天射影院| 亚洲国产精品VA在线看黑人| 9er热在线精品视频| 最新婷婷五月丁香| 超碰久热| 五月综合色播播丁香婷婷| 日本久久婷| 9九九久久精品无码专区| 天天射美女| 丁香五月天综合网| 91精品丝袜久久久久久| 婷婷九九色| 激情五月五月婷婷| 日韩在线aaa| 在线国产精品色| www亚洲无码| 综合色播| 98色花堂98t.R| WWW.开心五月天.COM| 7超碰自拍| 亚洲AV成人一区二区在线观看| 99性视频| 色播五月网| 这里只有精品99视频| 97碰碰在线观看视频| 少妇AB又爽又紧无码网站| 思思99久久| 3www激情| 婷婷五月 丁香六月| 1024成人在线观看| 日本WwW色偷偷丁香花久久久京东热| 婷婷久月| 丁香五月婷婷香| 日本成人噜噜噜噜噜| 丁香婷婷网| 天堂久久大香蕉| 成人无码髙潮喷水A片| 日韩无码成人电影| 久久伊人五月天| 一二三区视频韩国| 色亚洲无码| www.婷婷.com| 91熟妇大香蕉| 久热在线中文字幕色999舞 | 亚洲1区| 天天肏高清在线| 色色色宗合网| 欧美成人AAA片一区国产精品| 97久久超碰| 97色色网| 精品五月天| 色高清无码视频| 99丁香五月婷| 无码人妻激情| 第五婷婷伊人丁香| 91嫩草国产线观看亚洲一区二区| 六月婷婷综合| 色五月婷婷基地| 日日夜夜天天| 婷婷五月综合亚洲| 婷婷在线免费| 夜夜骑日日夜夜| 久久老码第一| 九九人妻福利| 丁香五月激情婷婷视频| 综合久久综合久久| 五月激情射| 婷婷五月综合色中文字幕| 婷婷九九色| 久久九九热38| 大香蕉在九| 亚洲第一成人无码A片| 色婷婷99| 狠狠操天天干| 日韩无码专区| 国产精品色| 婷婷狠狠操| 天天色综网| 色婷婷香蕉| 激情综合婷婷| 日韩欧美颜射| 91久久婷婷| 91精品综合久久久久久五月丁香| 91日本在线| 五月婷婷影院| 亚洲成人综合在线| 久99久视频| 91超级碰| 丁香六月在线| 婷婷六月激情| 99热66| 99自拍视频在线观看| 激情五月天综合网| 亚洲婷婷五月天| h在线看免费版在线看| 成片免费播放| 国产一区二区三区影院| 国产FREESEXVIDEOS性中国| 99ER热精品视频| 久久婷婷七月丁香| 丁香99| 久久青青日本视频| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 亚洲乱码日产精品BD| 少妇性按摩无码中文A片| 四季8848精品成人免费网站| 999热在线观看视频| 啪啪日本欧美| 九九超碰人人| 91精品91久久久中77777久久玖玖九九| 亚洲天堂啪啪| 九九色综合| 另类综合激情| AAA亚洲AV| 婷婷深爱五月丁香| 97干综合网| 这里只有精品视频99| 激情五月婷| 99成人免费视频| 夜夜撸夜夜骑| 激情五月婷婷综合| 99爱在线视频| 婷婷五月天综合亚洲| 性爱五月婷| www999日韩精品| 久热只有这里有精品| 五月丁香六月婷婷中文版| 色狠狠综合| 亚洲五月天另类小说图片| 99热播放| 婷婷五月天成人网| 91聚色综合网| 九月久久婷婷| 婷婷中文字幕| 无码婷婷五月天| 99热在线只有精品| 中文字幕av在线| 狠狠色婷婷| 久热精彩视频98| 色综合中文| 天天激情视频| 色XX综合网| 中文字幕在线资源| 性做爰A片免费视频A片直播| 免费播放AV| 天天肏视频| 伦99热| 九月婷婷激情| 国产亚洲精品久久久久久郑州| 日韩AV在线免费| 99超级碰免费视频| 色色色色av777| 久久与婷婷| 亚洲亚洲人成综合网络| 青青日韩| 26UUU成人网| 99色免费观看全部| 丁香五月天激情视频| 久久9情免费| 特黄三级片| 婷婷五月综合啪| 久久婷狠狠色| 久久艹 五月天| 操操国产| 狠狠草综合网| 国产精品成人在线| yw国产AV| www,五月天com| 色婷婷久综合久久一本国产AV| 深爱激情六月天| 丁J香六月首页| 日韩色色色色色| 五月丁香婷婷激情视频| 狠狠色综合网| 成人网页在线观看| 亚洲婷婷丁香五月天激情小说| 99热亚洲| 亚洲12p| 色婷婷操逼| 色五月首页| 欧美色色色| 婷婷五月色惰| 婷婷五月天日日日干干干| 亚洲成人一区| 婷婷激情97| 色婷婷五月丁香在线观看| 99在线视频免费| 91丁香色| 激情五月开心五月在线视频| 亚洲激情网| 在线看的免费网站| 色婷婷久久| 五月天亚洲综合网| 专区无日本视频高清8| 精品五月天| 激情综合网址| 精品自拍97| 多精窝99在线视频| 猫咪伊人久久| 久久久久久久,99精品视频| 婷婷五月丁香五月丁香| 97干在线观看视频| 黄色aa观看aaguochan| 爱草视频在线观看| 五月天婷婷在线播放| 97五月天婷婷综合激情网| 五月天婷婷色播在线网| 婷婷狠狠操| 国产avapp 网| 日本VA视频| 一本色道久久88加勒比| 日日噜人人人做人| 欧美日本黄色| 婷婷色情五月| 五月婷婷激情综合视频| 国产AV国片偷人妻麻豆| 思思99热热热99| 91九色国产在线| 午夜色丁香| 亚洲亚洲亚洲AAAAAA| 性生生活大片又黄又| site:xmssd.com| www久| 玖玖婷婷婷丁香五月| 五月六月婷婷| 丁香五月综合狠狠| 六月丁香五月亭亭| 九九热精品| 久久久妻人人人| 色五月婷婷久久| 玖玖爱综合网| 成人精品人妻| 91精品无码久久久久久五月天| www.狠狠艹| 久久久久视剧HD| 色婷婷a三区麻| 亚洲国产精品二二三三区| 五月丁香网av| 天天干天天日天天操| 久久综合爱| 久久草大香蕉| 日本69日人视频| 日本久久综合| 好看的国产精品| 色五月色图| 激情综合色图| 秋霞成人毛片一级A片| 99精品一二三四视频| 五月丁香好婷婷A片网| 精品女人九九九| 婷婷九月综合| 婷婷五月天黄色| 婷婷丁香九月| 亚洲成人AV在线播放| 91大神操美女| 五月婷婷欧美| 天天搞天天爽| 精品色情一区二区三区四区| 婷婷伊人| 六月婷五月丁香| 91紱請| 五月天激情网页| 日韩熟女啪啪视频| 久久视频这里99| 国产婷婷五月| 婷婷五月天AV在线| 99久久久久久| 97自拍视频在线| 丁香五月花婷婷开心| www.狠狠| 99久久综合精品五月天| 超碰妻人人| 五月婷婷天天| 婷婷五月综合网| 色噜噜狠狠一区二区三区| 婷婷四月 成人 狠狠干| 国产伦亲子伦亲子视频观看| 五月天婷婷伊人| 丁香婷婷激情四射五月| 婷婷天天婷婷天天澡| 久久九九中文字幕| 色欲色香综合网| 天天爽—爽| 婷婷在线网| 99热6色| 夜夜大香蕉婷婷丁香| 91精品久久久久| 亚洲天天免费| H亚洲| 欧美激情五月天| 五月丁香综合| 人与禽A片啪啪| 欧美VA在线| 一起草Av| 色色99| 亚美欧色影院| 91精品91久久久中77777久久玖玖九九| 婷婷午夜天| 天天撸夜夜爽| 欧美啪啪网| 九九亚洲视频| 五月天婷婷色播在线网| 996热re视频在线观看视频| 99福利导航| 这里只有精品,日韩视频| 亚洲99热| 色碰碰| 久久狠狠色| 五月婷婷精品| 五月婷婷中文字幕| 就去涩涩丁香五月天| 丁香 亚洲 久久| 99爱在线免费视频| 五月WWW| 性爱网五月天| 亚洲乱码日产精品BD| 五月天婷婷基地| 色色色综合视频| 97人人操com| 五月丁香六月激情在线| 欧美婷婷五月| 五月丁香色色网| 天天日色情| 丁香九月婷婷综合| 久香草视频在线观看| 91丁香五月| 在线观看免费视频| 色色色婷婷| 五月色欧洲| 991国产精选视频在线播放下载| 桃色五月天| 五月丁香成人视频| 99在线免费视| 99久久视频| 四川BBB搡BBB搡多人乱亂| 欧美乱码国产一级A片| 久久五月天激情视频| 91色逼| 五月天婷婷狂暴白浆| 99超级碰免费视频| 色婷婷色婷婷五月| WWW,激情五月天,COM| 丁香五月婷婷激情中文| 久久五月综合| 激情久久丁香| 五月婷六月天| 亚洲五月天,激情视频| 香蕉中文在线| 天天干天天干天天干| 五月天操逼网| 激情五月丁香六月婷婷| 五月婷婷在线丁香| 婷婷丁香五月天熟女丝袜| 无码AV免费精品一区二区三区| 亚州操操| 伊人久久五月天综合| 中海油常州环保涂料有限公司| 婷婷久久婷婷| 玩熟女五十AV一二三区| 婷婷色在线| 六月天婷婷| 开心五月婷婷99| Xx色综合| 激情爱爱网站| 9精品国产在热久久| 亚洲综合五月天婷婷丁香| 国产成人av在线播放| 色婷婷社区| 丁香花五月天| 婷婷伊人| 97色在线观看视频| 色五月天 丁香| 人妻丰满精品一区二区A片| 120分钟婬片免费看| 九九热最新| 婷婷五月天黄色小说| 婷婷五月丁香五月天| 丁香六月婷婷激情综合| 色五月色图| 欧美啪啪五月天| 美女被操一区二区| 国产SUV精品一区二区6| 九九色热| 99久久婷婷| 色婷婷天堂| 99亚洲视频| 婷婷.com|