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

ARTICLE DETAIL

資訊詳情

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

Django+MySQL構(gòu)建PM2.5空氣質(zhì)量可視化系統(tǒng)全解析

Django+MySQL構(gòu)建PM2.5空氣質(zhì)量可視化系統(tǒng)全解析 簡(jiǎn)介這是一份基于Django與MySQL實(shí)現(xiàn)的城市PM2.5空氣質(zhì)量數(shù)據(jù)可視化分析源碼面向需要完成Python課程設(shè)計(jì)、畢業(yè)設(shè)計(jì)或希望快速上手Web可視化開(kāi)發(fā)的讀者。項(xiàng)目包含完整的Django工程結(jié)構(gòu)內(nèi)置北京、上海、廣州、成都、沈陽(yáng)等城市六年P(guān)M2.5數(shù)據(jù)覆蓋溫度、濕度、露點(diǎn)、風(fēng)向、大氣壓等影響因子并提供登錄注冊(cè)、數(shù)據(jù)篩選、圖表展示等功能。壓縮包共66個(gè)文件以17個(gè)py源碼文件、24個(gè)csv數(shù)據(jù)文件、4個(gè)xml配置、3個(gè)html頁(yè)面和2個(gè)md文檔為主同時(shí)包含SQL數(shù)據(jù)庫(kù)腳本、依賴清單與詳細(xì)部署文檔整體大小僅12.38MB目錄清晰便于按模塊學(xué)習(xí)。目前已有145人學(xué)習(xí)下載。借助這份資源讀者可以直接替換CSV數(shù)據(jù)完成自己的可視化分析也可從數(shù)據(jù)預(yù)處理腳本、Django視圖配置和前端模板中理解完整的項(xiàng)目組織方式是兼具實(shí)用性與教學(xué)價(jià)值的Python高分參考項(xiàng)目。1. 拿到這份 PM2.5 可視化源碼先認(rèn)清它到底解決什么問(wèn)題當(dāng)一張城市空氣質(zhì)量數(shù)據(jù)表落到你手里你能看到的只是幾百行數(shù)字哪個(gè)站點(diǎn)、哪個(gè)時(shí)刻、PM2.5 濃度多少??蓳Q到業(yè)務(wù)或答辯現(xiàn)場(chǎng)對(duì)方要的是在瀏覽器里按城市、按時(shí)間段拖出趨勢(shì)線和柱狀圖甚至能一眼看出哪幾天污染爆表?;?Django MySQL 實(shí)現(xiàn)的城市 PM2.5 空氣質(zhì)量數(shù)據(jù)可視化分析源碼做的就是這件事用 Django 把數(shù)據(jù)庫(kù)里的時(shí)序數(shù)據(jù)整理成網(wǎng)頁(yè)接口再用 ECharts 這類前端圖表把 PM2.5、PM10、AQI 變成可交互圖形。它適合兩類人一類是需要課程設(shè)計(jì)或求職作品的 Python 學(xué)習(xí)者想找一個(gè)“后端 數(shù)據(jù)庫(kù) 可視化”都占全的完整項(xiàng)目另一類是環(huán)保、氣象相關(guān)崗位上想把監(jiān)測(cè)數(shù)據(jù)快速做成內(nèi)部看板的后臺(tái)開(kāi)發(fā)。下面我把這套項(xiàng)目的表結(jié)構(gòu)、導(dǎo)數(shù)流程、接口設(shè)計(jì)和部署排錯(cuò)完整拆開(kāi)照著搭就能跑通。2. Django MySQL 的數(shù)據(jù)模型與項(xiàng)目骨架先把表設(shè)計(jì)對(duì)再談可視化2.1 為什么是這個(gè)組合Django 管業(yè)務(wù)MySQL 扛數(shù)據(jù)PM2.5 可視化這類項(xiàng)目選型時(shí)最常見(jiàn)的兩個(gè)替代方案是 Flask SQLite 和 Django SQLite。從小項(xiàng)目角度看 Flask 更輕但如果最終要讓數(shù)據(jù)可視化長(zhǎng)期可維護(hù)Django MySQL 的優(yōu)勢(shì)在幾個(gè)地方Django 自帶 Admin 后臺(tái)、ORM、數(shù)據(jù)遷移腳本、表單校驗(yàn)做一個(gè)“后臺(tái)錄入 前端展示”的全棧項(xiàng)目時(shí)不用東拼西補(bǔ)MySQL 對(duì)多用戶并發(fā)寫入的支持比 SQLite 好尤其當(dāng)你有定時(shí)任務(wù)每小時(shí)拉一批監(jiān)測(cè)數(shù)據(jù)進(jìn)來(lái)另一側(cè)瀏覽器同時(shí)在查圖表SQLite 很容易報(bào)出 database is locked。MySQL 有行級(jí)鎖和連接池寫入和查詢可以并行不打架。當(dāng)然選 MySQL 不是沒(méi)有代價(jià)你得先裝好數(shù)據(jù)庫(kù)、建庫(kù)建用戶、把驅(qū)動(dòng)包裝對(duì)。這也是為什么很多新手卡在第 0 步就放棄了——Django 代碼還沒(méi)寫MySQL 先給了一記下馬威。我的建議是環(huán)境問(wèn)題集中花半天解決后面收益是值得的課程設(shè)計(jì)、論文實(shí)驗(yàn)和企業(yè)內(nèi)部看板這套組合都能直接用。2.2 數(shù)據(jù)表怎么拆站點(diǎn)維表、城市維表、空氣質(zhì)量事實(shí)表空氣質(zhì)量數(shù)據(jù)可視化最常見(jiàn)的臟做法是把所有字段塞進(jìn)一張表城市名、站點(diǎn)名、時(shí)間、PM2.5、再帶上 SO2、NO2、O3……表也能跑但等你要做“對(duì)比北京和上海 2024 年上半年日均 PM2.5”的查詢時(shí)SQL 會(huì)寫得非常別扭而且城市名重復(fù)存儲(chǔ)會(huì)帶來(lái)大量冗余。更合理的做法是拆成維度表和事實(shí)表城市是一張表監(jiān)測(cè)站點(diǎn)是一張表逐小時(shí)監(jiān)測(cè)記錄單獨(dú)放一張大表用外鍵關(guān)聯(lián)。一張能支撐可視化的最小模型長(zhǎng)這樣# monitor/models.py from django.db import models class City(models.Model): name models.CharField(max_length32, uniqueTrue) class Meta: db_table dim_city ordering [name] def __str__(self): return self.name class Station(models.Model): code models.CharField(max_length16, uniqueTrue) # 站點(diǎn)編碼例如 CD_1001A name models.CharField(max_length64) city models.ForeignKey(City, on_deletemodels.CASCADE, related_namestations) class Meta: db_table dim_station def __str__(self): return self.name class AirQuality(models.Model): station models.ForeignKey(Station, on_deletemodels.CASCADE, related_namerecords) monitor_time models.DateTimeField(db_indexTrue) # 監(jiān)測(cè)時(shí)間查詢熱字段 pm25 models.DecimalField(max_digits6, decimal_places2, nullTrue) pm10 models.DecimalField(max_digits6, decimal_places2, nullTrue) aqi models.IntegerField(nullTrue) class Meta: db_table fact_air_quality unique_together (station, monitor_time) # 同一站點(diǎn)同一時(shí)刻只留一條這里最關(guān)鍵的兩個(gè)設(shè)計(jì)是db_indexTrue和unique_together。monitor_time建索引是因?yàn)榭梢暬涌诨径紩?huì)按時(shí)間范圍過(guò)濾不建索引的話百萬(wàn)行記錄會(huì)全表掃unique_together則從數(shù)據(jù)庫(kù)層擋住了重復(fù)數(shù)據(jù)比在導(dǎo)入腳本里手動(dòng)判重可靠得多。2.3 創(chuàng)建 Django app 與連接 MySQL 的配置順序模型設(shè)計(jì)好之后先把這個(gè)數(shù)據(jù)入庫(kù)的流程走通再做接口。常見(jiàn)做法是手動(dòng)創(chuàng)建名為 monitor 的應(yīng)用然后配置數(shù)據(jù)庫(kù)連接并執(zhí)行遷移。按這個(gè)順序走python manage.py startapp monitor python manage.py makemigrations monitor python manage.py migratestartapp會(huì)自動(dòng)生成 migration、views、models 這些文件makemigrations monitor把模型翻譯成遷移腳本第一次執(zhí)行時(shí)如果提示 No changes detected多半是 settings 的 INSTALLED_APPS 里沒(méi)有加monitor這是新手第一個(gè)高頻翻車點(diǎn)。連接 MySQL 時(shí)settings.py 里這段配置可以直接抄# config/settings.py 片段 import os DATABASES { default: { ENGINE: django.db.backends.mysql, NAME: os.getenv(DB_NAME, air_quality), USER: os.getenv(DB_USER, root), PASSWORD: os.getenv(DB_PASSWORD, change_me), HOST: os.getenv(DB_HOST, 127.0.0.1), PORT: os.getenv(DB_PORT, 3306), OPTIONS: { charset: utf8mb4, init_command: SET sql_modeSTRICT_TRANS_TABLES, }, } }charset: utf8mb4建議保留它決定中文備注和城市名能不能正常存取init_command里的 sql_mode 會(huì)避免 MySQL 對(duì)非法日期做靜默轉(zhuǎn)換寧可導(dǎo)入報(bào)錯(cuò)也不能讓臟日期悄悄進(jìn)庫(kù)。密碼不要直接寫死在代碼里用環(huán)境變量或者本地.env都好這個(gè)項(xiàng)目將來(lái)要示人或者部署配置文件會(huì)被其他人看到。數(shù)據(jù)庫(kù)本身需要在 MySQL 里先建好Django 的 migrate 只會(huì)建表不會(huì)幫你建庫(kù)。我一般用這么一句CREATE DATABASE air_quality DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;建庫(kù)這一步有講究如果直接用默認(rèn) latin1 建庫(kù)后面所有中文都是問(wèn)號(hào)還得推倒重來(lái)。遷移完成后可以用python manage.py shell手工插入一條測(cè)試數(shù)據(jù)再用 SELECT 驗(yàn)證一遍中文存取這一步值得做避免后面接口都寫完了才發(fā)現(xiàn)數(shù)據(jù)庫(kù)字符集不對(duì)。3. 把 PM2.5 采樣數(shù)據(jù)清洗入庫(kù)管理命令腳本與去重策略3.1 原始數(shù)據(jù)長(zhǎng)什么樣CSV 的編碼和無(wú)效值最坑從公開(kāi)監(jiān)測(cè)站點(diǎn)拿到的 PM2.5 原始數(shù)據(jù)最常見(jiàn)的是 CSV 或 Excel 導(dǎo)出的表格。列一般包括站點(diǎn)編號(hào)、時(shí)間、PM2.5、PM10、SO2、NO2、O3、CO 這些。這里最容易翻車的不是數(shù)據(jù)量而是三件事文件編碼可能是 UTF-8 帶 BOM也可能是 GBK缺測(cè)值有空白、有-999、還有--這樣亂寫的時(shí)間列格式不統(tǒng)一有的是2025-01-01 08:00有的是2025/1/1 8:00。在寫任何導(dǎo)入腳本之前我建議先花兩分鐘看一眼文件頭部file data/pm25_2025.csv head -n 5 data/pm25_2025.csvfile命令輸出里有UTF-8 (with BOM)或ISO-8859字樣直接決定你用utf-8-sig還是gbk去讀。打開(kāi)看到\ufeff開(kāi)頭的表頭就說(shuō)明有 BOMPython 里用encodingutf-8-sig可以自動(dòng)吃掉它。3.2 寫一個(gè) Django 管理命令做批量導(dǎo)入bulk_create 是唯一正解手動(dòng)在 shell 里一條條創(chuàng)建對(duì)象只適合調(diào)試。正式導(dǎo)數(shù)據(jù)要寫成 Django management command好處是能復(fù)用項(xiàng)目的 settings 和 ORM將來(lái)部署到服務(wù)器上可以直接用python manage.py import_pm25 --csv ...觸發(fā)。一個(gè)最小可用的導(dǎo)入命令如下# monitor/management/commands/import_pm25.py import csv from datetime import datetime from django.core.management.base import BaseCommand, CommandError from django.utils import timezone from monitor.models import City, Station, AirQuality def parse_float(value): 把 CSV 里的無(wú)效值統(tǒng)一轉(zhuǎn)成 None而不是強(qiáng)行填充 0。 if value is None: return None value str(value).strip() if value in (, -, --, null, 999, -999): return None try: return float(value) except ValueError: return None class Command(BaseCommand): help 導(dǎo)入 PM2.5 站點(diǎn)監(jiān)測(cè) CSV 數(shù)據(jù) def add_arguments(self, parser): parser.add_argument(--csv, requiredTrue, helpCSV 文件路徑) parser.add_argument(--city, requiredTrue, help城市名例如 北京) parser.add_argument(--station, requiredTrue, help站點(diǎn)編碼) def handle(self, *args, **options): city, _ City.objects.get_or_create(nameoptions[city]) station, _ Station.objects.get_or_create( codeoptions[station], defaults{name: options[station], city: city} ) rows [] skipped 0 with open(options[csv], encodingutf-8-sig) as fp: reader csv.DictReader(fp) for line in reader: try: t datetime.strptime(line[time], %Y-%m-%d %H:%M) except (ValueError, KeyError): skipped 1 continue rows.append(AirQuality( stationstation, monitor_timet, pm25parse_float(line.get(pm25)), pm10parse_float(line.get(pm10)), aqiint(parse_float(line.get(aqi)) or 0) or None, )) # ignore_conflictsTrue 依賴數(shù)據(jù)庫(kù)層的唯一約束命中就跳過(guò) AirQuality.objects.bulk_create(rows, batch_size2000, ignore_conflictsTrue) self.stdout.write(self.style.SUCCESS(f導(dǎo)入完成{len(rows)} 條跳過(guò) {skipped} 條新增去重后數(shù)據(jù)))這段腳本里兩個(gè)參數(shù)必須解釋清楚。batch_size2000控制每次 INSERT 的記錄數(shù)太大容易超過(guò) MySQL 的 max_allowed_packet太小又體現(xiàn)不出批量插入的優(yōu)勢(shì)我長(zhǎng)期用 2000 這個(gè)值沒(méi)出過(guò)問(wèn)題。ignore_conflictsTrue是配合模型里的unique_together使用的意思是遇到同一個(gè)站點(diǎn)同一時(shí)刻的重復(fù)記錄直接跳過(guò)不報(bào)錯(cuò)、不覆蓋這比先 SELECT 再 INSERT 的方式快一個(gè)數(shù)量級(jí)也不用自己維護(hù)去重邏輯。parse_float的取舍也要注意我把空值和-999這類典型缺測(cè)標(biāo)記統(tǒng)一轉(zhuǎn)成None而不是填 0。數(shù)據(jù)可視化時(shí) 0 會(huì)被畫成一條貼地的線很容易被誤讀為“空氣質(zhì)量很好”而 None 可以讓前端顯示為空缺圖表更誠(chéng)實(shí)。AQI 那行寫得稍微繞了一點(diǎn)是為了兼容 CSV 里沒(méi)有 aqi 列的情況。3.3 數(shù)據(jù)質(zhì)量邊界臟數(shù)據(jù)處理到什么程度該收手很多人拿到數(shù)據(jù)第一反應(yīng)是用 pandas 把缺測(cè)值 fillna(0)把異常值刪掉再入庫(kù)。這個(gè)思路對(duì) pandas 分析沒(méi)問(wèn)題但對(duì)可視化項(xiàng)目未必合適。監(jiān)測(cè)站的-999和空值只是“沒(méi)測(cè)到”不代表濃度為零擅自把異常值刪掉又會(huì)造成時(shí)間序列斷檔。我一般只在三個(gè)地方做處理格式非法的時(shí)間行直接跳過(guò)PM2.5 為負(fù)但不在-999這種約定范圍內(nèi)的值轉(zhuǎn) None重復(fù)記錄交給數(shù)據(jù)庫(kù)唯一約束去擋。其余數(shù)值保持原樣入庫(kù)重度清洗留給后續(xù)分析腳本不要把清洗邏輯在導(dǎo)入環(huán)節(jié)做死。另外有個(gè)經(jīng)驗(yàn)一個(gè)城市可能對(duì)應(yīng)多個(gè)站點(diǎn)導(dǎo)入時(shí)--station參數(shù)必須真實(shí)存在否則air_quality表里所有記錄都會(huì)掛在同一個(gè)站點(diǎn)下后面按站點(diǎn)維度的圖表全都會(huì)失真。如果你的 CSV 里本身帶了站點(diǎn)編號(hào)列那就應(yīng)該從 CSV 中讀取站點(diǎn)而不是用命令行參數(shù)硬指定我最早就是偷懶用命令行參數(shù)結(jié)果導(dǎo)了十幾個(gè)站點(diǎn)的數(shù)據(jù)全部串成了同一個(gè)站點(diǎn)。4. 可視化層怎么搭REST 接口 ECharts 圖表聯(lián)動(dòng)4.1 只讀接口不需要 DRFDjango 原生 View 就夠用代碼里如果數(shù)據(jù)表和導(dǎo)入都搞定了接下來(lái)就是把這個(gè)項(xiàng)目最好看的可視化部分搭起來(lái)。很多人在這一步會(huì)直接引入 Django REST Framework寫 serializer、寫 router。但如果你只是要從數(shù)據(jù)庫(kù)讀出聚合結(jié)果、返回 JSON 給前端原生 Django View 完全夠用少一層依賴部署時(shí)也少一點(diǎn)版本兼容問(wèn)題。等以后真要加登錄鑒權(quán)、分頁(yè)、過(guò)濾、API 文檔再遷移到 DRF 也不遲。以“城市 PM2.5 趨勢(shì)”接口為例最核心的視圖可以這樣寫# monitor/views.py from django.http import JsonResponse from django.utils.dateparse import parse_datetime from django.views import View from django.db.models import Avg from django.db.models.functions import TruncHour, TruncDay from monitor.models import AirQuality class CityTrendView(View): 按城市和時(shí)間范圍返回 PM2.5 聚合值支持按小時(shí)或按天聚合。 def get(self, request, city_id): start parse_datetime(request.GET.get(start, )) end parse_datetime(request.GET.get(end, )) if start is None or end is None or start end: return JsonResponse({error: start 和 end 參數(shù)必填且 start 需早于 end}, status400) granularity request.GET.get(granularity, day) trunc_expr TruncHour(monitor_time) if granularity hour else TruncDay(monitor_time) rows ( AirQuality.objects .filter(station__city_idcity_id, monitor_time__range(start, end)) .annotate(buckettrunc_expr) .values(bucket) .annotate(avg_pm25Avg(pm25)) .order_by(bucket) ) payload [ { t: item[bucket].strftime(%Y-%m-%d %H:%M), pm25: round(item[avg_pm25], 2) if item[avg_pm25] is not None else None, } for item in rows ] return JsonResponse(payload, safeFalse)這個(gè)視圖有幾個(gè)細(xì)節(jié)值得展開(kāi)。TruncHour和TruncDay是 Django 提供的數(shù)據(jù)庫(kù)時(shí)間截?cái)嗪瘮?shù)它會(huì)在 SQL 層完成DATE_FORMAT這類操作比把所有明細(xì)拉回 Python 再按時(shí)間分組快得多也避免了時(shí)區(qū)被 Python 側(cè)二次解釋。values(bucket)配合annotate(Avg(pm25))是標(biāo)準(zhǔn)的 group by 寫法注意聚合結(jié)果字段名是avg_pm25前端拿到的 JSON 里就是這個(gè)鍵不要寫成pm25__avg這種自動(dòng)名那樣前端代碼會(huì)很難看。avg_pm25可能是 None響應(yīng)里保留顯式 null讓前端圖表能跳過(guò)空缺點(diǎn)。URL 配置同樣很直接不需要注冊(cè)到 DRF router# config/urls.py from django.urls import path from monitor.views import CityTrendView urlpatterns [ path(api/city/int:city_id/trend/, CityTrendView.as_view(), namecity-trend), ]int:city_id會(huì)做參數(shù)類型轉(zhuǎn)換傳入視圖的是一個(gè) Python int不是字符串。接口寫好后先用 Django 測(cè)試客戶端試一下python manage.py shell里用Client().get(/api/city/1/trend/, {start: ..., end: ...})這一步確認(rèn)能返回 JSON再寫前端避免前后端同時(shí)出錯(cuò)時(shí)不知道鍋該甩給誰(shuí)。4.2 ECharts 接數(shù)據(jù)折線圖先跑通再擴(kuò)展熱力圖前端可視化我默認(rèn)用 ECharts因?yàn)閲?guó)內(nèi)能檢索到的數(shù)據(jù)可視化示例幾乎一半以上都是用 ECharts 做的折線圖、柱狀圖、地圖熱力圖都有成熟配置。頁(yè)面里通常先準(zhǔn)備一個(gè)容器 div再在腳本里初始化圖表// templates/index.html 中內(nèi)聯(lián)或單獨(dú) static/js/trend.js const chart echarts.init(document.getElementById(trendChart)); function loadTrend(cityId, start, end) { fetch(/api/city/${cityId}/trend/?start${encodeURIComponent(start)}end${encodeURIComponent(end)}granularityday) .then(res res.json()) .then(data { chart.setOption({ tooltip: { trigger: axis }, xAxis: { type: category, data: data.map(d d.t) }, yAxis: { type: value, name: μg/m3 }, series: [{ name: PM2.5, type: line, connectNulls: false, data: data.map(d d.pm25) }] }); }); }connectNulls: false在這里很關(guān)鍵。接口返回的pm25字段如果是 null折線要斷開(kāi)而不是用直線跨越缺口否則會(huì)讓人誤以為那段時(shí)間濃度是連續(xù)變化的。如果數(shù)據(jù)跨度是一整年、粒度選了 hour折線會(huì)上萬(wàn)個(gè)點(diǎn)瀏覽器渲染會(huì)卡頓此時(shí)要么把粒度切到 day要么在接口里再做一次 LIMIT。接口里沒(méi)有寫死 LIMIT是因?yàn)檫@類內(nèi)部看板的需求變化很快我個(gè)人更傾向于在 URL 參數(shù)里暴露 granularity把前端的展示壓力交給用戶選擇。4.3 頁(yè)面模板與靜態(tài)資源別把接口地址寫死在 localhost模板頁(yè)面放在 Django 的 templates 目錄圖表 JS 和 ECharts 庫(kù)放在 static 目錄。有一個(gè)特別常見(jiàn)的坑是本地開(kāi)發(fā)時(shí)接口地址寫http://127.0.0.1:8000/api/...一切正常部署到服務(wù)器后就空白因?yàn)闉g覽器地址變了但 JS 里的 localhost 沒(méi)變。我一般會(huì)在模板里把接口前綴注入到全局變量!-- templates/index.html -- script window.API_BASE {% url city-trend city_id1 %}.replace(/api/city/1/trend/, /api); /script這樣前端只要基于API_BASE拼路徑本地和服務(wù)器都能用相對(duì)地址省去部署時(shí)改代碼的麻煩。ECharts 本身是純前端庫(kù)建議把它下載到static/vendor/echarts.min.js不要用 CDN。城市級(jí)可視化項(xiàng)目經(jīng)常部署在不能訪問(wèn)外網(wǎng)的內(nèi)網(wǎng)環(huán)境CDN 一斷圖表就全白這是很多新手連 ECharts 的邊都摸不到就開(kāi)始懷疑后端接口的原因。5. 部署與開(kāi)發(fā)排錯(cuò)PM2.5 可視化項(xiàng)目最常見(jiàn)的 5 個(gè)坑5.1 MySQL 8.0 連不上Authentication plugin 報(bào)錯(cuò)現(xiàn)象python manage.py migrate時(shí)報(bào)django.db.utils.OperationalError: Authentication plugin caching_sha2_password cannot be loaded。原因MySQL 8.0 默認(rèn)認(rèn)證插件是 caching_sha2_password而 PyMySQL 版本過(guò)舊或系統(tǒng)里的 mysqlclient 不認(rèn)這個(gè)插件。解決升級(jí)依賴庫(kù)在 requirements.txt 里把 PyMySQL 版本寫新一點(diǎn)并在項(xiàng)目的__init__.py里顯式注冊(cè)# config/__init__.py import pymysql pymysql.install_as_MySQLdb()如果你用的是 mysqlclient則優(yōu)先檢查系統(tǒng)是否裝了 libmysqlclient-dev 這類底層庫(kù)。也可以在 MySQL 里為項(xiàng)目單獨(dú)創(chuàng)建用戶指定使用 mysql_native_password 插件但這屬于臨時(shí)方案新庫(kù)還是建議升級(jí)驅(qū)動(dòng)畢竟 MySQL 8.4 之后 mysql_native_password 也開(kāi)始被邊緣化。5.2 中文亂碼寫入是問(wèn)號(hào)讀出來(lái)也是問(wèn)號(hào)現(xiàn)象城市名“北京”在 Django Admin 里顯示為??—?o?或??。原因建庫(kù)時(shí)用了默認(rèn)字符集或者表不是 utf8mb4或者 Django 連接串沒(méi)指定 charset。解決從三個(gè)層面拉齊——建庫(kù)時(shí)顯式指定DEFAULT CHARACTER SET utf8mb4settings 的OPTIONS里寫charset: utf8mb4打開(kāi) MySQL 客戶端連接時(shí)執(zhí)行SET NAMES utf8mb4。數(shù)據(jù)已經(jīng)亂掉的場(chǎng)景沒(méi)有后悔藥只能清空重導(dǎo)所以建庫(kù)時(shí)這道命令一定不要省。5.3 時(shí)間錯(cuò)位早上 8 點(diǎn)的數(shù)據(jù)跑到了 0 點(diǎn)現(xiàn)象接口返回的 JSON 里時(shí)間比原始 CSV 少了 8 小時(shí)或者圖表橫軸每天從 16 點(diǎn)開(kāi)始。原因Django 默認(rèn)TIME_ZONE UTC而 CSV 里的時(shí)間是北京時(shí)間Django 的 DateTimeField 一旦啟用USE_TZ True存庫(kù)時(shí)會(huì)按 UTC 轉(zhuǎn)換。解決settings 里改時(shí)區(qū)配好后重新導(dǎo)數(shù)據(jù)LANGUAGE_CODE zh-hans TIME_ZONE Asia/Shanghai USE_TZ True注意這里USE_TZ True保留讓 ORM 自動(dòng)處理時(shí)區(qū)轉(zhuǎn)換配合前端只顯示monitor_time的本地時(shí)間字符串即可。另一個(gè)相關(guān)問(wèn)題是聚合查詢里的TruncHour在 MySQL 中會(huì)基于數(shù)據(jù)庫(kù)會(huì)話時(shí)區(qū)計(jì)算最好在連接數(shù)據(jù)庫(kù)前確認(rèn)連接時(shí)區(qū)。血淚經(jīng)驗(yàn)是先寫一個(gè)腳本隨機(jī)抽幾條記錄比對(duì) CSV 原時(shí)間和接口返回時(shí)間再做可視化別等圖表出來(lái)了才發(fā)現(xiàn)整體平移了 8 小時(shí)。5.4 接口慢一次查一年數(shù)據(jù)卡了 5 秒現(xiàn)象折線圖加載時(shí)接口耗時(shí) 4000ms請(qǐng)求體 200KB前端渲染也卡。原因粒度使用了小時(shí)但查詢跨度是一年返回上萬(wàn)個(gè)聚合點(diǎn)或者模型沒(méi)寫db_index時(shí)間范圍過(guò)濾是全表掃描。解決先把接口默認(rèn)粒度改成 day再用EXPLAIN或 Django 的connection.queries看有沒(méi)有走索引最后在AirQuality表上加復(fù)合索引讓過(guò)濾和排序同時(shí)受益class Meta: db_table fact_air_quality unique_together (station, monitor_time) indexes [ models.Index(fields[monitor_time, station], nameidx_time_station), ]做了這一步同一份數(shù)據(jù)接口耗時(shí)基本能降到原來(lái)的十分之一??梢暬?xiàng)目一旦數(shù)據(jù)進(jìn)入十萬(wàn)行索引和聚合粒度就是兩個(gè)最關(guān)鍵的調(diào)優(yōu)點(diǎn)。5.5 圖表白屏HTML 加載了但 ECharts 不渲染現(xiàn)象打開(kāi)頁(yè)面看到按鈕和標(biāo)題圖表區(qū)域空白瀏覽器 F12 里報(bào)echarts is not defined或 404。原因引用的是 CDN 上的 echart.min.js內(nèi)網(wǎng)環(huán)境加載失敗或者 Django 的DEBUG False時(shí)靜態(tài)文件路由失效。解決先把 ECharts 庫(kù)下載到本地 static然后確認(rèn) settings 配置STATIC_URL /static/ STATICFILES_DIRS [BASE_DIR / static]開(kāi)發(fā)階段保持DEBUG True部署到 Nginx 時(shí)把/static/一起代理給 Nginx 處理不要讓 Django 承擔(dān)靜態(tài)文件服務(wù)。如果 Nginx 配好后仍然白屏先 curl 一下http://你的域名/static/vendor/echarts.min.js確認(rèn)這個(gè)文件在服務(wù)器上真實(shí)存在而不是部署時(shí) static 目錄沒(méi)同步過(guò)去。6. 驗(yàn)證接口與進(jìn)階方向從“能跑”到“能上線”6.1 用 Django TestCase 給接口上保險(xiǎn)這個(gè)項(xiàng)目最脆弱的部分不是前端而是接口的查詢參數(shù)。只要有人把start傳錯(cuò)格式或者數(shù)據(jù)庫(kù)里混進(jìn)了空值接口就會(huì)花式報(bào)錯(cuò)。我會(huì)用 Django 自帶的 TestCase 寫最小回歸驗(yàn)證確保改表結(jié)構(gòu)或加索引時(shí)不破壞接口# monitor/tests.py from django.test import TestCase from django.test import Client from django.utils import timezone from monitor.models import City, Station, AirQuality class CityTrendApiTest(TestCase): def setUp(self): self.city City.objects.create(name測(cè)試城市) self.station Station.objects.create(codeTEST_01, name測(cè)試站, cityself.city) AirQuality.objects.create( stationself.station, monitor_timetimezone.now(), pm2512.5, pm1035.0, ) def test_trend_returns_json_with_daily_avg(self): resp Client().get(/api/city/{}/trend/.format(self.city.id), { start: 2025-01-01T00:00, end: 2025-12-31T23:59, granularity: day, }) self.assertEqual(resp.status_code, 200) self.assertIn(pm25, resp.json()[0])這個(gè)測(cè)試斷言了接口返回 200 且包含pm25字段后面你改接口參數(shù)名、改聚合字段名時(shí)測(cè)試能直接提醒你前端同事也會(huì)跟著遭殃。跑一遍python manage.py test monitor幾秒鐘就能證明這個(gè)可視化項(xiàng)目的后端是可靠的。6.2 從看板到監(jiān)測(cè)產(chǎn)品AQI 分級(jí)、定時(shí)采集、預(yù)警推送基礎(chǔ)可視化跑通之后值得投入的三個(gè)方向是加 AQI 計(jì)算邏輯和污染等級(jí)配色而不是只展示一個(gè) PM2.5 數(shù)值用系統(tǒng) crontab 或 Celery beat 每小時(shí)拉一次監(jiān)測(cè)站數(shù)據(jù)保持看板實(shí)時(shí)在 PM2.5 連續(xù)三小時(shí)超過(guò)閾值時(shí)給業(yè)務(wù)群推送告警。這三個(gè)方向都能在你的課程設(shè)計(jì)說(shuō)明或項(xiàng)目文檔里作為亮點(diǎn)出現(xiàn)也和我做項(xiàng)目的習(xí)慣一致——可視化不是終點(diǎn)是數(shù)據(jù)被人使用和響應(yīng)的起點(diǎn)。做第一個(gè)版本時(shí)我曾在時(shí)區(qū)配置上翻了車整張圖表和真實(shí)監(jiān)測(cè)數(shù)據(jù)差了 8 小時(shí)后來(lái)每次接到時(shí)序數(shù)據(jù)項(xiàng)目第一件事就是先把“源數(shù)據(jù)時(shí)間 → 數(shù)據(jù)庫(kù)存儲(chǔ)時(shí)間 → 接口返回時(shí)間”全鏈路比對(duì)一遍。這個(gè)習(xí)慣幫我避掉了后續(xù)大量返工。如果你照著這套步驟把 PM2.5 可視化項(xiàng)目跑通后面換城市、換污染因子、換數(shù)據(jù)庫(kù)都只是參數(shù)級(jí)改動(dòng)希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
五月丁香六月情亚洲| 久久色频| 婷婷五月天成人网| 嫩草综合网| 天天操天天干天天射| 丁香婷婷视频一区二区| 亚洲国产婷婷色五月| 色噜噜狠狠色综无码久久合欧美| 九九99热| 婷婷丁香五月亚洲| 日日射天天射| 六月99天天婷婷激情综合| 五月天激情综合| 伊人婷婷综合| 丁香五月天影院| 香蕉久久国产AV一区二区| 综合在线丁香五月| 色色热99| 亚洲小视频免费播放| 图片区 小说区 区 亚洲五月| 丁香五月激情在线| 色 五月婷婷基地| 日韩久综合| 久久伊人大香蕉| 婷婷色五月色| 婷婷激情五月综合丁香社| 狠狠第四色| 中文字幕日产A片在线看| 九九热只有精品| 色色色色色热| 好好干Av| 色婷婷婷av| 永久免费一区二区三区| 99热在线爱| 五月花激情| 激情五月开心五月丁香五月| 婷婷五月天在线观看第二页| 亚洲国产精品综合色区| 久久五月婷天天干| 第四色婷婷色五月| 激情五月婷婷综合网| 久热九九| 亚洲午夜AV| 激情五月天99色| 国产做爰视频免费播放| 男人大jjc女人免费视频| 激情丁香婷婷| 99热都是精品| 五月婷婷激情| 丁香五月激动深爱欧美| 一本色道久久88综合日韩精品| 日韩欧洲亚洲| 天天色视频| 欧美日韩成人高清在线| 91久久1118| 国产婷婷综合| 99爱爱| 日本在线va| 五月婷婷香蕉| 5月丁香六月情| 五月天婷婷基地丁香| 91九色中文字幕女在线观看| 亚洲无码另类| 日本熟女三区| 色婷婷九月| 色月视频| 天天爽天天摸| 五月丁香啪啪啪啪| 国产精产国品一二三在观看| 色色综合网www| 国产精品久久久久久久久久免费| 国产成人+综合亚洲+天堂| 色色五月天激情| 先锋资源婷婷| 激情五月激情综合网| 任你爽视频| 久久人妻久久| 天天射网站| 欧美槡BBBB槡BBB少妇| 99热自拍| 五月婷婷影视| 久久久九九视频精品18| 久久色天堂| 亚洲综合无码| 色五月激情综合| 伊人狠狠干| 婷婷五月花西瓜| 五月婷婷综合久久| 五月激情影视| 五月四色激情| 五月综合久久| 五月婷婷六月丁香色| 丁香五月天综合| 91丨九色丨熟女| 79精品视频在线观看,| 五月婷婷激情久久| 色就色94欧美setu| 色婷婷基地| 免费观看18视频网站| 亚洲色99| 99在线播放| 久久婷婷五月天激情| 日韩不卡DvD| 婷婷爱综合| 亚洲视频伍月婷婷| 成人精品在线观看| 教师性爱毛片| 99久热这里只有精品视频删减版| 天天爽天天爽视频| 五月婷婷综合在线| 五月天另类小说久久小说网| 日本熟女视频一区二区| 日韩在线99| 夜夜撸夜夜骑| 国产avapp 网| 激情婷婷色五月| 九九色人| 日韩欧美老妇性视频91久久久| 人人97碰| 丁香五月婷婷影院| 日本色色影片| ss五月天激情| 色色色色热| 一区=区操屄高清大全av| 色女人久久| 天天做天天干天天综合网 | 大狠狠在线| 九九热这里只有精品6| 婷婷 丁香 久久| 91艹人| 丁香婷婷色五月激情综合| 丁香五月激情啪啪| 亚洲熟女色| 丁香婷婷色五月合集| 123草逼网| 亚洲欧洲美女在线观| 婷婷在线免费| www.91久久| 色约约视频一区二区三区四区五区 | 婷婷香蕉香| 婷婷综合久久| 久色网| 丁香五月婷婷久久久| 久久久久久久丁香五月天婷婷| 天天爽,夜夜爽| 搡BBBB搡BBB搡18| 亚洲在线操| 丁香色综合| 91狠狠综合久久久| 婷婷爱综合| 黄网在线免费观看| 色婷婷五月天中文字幕| 99热国产免费| 天天爽—爽| 五月丁香好婷婷A片网| 久久这里只有精品视频15| 亚洲五月天第一综合干| 日韩啪啪网| 亚洲视频五区| 玖玖热视频| 99啪啪网| 五月婷中文娱乐综合| 亚洲成人网站在线观看| 婷婷色综合| 五月婷婷啪啪网| 丁香五月天激情综合| 五月婷婷先锋| 中文字幕 中文字幕明步| av电影在线播放| 99九九视屏| 无码AV免费精品一区二区三区 | 九七色色六月丁香| 深爱五月婷婷开心中文字幕| 99精品偷自拍| 天天狠狠六月婷丁香影院| 日本高清久久| 99热这里只有的精品视| 五月丁香婷婷啪啪网| 丁香五月成人av| 爱狠射| 亚洲综合视频一下| 丁香婷婷色五月| 国产肏屄大片| 狠狠狠狠狠| 这里只有视频精品| 超级碰碰一区| 亚洲精品成人| 五月婷婷深爱六月| 色综合色色色色| 久久五月天色婷婷| 亚洲av免费在线| 超碰妻人人| 丁香五月色欲| 狠狠搞五月天| 色五月色开心开心五月| 婷婷五月天av| 激情婷婷五月天在线观看| 影音先锋秋秋五月婷婷| 久99视频在线观看| 天天做综合网色综合| 婷婷香蕉精品| 超碰免费成人| 婷婷成人综合免费视频| 欧美超碰人人| 五月丁香人妻| 热久久国产视频| 婷婷五月天丁香久久| 9久热在线视频精品| 色视频2025| 久久桃花网色婷婷| 色色色色色色色色网站| 狠狠激情五月天| 久久久激情视频| 伊人激情AV一区二区三区| 亚洲欧美国产高清vA在线播放| 丁香情色五月| 超碰在线91| 婷婷色播综合五月| 99视频内射三四| 婷婷狠狠干| 9久热在线视频精品| 六月综和久久| 东京热伊人| chaopengdaxiangjiao| 久99久精品| 色五月婷婷、老熟女| 99碰碰中文| 色婷另类| 色综合另类| 都市激情蜜桃婷婷五月天 | 五月丁香六月婷婷成人电影| 天天影视色综合网| 超碰com| 79精品视频在线观看,| 天天爱天天狠天天透| 中文字幕综合色| 色婷婷免费观看| 久久婷婷五月国产色综合激情| 国产免费性爱| 99精品色| 六月激情网| 亚洲五月天第一综合干| 色欧美日| A片试看120分钟做受视频红杏| 五月婷婷丁香婷婷| 婷婷色播六月无码| 五月丁香婷婷爱激情综合网| 亚洲熟妇AV乱码在线观看 | 亚洲操精品| 开心亚洲久久开心| 丁香五月欧美激情| 日本欧美成人片AAAA| 99视频在线精品免费观看2| 91操熟女| 天天综合91入口| 亚洲精品字幕在线观看| 亚洲av网站| 婷婷五月天亚洲综合网| www.主妇. com| 麻豆AV一区二区三区| 色婷婷A| 99综合免费视频| 无码色色| 色5月丁香婷婷| 亚洲a色| 伊人丁香婷婷东京| 五月综合视频在线| 久热这里只有精品在线观看 | 丁香五月激情六月综合| 婷婷丁香五月天狠狠| 日韩好吊操| 亚洲综人色综网| 久久伊人婷婷| 久久丁香婷婷五月天| 成人精品在线| 成人婷婷桔色| 婷婷丁香五月欧美人| 日韩激情婷婷五月天| 性爱网久久| 99久久久免费| 日韩一区二区在线播放| 激情网第四色| 涩涩涩五月天| 91九色视频| 色综合九九色综合88| 狠狠色五月天| 色欲一区二区三区精品A片| 另类专区在线| 五月婷在线| 国产成人精品123区免费视频| 被男人添B超爽视频| 99精品偷自拍| 丁香五月婷婷欧美成人色图| 久久精品婷婷| 天天情天天狠天天透| enecarbon-materials.comWu染请涟系Bao护@wip1688 | 激情影院丁香五月| 亚洲中文字幕AV在线| 丁香久久在线| 婷婷激情五月天桃花网| 内射综合网| 欧美色狠婷久| 久色欧美| 五月婷婷六月色| 精品一二三区久久AAA片| 国产午夜精品一区二区三区嫩草| 国产午夜精品AV一区二区麻豆| 精品国产AV色一区二区深夜久久| 丁香五月 激情文学| 99热在线看片| 啪啪啪五月天| www.91色| 激情综合网五月婷婷| 玖玖综合色| 五月丁香六月激情综合| 91热网址| 精品乱码视频| 天天干天干| 色色五月丁香| 激情婷| 六月丁香啪啪| 久久久区区一久久久久久| 五月天婷婷成人网| 丁香五月婷婷激情97| 玖玖婷婷色| 五月丁香六月色婷婷综合五月天| 五月丁香天堂网| 色综合色色| 久久久久视剧HD| 青青草色在线视频观看| 操比激情五月| 91viP在线看| 五月六月丁香激情视频| 五月社区婷婷激情| 夜夜操狠狠操| 99色视频| 五月综合激情图片| 粉嫩av懂色av蜜臀av熟妇| 日本99在线| 九九综合精品| 凹凸操Av| 色五月综合网| 成人婷婷色综合| 婷婷丁香五月天激情四射| 亚洲AV日韩AV永久无码网站| 久久久久久久五月| 五月色综合网欧美网| 超碰91在线| 亚洲人人操| 婷婷色网| 亚洲色无码| 色色狼人综合| 日韩精品一区二区三区,四区,五区视频 | 九月性爱网| 五月丁香九九| 天天草天天舔| 激情五月天综合网| 国产高清av黄色看片| 激情久久婷婷| 中文字幕丰满孑伦无码专区| 99色嘟嘟精品网站| 婷婷五月无码| 久久奄也去色色网站| 色五月丁香在线| 婷婷成人AV| 夜夜操狠狠操| 色色色五月| 91狠狠综合久久| 五月丁香六月婷婷手机无线| 91丨九色丨43老版熟女| 欧美日韩国产成人在线| 狠狠色婷婷7| 激情五月婷婷丁香| 成人做爰高潮A片免费视频| 欧美婷婷综合网| 99久久婷婷五月综合| 啪啪激情综合| 99视频精品在线| 五月天色色网站| 天综合日日夜综合7799| 3p日韩网站视频| 中文字幕激情综合| 久草x色在线观看99| 色情五月天小说| 人人草开心五月天| 九九XX视频| 超碰免费在线| 婷婷午夜丁香| 99久久五月丁香野外| 黄色AV日韩| 丁香五月在线| 国产av第一专区| 午夜爱插插| 久久婷婷亚洲无码一起| 9这里只有精品| 天天插天天爽| 丁香婷婷五月激情| 色欲午夜无码久久久久久张津瑜 | 精品久久穴| 99热日韩| 欧美色色色色色色色| 九九热内射| 日本婷婷综合精品| 能直接看的av网站| 丁香五月激情婷婷| 色99视频| 亚洲六月婷婷| 99热国内精品| 久久精品五月天| 六月婷婷久久| 996热re视频在线观看视频| 丁香婷婷人妻综合网| 69精品人人人人| 久婷久婷激情肉| 亚洲婷婷丁香五月视频| 影音先锋女人AA鲁色资源| 久久99婷婷| 五月婷久久在线| 少妇2做爰HD韩国电影| 丁香婷婷人妻| 激情99| 亚洲天堂热| 久9久9久9久9久9久9| 另类亚洲视频| 久久婷婷国产| 五月天激情影院| 婷婷久久精品| av在线观看免费| 在线中文字幕视频| 俺也去婷婷五月天第五色| 能看的av| 色色色综合色| 亚洲丁香五月深爱五月| 中国丰满熟女A片免费观| 99色色热| 中字幕视频在线永久在线观看免费| 六月婷婷无码| 婷婷五月花| 五月婷婷黄色视频| 99精日本久久| 五月婷婷AV| 婷婷综合另类| 激情婷婷五月| VA日本视频| 激情五月综合网| 五月综亚洲| 国产精品18久久久| 亚艹艹| 婷婷刺激综合| 五月婷婷在线观看黄| 青草五月天| 五月天小说激情| 久热九九| 久久婷婷色情7777网站| 久久丁香婷婷五月| 91在线人| 色五月婷婷777| 日本99热| 噜噜在线| 久色网| 丁香五月天网站| 天天摸天天做天天爱天天爽| 亚洲亚洲永久无码777777| 天天干狠狠操| 天天婷婷天天| 精品人妻久久久| 欧美日本综合网| 中文字幕成人| 欧亚洲在线高清视频| 成人Av在线大片| 久久蜜臀婷婷| 欧美三级视频下载| 丁香五月婷婷五月| 五月婷婷导航| 五月丁香啪啪综合网| 91婷婷五月丁香碰| 艳妇野外情欲放荡HD| 亚洲成人婷婷| 五月天伊人av| 久久色午夜在线导航| 五月天色色网站| 呦呦AV| 丁香五月婷婷偷拍| 成人美女网| 五月天成人在线播放| 99热欧美在线观看| 久久婷中文字幕| 五月婷在线| 婷婷成年人免费视频| 天天日天天添| 色色婷婷婷丁香五月天| 成人视频网| 五月婷婷丁香五月 | 91色综合网站在线| 婷香五月激情视频| 色色com| 色小说婷婷五月天天天| 国产成人在线精品| 大香蕉丁香婷婷| 91日韩在线| 婷婷五月花丁香| 性爱在线播放av| 超碰资源在线| 激情婷婷在线| 色五月情| 天天日日夜夜| 婷婷久久五月丁香| 欧美色色色色色| 婷婷的五月天另类视频| 国产99热| 亚洲天堂爱爱| 狠狠操狠狠操AV| 久久这有这里精品| 99五月丁香丁| 站长推荐无码播放| 丁香六月激情毛片| 亚洲成人AV一区在线观看| 亚洲va综合va国产va中文| 日韩啊啊啊| 深爱丁香激情| 成人婷婷五月天| 五月天久久婷婷| 97色啪| 久久久久久久久久久久久久久久久精典| 婷婷久久综合| 天堂无码人妻精品AV一区| 99人人干| 99人碰碰碰| 91.com男女操| 人妻激情在线| 夜夜躁爽日日| 激情五月婷婷综合| 成人视频婷婷| 天天天摸夜夜夜玩| 伊人色综在线| 日本成人小说婷婷六月| 天天射天天射一道本日本社区| 婷婷六月丁香在线| 婷丁五月| 亚洲美女婷婷五月天| 粉嫩av懂色av蜜臀av熟妇| 五夜丁香| 国产激情在线| 超碰九九热| 91精品综合久久婷婷九色| 碰碰碰97免费精彩视频| av一区二区电影免费在线观看| .青娱乐天天操B| 久草热8精品视频在线观看| 激情六月五月婷婷综合网| 成人五月天在线观看| 99色视频| 久久老码第一| 色性综合| 久久奄也去色色网站| 六月婷婷色五月| 丁香激情合作五月| 五月涩涩网| 五月人人丁香婷婷五月人人丁香| 婷婷六月插屄激情| 激情五月天免费视频| 婷婷色五月天综合网| 婷婷五月丁香成人| 色亚洲欧洲| 综合网激情| 欧美色宗和激情| 成人午夜无码视频| 欧洲色色| 超碰妻人人| www.99热. com这里只有精品| 五月丁香久| 中文字幕无码AV| 26uuu色噜噜精品一区| 一区二区成人电影| 九九大香视频| 色综合天堂| 丁香五月婷婷综合91| 久久99美女精彩视频| 精品一二三区久久AAA片| 九九热这里只有精品首页| 激情婷婷丁香五月天| 色婷成人狠干| 五月婷婷激情综合av| 婷婷情色五月| 丁香五月综合AV在线| 丁香八月综合激情| 五月激情六月宗合| 97久久久免费福利网址| 操逼视频一区| 久久99久久99久久99人受| 成人婷99最新| 色五月婷婷婷婷婷婷婷婷婷婷| 国产成人av在线播放| 97操碰碰无码视频| 色爱五月天| 婷婷五月在线免费| 久久99综合| 丁香六月色情| 91干99| 思思久久精品| 99日在线视频| 99视频精品| 337p午夜影院| 色婷婷色和| 天天爱综合网| 91操操| 偷偷与邻居做爰完整视频| 婷婷五月天激情在线观看 | 99爱这里只有精品| 9久热精品在线视频| 综合五月激情| 久久精品综合色| 大香蕉伊人久久| 亚洲色五月天是什么| 激情综合网婷婷五夜| 丁香六月色婷婷| 婷婷五月色影视先锋| 五月丁香啪啪综合| 五月婷婷无码专区| 狠狠爱婷婷爱| 强辱丰满人妻HD中文字幕| 天天做天天爱天天综合网| 五月丁香婷婷婷激情爱爱| 天天舔天天爽| 亚洲久久视频| 五月婷婷草| 日本色五月| 天天成人五月天| 丁香六月av| 99九九视频| 天堂草在线观| 第四色激情网| 永久天堂日本| 伊人久久婷婷| 五月天婷综合| 色五月六月婷婷| 在线观看av网站| 六月成人网| 99狠狠| 亭亭丁香aV| 亚洲av成人一区二区电影在线| 日本91在线| 日本熟女三区| 九九色色网| 91九九九九九九| 五月婷丁香| 中文乱子伦视频| 色色综合成人网| av操一操| 99热10在线高清播放| 久操热| 开心婷婷五月天激情网| 99激| 色色色综合网| 在线超碰91| 九九色情网站| 婷婷午夜| 日韩无码色色| 天天干天天拍| 综合伊人狠狠| 天天模,夜夜模夜夜爽| 一区二区三区视频| 九九99热久久精品66中文字幕| 黄桃AV无码免费一区二区三区 | 日本欧美啪啪| 婷婷综合中文字幕| 亚洲国产精品二二三三区 | 五月丁香婷婷在线综合蜜桃| 九洲一级A片| 激情婷婷丁香色五月| 黄色片久久| 人人操AV| 中文字幕视频在线播放| 五月综合丁香婷婷| 99精品无码| 激情五月,婷婷五月,丁香五月| 开心五月综合激情综合五月| 中文字幕+乱码+中文字幕在线观看| 久久天堂网| 欧美WW在线网| 亚洲AV无码影院| 亚洲在线成人| 日本三级片片| 五月天堂六月丁香亚州中文字幕久久 | 九九九这里只有精品| 婷婷月综合| 9超碰在线| 久久精品天| 超级碰碰视频无码| 久久综合播放| 中文字幕丰满人妻无码专区| www.综合久久.com| 操碰91| 五月伊人综合| 色小说婷婷五月天天天| 亚洲妇女熟BBW| 91色在线/日韩| 91丁香五月| 久久丁香婷婷五月| 亚洲韩国日产综合AV| 亚洲AV无码一区二| 99干视频| 九月丁香婷婷综合激情| www.日韩艹| 日韩在线aaa| 色综合另类| 91丨九色丨白浆秘| 国产人妻人伦精品一区二区| 色色综合网www| 综合九色| 色色色干| 色婷婷五月天天天天天天天天天| 婷婷五月天在婷| 激情五月天婷婷五月天| 久久九九爽| 伊人婷婷五月天| 狠狠干五月| www.超碰97| 色很久综合| 国产成人在线精品| AV天堂淫乩| 婷婷丁香在线播放| 99精品久久久| 影音先锋女人AA鲁色资源| 狠狠婷婷色综合| 欧美精品A片一区在线观看| 九九九九国产| www,五月丁,com| 操骚货在线| 五月天激情婷婷| 亚洲99一级无嗎特制在线| 日本色天堂| 色欲天天综合| 日韩综合大黄| 欧美三日本三级少妇三99| 亚洲色五月| 96色婷婷| 伊人丁香六月婷婷| 国产精品久久久海的味道| 五月丁香六月综合激情| 日韩AV在线免费| 天天爽在线视频| 热99热9| 操久久网| 伦乱人妻| 97色色婷婷| 日日操天天| 色婷婷久久| 久久大香免费| 婷婷综合五月激情| 综合色播| 日韩性爱无码| 精品综合久久久久久五月天| 久久久性爱视频| 婷婷六月天国产综合| 日本91在线| 色色网站在线| 中文字幕一色哟哟哟哟| 91性高潮久久久久久久久| 思思热久久久在线| 六月婷婷五月丁香| 97碰碰视频在线观看| 五月婷婷精品无在线| 99在线免费视频| 亚洲性视频| 久久视频这里99| 国产精品久久久久久久久久免费| 婷婷久久亚洲| 色婷婷综合影院| 91大操| 天天干天天操天天上| 在线播放中文字幕| 久久 无毛。| 99热日韩| 丁香婷婷九月在线| 丁香六月婷婷高清| 婷婷五月天久久| 五月丁香激| 色婷婷亚洲五月天| 欧美激情-区二区三区| 五月天激情中文字幕| 综合久久婷婷| 99视频色在线观看| 99视频自拍| 玖玖婷婷综合| 欧美va在线| 婷婷伊人综合| 夜夜操天天爽| 26uuu欧美| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | 自拍盗摄 另类| 七月婷婷色香综合网| 五月丁香999| 国产成人精品亚洲线观看| 99久久99视频只有精品| 天天操天天操天天操天天操天天操 | 思思热性操| 被强行糟蹋的女人A片| 狠狠综合久久| 五月丁香影视| 丁香伊人激情| 婷婷五月丁香亚洲| 蜜桃五月天| 97午夜一区二区| 色女伊人| 亚洲天堂AV综合网| 五月天婷婷在线AN| 午夜日韩久久久网站| 特级西西4444www无码| 色色网91| 丁香五月网址| 六月婷婷天天操夜夜爽视频| 97色色视频| 99re在线观看视频| 婷婷欠久少妇| 99热这里只有精品首页| 日韩99视频| 丁香六月激情综合| 亚洲舔观看| 婷婷大香焦| 狠狠干无码| 五月天婷婷色情| 久久一热| 色婷婷A| 色色色com| 久久婷婷五月激情网站| 婷婷干六月综合旧址| 99视频在线播放大全| 99操99| 免费看欧美成人A片无码| 人人视频色| 久久99大| 色综合区| 日韩激情人伦人| 五月丁香六月成人| WWW,五月| 九九热精品| 这里只有久久精99| 超碰成人电影| www.91五月| 思思热精品在线观看| 五月玖玖| 天天爽天天| 激情五月天激情五月天| 99综合视频一体| 五月天另类小说久久小说网| 丁香五月天网站| 亚洲精品乱码久久久久久按摩观| 91碰免费视频| 天天插综合| 99热精品在线免费观看| 久久精彩综合视频| 韩日AV片| 婷婷五月天av| 婷婷五月色激情欧美激情| 六月激情久久婷婷| 九九九九九九毛片| 少妇性BBB搡BBB爽爽爽电影| 激情综合五月婷婷丁香| 欧美久久五月婷婷| 淫视馆AV在线| 91丨九色丨国产| 成人va在线播放| 直接看的AV| 六月婷婷色五月| 五月丁香 啪啪| 狠狠爱丁香婷| 97人人草| www色婷婷| 天天干夜夜想| 六月天六月婷| 俺也去在线久久精品23欧美综合视频网站,丰满人妻一区二区三区在线视频53,丰满 | 欧美va欧美va差| 99热免费网站| 97色热| 丁香五月熟女| 欧美搡BBBBB摔BBBBB| 99热只有这里有精品| 色五月丁香激情视频| 99热偷拍| 激情五月,激情综合网| 啪啪日本欧美| 青青草国产亚洲精品久久| 久久九九爽| 韩国激情五月天综合网| 五月天激情婷婷小说| 九九热再线九九视频免费在线观看 | 欧美精产国品一二三区| 操日本色| 91女人18毛片水多国产| 国产精品扒开腿做爽爽爽A片唱戏 青青草国产亚洲精品久久 | 91色久| 婷婷狠狠操| 久久aaaaa| 久久婷婷五月综合色区| 国产3p露脸普通话对白| 大香蕉伊人久久| 婷婷的99视频网站| 亚洲成人中心| 99热这里只有精| 天天碰天天插天天操| AV美美午夜| 亚洲色情免费网| 九九色逼| 精品五月视频婷婷在线观看| 天天日日人| 婷婷丁香五月激情图片| 久久久区区一久久久久久| 国产精品日韩十五区| 五月亭亭直播| 日本婷久久| 狠狠色狠狠操| 亚洲字幕AV一区二区三区四区| 激情综合色婷婷啪啪五月天| 97热超碰| 久婷婷| 天天插天天很| 欧美日韩AAAA| 色射影院| 久热这里只有| BBWCUCKOLD精品熟妇| 久久se 综合网| www...com黄在线观看| 色都都狠狠色都都色综合色| 伊人久久大香线蕉AV最新午夜| 噜噜五月天综合| 国产精品岛国片在线观看免费| 国产99久9在线+|+传媒| 性色综合网| 人人九色| 91久久综合亚洲噜噜成人在线| www.jiujiujiu| 久久精彩综合视频| 日日色五月天| 天天操综合网站| 人人干av| 丁香九月激情| 久久婷婷色| 欧美美女视频| 国产原创视频91九色| 激情综合丁香六| 亚洲在线播放| 超碰亚洲天堂| 五月天婷婷在看| 9999热这里只有精品| 激情五月丁香六月综合AVXXXX| 五月天激情国产综合婷婷婷| 996er热| 大香蕉AV在线| 91干99| 久操人妻| 五月天成人手机在线视频| 久久久久久人妻久久久久久久久久人妻久久久 | 伊人久久大香| 丁香色五月 97干| 五月丁香色色网| 亚洲小说欧美激情| h在线看免费版在线看| 婷婷激情六月| 九九久久色| 狠狠丁香| 性生活久久朋友人妻| 欧美色色色| 97AV人人插人人操| 五月天激情小说电影| 超碰99久久| 肏日网在线看| 久久综合伊人综合在线| 91色色色| www.99精品视频| 天天天天天天天操| 五月天啪啪啪| 亚洲天堂大香蕉| 99国产这里只有精品| 亚洲精品久久久久久久久久吃药| 美欧日韩国产成人在战| 丁香五月婷婷激情蜜桃| 无码少妇高潮喷水A片免费| 六月婷婷综合| 色香久久| 日本在线观看91| 亚洲综合婷婷| 欧洲色色| 欧美噜噜噜草| 亚洲成人免费在线| 9l视频自拍九色9l视频在线观看| 久99热| 1024在线一区| 丁香六月婷婷综合麻豆| 五月天播播| 色综合区| 色丁香婷婷| 亚洲小电影在线观看黄999| 国产26uuu| 超级碰碰一区| 丁香婷婷成人在线播放| av网站不卡在线| 丁香五月狠狠综合欧美| 激情五月综合网| 婷婷久久五月| 色情综合| 六月激情婷婷色| 丁香激情网| 亚洲视99| 激情99| 无码网| 99热在线观看| 无码天天操| ..真实国产乱子伦对白在线_欧 | 亚洲AV日韩在线观看| 色婷婷五月天堂资源| 国产精品久久久爽爽爽麻豆色哟哟| 亚洲 精品 综合 精品| 九九热九九| 欧美日韩大黄| 免费看欧美成人A片无码| 日韩无码人妻一区二区三区综合| 国产亚洲精品AAAAAAA片| www.婷婷五月天| 婷婷久久夜| j五月香在线| 常久最新免费的色吊丝| 91seAV| 亚洲无码yw| 日韩无码专区| 亚洲va综合va国产va中文| 这里只有精品热| 久久黄色片| 久久黄色片| 久9无码视频| 婷婷六月色| \\五月天婷婷激情| 婷婷五月丁香色色| 激情五月丁香六月综合AVXXXX| 伊人色综合影院视频| 天天色天天日| 婷婷色色播五月天| 伊人大香久久| 日本精品99| 天天肏天天插| 五月天婷婷丁香人人操91| 色呦呦美女| 天天插综合在线| 色九四色| 美女激情综合| 日韩狠狠色婷婷| 91碰碰碰久久久久| 黄网免费看| 婷婷五月天影视网址| 九九视频在线观看视频在线播放69| 激情99| 色五月丁香总合网| 在线看AV| 大香蕉五月丁香| 丁香久久五月天视频在线观看 | 日本婷婷| 激情五月婷婷免费视频| 亚洲精品第一国产综合亚AV | 色色五月婷婷| 精a品a| 久久九九视频网站| 97涩婷婷婷婷基地| 日日干天天爽| 99热无码首页| 日韩色色小视频| 超碰成人在线免费观看| 可以看的av网站| 操人妻视频91| 亚洲精品乱码久久久久久按摩观| 久久99草五月婷婷| 草草视频91| 丁香五月激情啪啪| 玖月婷婷爱丁香| 色天堂操| 黄桃AV无码免费一区二区三区| 五月天激情四射网站| 色欲日日躁| 大香蕉婷婷丁香天堂AV| 久草 tingting| 另类在线| 日韩色五月| 久久久久久五月天| 六月激情婷婷色| 色婷婷a v| 六月色 亚洲| 97色吧| AV九九| 婷婷成人五月天成人文学| 欧美婷婷五月激情| 婷婷五月天影院| 欧美碰碰碰| 蜜臀AV在线观看| 亚洲色99| 伊人久久婷| 无码人妻一区| 五月天综合区| 六月色日韩| 中文字幕av久久爽一区| www99xxxx五月丁| 欧美色片中文字幕久久久久| XX色综合| 91久久| 婷婷五月天天爽| 婷婷五月图片小说视频| 国产日日夜夜操| 噜噜噜噜噜在线| 色婷婷狠| 久9免费视频| 亚洲无码激情| 91碰操| 日韩av在线播放综合网| 午夜不卡久久精品无码免费| 天天日天天色| 久草婷婷| 97啪啪| 日韩无码专区| 最新久久网址| 操人久久| 亚洲婷婷五月天| 99热在线看| 五月天亚洲综合网| 99热精品在线免费观看| 婷婷色成人| 色五月综合激情| 五月开心激情网| 婷婷涩五月天综合| 日日肏夜夜干| 米奇影视五月天| 五月色丁香婷婷综合| 啪啪色激情五月天| 嫩模aV在线| 97色欧美| 中文字幕人妻在线| 色色五月天网站| 新97人人上人人| 丁香五月电影| 色亚洲无码| 色五月丁香五月激情五月激情| 欧美色狠婷久| 亚洲 精品 综合 精品| 色99亚洲| 99色1| 99这里只有精彩视频| 可以观看的AV| 色婷婷六月| 激情久久肏屄视频| 超碰在线看| 中文激情网| 青青久在线视频免费观看| 激情操逼婷婷| 激情五月天色色色| 月色色综合婷婷网| 亚洲网站999| 99自拍视频在线| 99色看这里只有精品| 99热这里只有精品13| 可以免费看的av网站| 99热久| 日本啪啪网| 婷婷激情六月| 五月天色色无码| 欧美激情-区二区三区| 欧美日韩成人免费在线| 五月天六月丁香| 婷婷五月丁香久久| 天天日天天舔| 五月天激情电影| 日本乱子人伦在线视频| 婷婷久久欧美| 久久婷婷啪啪视频| 激情五月天综合图片小说网站| 亭亭五月天成人| 97影院一级片| 风流少妇A片一区二区蜜桃| 五月丁香 狠狠爱| 五月色丁香| 五月永久激情| 五月天激情网图片| 丁香五月激情啪啪| 色综合播放| 欧美激情丁香五月| 丁香五月天的网址。| 丁香九月久久| 狠狠色噜噜狠| 久热中文字幕| 丁香五月久久综合| 五月天伊人| 三人荫蒂添的好舒服A片| 超碰9在| 精品国产va久久久久久久| 欧美α√| 99热综合| 婷婷六月综合| 色五月五月天| 色色五月丁香| 九九在线91| 五月婷婷 欧美| 天天插天天爽| 中国丰满熟女A片免费观| 亚洲超级碰| 亚洲无码成人性爰网| 婷婷激情六月综合| 色婷婷伊人激情在线观看| 成人av中文字幕| AV79| 日本久久99| www99久久| 色丁香久久久| 人人操AV| 久久天堂网| 99re热免费观看视频精品| 日韩人妻无码专区| 久99久99精品免| 日日夜夜天天爽| www.色综合| 久久超级碰碰| 婷婷五月天伊人网| 亚洲妇女熟BBW| 噜噜噜噜婷婷五月天| 天天做天天爽| 超碰cap| 月婷婷亚洲| 五月婷婷啪啪| 99热费观看| 婷婷五月丁香手机在线视频| 蜜桃人妻无码AV天堂三区| AV网站免费在线| 播播网色播播| 激情性爱婷婷| 欧美亚洲操逼| 欧美色五月| WWW,五月天| 91九色视频| 久热99热| 五月婷婷开心网| 婷婷六月丁综合| www.夜夜騎夜夜狠| 嫩草AV久久伊人妇女超级A| 99久热| 亚洲激情AV| 91精品婷婷国产综合久久| 9l视频自拍九色9l视频在线观看| 性爱技巧五月| 毛片新网地| 久久五月天激情| 我爱宗和色| 五月色综合| 色色亚洲无码| 婷婷天堂站| 开心婷婷五月激情网小说| 久久婷婷精品| 九九精品在线视频观看| 色狠狠综合| 久热99| 思思久久精品| 丁香婷婷五月激情综合| 婷婷久久综合| 五月天婷婷午夜丁香| 色狠狠综合| 日日干综合| 一本大道伊人AV久久综合| 人人摸人人射| αv中文字幕在线观| 五月激情综合深爱| 另类图片五月激情| 神马欧美精|