久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

基于微信小程序與Python的實(shí)驗(yàn)室預(yù)約排課系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

基于微信小程序與Python的實(shí)驗(yàn)室預(yù)約排課系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) 最近好幾個(gè)高校的實(shí)驗(yàn)室管理員朋友跑來問我能不能把實(shí)驗(yàn)室預(yù)約從“微信群接龍Excel排課表”里解放出來。聊了一圈我給的方案都是同一個(gè)小程序 Python后端做一套實(shí)驗(yàn)室預(yù)約排課系統(tǒng)。小程序負(fù)責(zé)學(xué)生端和管理員端的使用入口Python負(fù)責(zé)預(yù)約規(guī)則、排課沖突檢測和數(shù)據(jù)接口這套組合對于實(shí)驗(yàn)室這類場景來說輕量、夠用、還特別好落地。這篇文章把我做這個(gè)系統(tǒng)的完整思路、核心代碼和踩過的坑一次說清楚正在做類似課設(shè)或者真想給實(shí)驗(yàn)室做個(gè)小工具的朋友可以直接拿走參考。1. 項(xiàng)目整體設(shè)計(jì)與技術(shù)選型1.1 為什么前端選小程序而不是App或Web頁面實(shí)驗(yàn)室預(yù)約這個(gè)場景有個(gè)特點(diǎn)使用頻次不算高但用的時(shí)候都特別急。今天老師臨時(shí)調(diào)課學(xué)生小組明天要做實(shí)驗(yàn)沒人愿意為了預(yù)約一次額外下載一個(gè)App。小程序天然適合這種“低頻剛需”的場景掃碼進(jìn)入、用完即走不用安裝也不用擔(dān)心安卓和蘋果應(yīng)用市場的審核流程。如果你還在糾結(jié)要不要用uniapp開發(fā)我的建議是分情況。如果項(xiàng)目只面向微信生態(tài)直接寫原生微信小程序就夠了開發(fā)工具順手、調(diào)試方便、API文檔也全。如果你們學(xué)校未來可能有支付寶小程序、抖音小程序的需求才值得用uniapp做多端適配但學(xué)習(xí)成本和打包配置的復(fù)雜度會(huì)明顯上升。相比之下原生小程序的wxml、wxss、js這套東西和前端基礎(chǔ)語法幾乎同源做過網(wǎng)頁開發(fā)的人一周就能上手。另外有個(gè)現(xiàn)實(shí)問題實(shí)驗(yàn)室預(yù)約系統(tǒng)往往還要對接企業(yè)微信或?qū)W校內(nèi)部的通知體系微信原生生態(tài)在這塊最省事。還有一點(diǎn)別忽略小程序不用處理跨平臺(tái)設(shè)備的碎片化問題。安卓和鴻蒙的返回鍵邏輯、iOS的鍵盤彈出方式、各種機(jī)型的劉海屏適配原生小程序都被微信統(tǒng)一處理得差不多了。如果自己搞App光是這些細(xì)節(jié)就能消耗掉半個(gè)開發(fā)周期。所以除非有明確的多端訴求否則不要讓“想做App”的沖動(dòng)主導(dǎo)技術(shù)選型。1.2 后端為什么選Python而不是Java或Node.js后端選型上我毫不猶豫選了Python。理由很實(shí)際實(shí)驗(yàn)室預(yù)約排課系統(tǒng)的核心難度不在并發(fā)量而在排課規(guī)則和預(yù)約沖突的判斷。Python寫這類業(yè)務(wù)邏輯非常流暢幾行就能表達(dá)一個(gè)復(fù)雜的判斷條件而且字典、列表這些數(shù)據(jù)結(jié)構(gòu)處理前端傳來的JSON參數(shù)特別自然。Python做后端的優(yōu)勢在校園和中小企業(yè)場景里體現(xiàn)得尤其明顯。開發(fā)周期短一個(gè)人一周就能把核心接口寫完調(diào)試方便報(bào)錯(cuò)信息直觀生態(tài)里有Flask、FastAPI、Django這些成熟框架按需選擇就行。我自己偏愛FastAPI因?yàn)樗钱惒娇蚣苄阅鼙菷lask好還能自動(dòng)生成OpenAPI文檔小程序端的人看接口文檔都省了。如果團(tuán)隊(duì)里都是Python新手選Flask更穩(wěn)資料最多、坑最少。很多人在這個(gè)項(xiàng)目里糾結(jié)“用Python會(huì)不會(huì)性能不夠”這就是想多了。高校實(shí)驗(yàn)室的預(yù)約并發(fā)量高峰期也就幾百個(gè)人同時(shí)搶晚上幾個(gè)時(shí)段FastAPI加一個(gè)MySQL完全扛得住。真正決定系統(tǒng)好不好用的是你能不能把排課沖突規(guī)則寫對而不是語言本身快不快。當(dāng)然你要是想鍛煉自己也可以試試用Java Spring Boot但那個(gè)開發(fā)成本會(huì)明顯高對實(shí)驗(yàn)室預(yù)約這種項(xiàng)目來說有些大材小用。1.3 系統(tǒng)整體架構(gòu)和數(shù)據(jù)流整套系統(tǒng)的架構(gòu)非常簡單核心就三層小程序前端、Python后端接口、MySQL數(shù)據(jù)庫。小程序端負(fù)責(zé)頁面展示和交互比如實(shí)驗(yàn)室列表、日期選擇、時(shí)段預(yù)約、管理員審核后端用FastAPI暴露RESTful接口處理登錄鑒權(quán)、預(yù)約創(chuàng)建、沖突檢測、排課數(shù)據(jù)查詢數(shù)據(jù)庫存所有持久化數(shù)據(jù)包括用戶、實(shí)驗(yàn)室、預(yù)約記錄、排課課程。小程序通過wx.request請求后端的http接口數(shù)據(jù)格式統(tǒng)一走JSON。具體的請求流程可以這樣理解學(xué)生打開小程序先用微信code登錄后端調(diào)微信接口拿到openid并返回一個(gè)自定義token之后每次請求都帶上token后端校驗(yàn)身份學(xué)生選擇實(shí)驗(yàn)室、日期、時(shí)間段并提交預(yù)約后端先檢查這個(gè)時(shí)段是否已經(jīng)被課程占用、是否已被別人預(yù)約、是否超過實(shí)驗(yàn)室容量全部通過才寫入數(shù)據(jù)庫管理員端則負(fù)責(zé)導(dǎo)入實(shí)驗(yàn)課表、設(shè)置實(shí)驗(yàn)室開放時(shí)間、處理學(xué)生預(yù)約的審核和取消。這套流程不復(fù)雜但每個(gè)環(huán)節(jié)都有坑后面我逐個(gè)拆。2. 核心功能拆解與關(guān)鍵流程設(shè)計(jì)2.1 用戶端登錄、實(shí)驗(yàn)室列表、預(yù)約下單用戶端最核心的三個(gè)功能是登錄、查看實(shí)驗(yàn)室、提交預(yù)約。登錄這塊微信小程序一定要用wx.login拿到臨時(shí)code再把code傳給后端由后端調(diào)用微信的code2Session接口換取openid。這里有個(gè)特別容易被新手忽略的點(diǎn)小程序端絕對不要自己去請求微信接口換openid因?yàn)槟前補(bǔ)ppSecret暴露給了前端等于是把用戶數(shù)據(jù)脫褲子給人看。正確做法是后端持有appSecretcode每次用完就失效后端拿到openid后生成自己的token返回給小程序端后續(xù)請求都帶這個(gè)自定義token。實(shí)驗(yàn)室列表頁面要展示實(shí)驗(yàn)室名稱、所在位置、可容納人數(shù)、當(dāng)前開放狀態(tài)、今天的空閑時(shí)段。這里需要注意的是實(shí)驗(yàn)室列表不能一次性把所有數(shù)據(jù)都返回分頁是必須的否則數(shù)據(jù)量大了小程序渲染會(huì)卡。我習(xí)慣用limit和offset做簡單的分頁每個(gè)頁面加載20條觸底時(shí)再拉下一頁。預(yù)約下單是整個(gè)系統(tǒng)最敏感的操作。前端讓用戶選擇日期、時(shí)段、實(shí)驗(yàn)類型、參與人數(shù)然后提交給后端。千萬不要在前端做預(yù)約是否沖突的判斷就認(rèn)為萬事大吉更不要直接把數(shù)據(jù)寫進(jìn)數(shù)據(jù)庫。前端的判斷只是體驗(yàn)優(yōu)化真正的沖突檢查和寫入限制必須在后端完成因?yàn)榍岸舜a可以被抓包改參數(shù)繞過限制。小程序抓包這個(gè)事我就不細(xì)說了但做開發(fā)的一定要默認(rèn)所有前端傳參都不可信。2.2 管理員端排課導(dǎo)入、預(yù)約審核、數(shù)據(jù)統(tǒng)計(jì)很多做預(yù)約系統(tǒng)的人容易忽略管理端其實(shí)管理端的復(fù)雜度比用戶端還要高。排課是整個(gè)系統(tǒng)的靈魂學(xué)生預(yù)約是在課程剩下的空余時(shí)間上做文章的所以課程排課必須可靠。我建議的排課方式是管理員在后臺(tái)按實(shí)驗(yàn)室、按周次導(dǎo)入課程表。導(dǎo)入方式可以支持手工添加也可以支持Excel批量導(dǎo)入。Excel導(dǎo)入聽起來高級(jí)但從實(shí)際使用來看手工添加反而更穩(wěn)因?yàn)榻^大多數(shù)實(shí)驗(yàn)室一個(gè)星期就那么幾十節(jié)課手工一條條加也就十幾分鐘。批量導(dǎo)入Excel需要處理格式兼容、日期解析、重復(fù)行等問題開發(fā)成本和收益不成正比除非你們有幾十個(gè)實(shí)驗(yàn)室才建議做。預(yù)約審核這塊可以做成“提交即生效”和“需要管理員審批后生效”兩種模式。對于校園實(shí)驗(yàn)室我更推薦前一種即提交即生效但設(shè)置一個(gè)防沖突檢查和信用分機(jī)制。學(xué)生預(yù)約成功后如果爽約三次拉入黑名單限制預(yù)約兩周。這樣既保證使用效率又減少管理員的負(fù)擔(dān)。人工審批模式適合有特殊設(shè)備的實(shí)驗(yàn)室比如貴重儀器房需要老師確認(rèn)才能通過。數(shù)據(jù)統(tǒng)計(jì)也不能缺。管理員需要知道每個(gè)實(shí)驗(yàn)室的使用率、每個(gè)時(shí)段的預(yù)約熱度、每個(gè)院系的使用情況。這些數(shù)據(jù)可以指導(dǎo)下一學(xué)期的排課比如某個(gè)實(shí)驗(yàn)室周三下午總是被約滿可以考慮多排專業(yè)實(shí)驗(yàn)課某個(gè)設(shè)備孤島實(shí)驗(yàn)室長期無人用就應(yīng)該重新分配用途。簡單用SQL聚合查詢就能出報(bào)表沒必要上大數(shù)據(jù)組件。2.3 預(yù)約排課的核心沖突檢測規(guī)則沖突檢測是這個(gè)系統(tǒng)最核心、也最容易寫錯(cuò)的地方。規(guī)則其實(shí)不難我把它拆成下面幾條第一時(shí)間不能重疊。學(xué)生預(yù)約的時(shí)段不能被課程表里的課程占用也不能被其他已成功的預(yù)約占用。判斷區(qū)間重疊有一個(gè)經(jīng)典公式現(xiàn)有預(yù)約開始時(shí)間小于新預(yù)約結(jié)束時(shí)間且現(xiàn)有預(yù)約結(jié)束時(shí)間大于新預(yù)約開始時(shí)間兩者同時(shí)成立即沖突。用代碼寫就是 prev_start new_end and prev_end new_start。第二實(shí)驗(yàn)室容量限制。預(yù)約人數(shù)不能超過實(shí)驗(yàn)室最大容納人數(shù)這個(gè)在請求參數(shù)里做校驗(yàn)前端也可以做一個(gè)提示但后端必須再查一次數(shù)據(jù)庫里的容量字段。第三同一用戶同一時(shí)間段不能重復(fù)預(yù)約。學(xué)生可以一次約多個(gè)時(shí)段但不能同一個(gè)時(shí)段約兩個(gè)不同實(shí)驗(yàn)室否則會(huì)造成名額浪費(fèi)。后端要用用戶ID加時(shí)間的唯一性查詢。第四課程優(yōu)先于自由預(yù)約。如果某實(shí)驗(yàn)室在周一上午第1-2節(jié)有固定實(shí)驗(yàn)課那這個(gè)時(shí)間段學(xué)生自由預(yù)約必須被拒絕除非管理員設(shè)置可預(yù)約數(shù)量增量。課程排課數(shù)據(jù)可以單獨(dú)存一張表在預(yù)約檢查時(shí)先查課程表再查預(yù)約表。我踩過的最大坑是以為只要在Python代碼里做判斷就足夠了但并發(fā)情況下兩個(gè)請求同時(shí)通過檢查然后同時(shí)寫入數(shù)據(jù)庫就會(huì)產(chǎn)生超賣。所以除了業(yè)務(wù)代碼判斷數(shù)據(jù)庫層面必須加唯一索引或利用事務(wù)后面我在代碼部分詳細(xì)講。3. 數(shù)據(jù)庫設(shè)計(jì)與核心代碼實(shí)現(xiàn)3.1 數(shù)據(jù)表結(jié)構(gòu)設(shè)計(jì)數(shù)據(jù)庫我選MySQL原因很簡單校園環(huán)境里讓老師裝個(gè)Redis或者M(jìn)ongoDB不現(xiàn)實(shí)MySQL基本是標(biāo)配而且這類系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)非常規(guī)整用關(guān)系型數(shù)據(jù)庫最合適。如果只是開發(fā)學(xué)習(xí)或者本機(jī)演示SQLite也能跑起來只要把數(shù)據(jù)庫連接串改一下就行。第一張表是用戶表保存所有小程序用戶和管理員。字段包括id、openid、昵稱、頭像、角色student/admin、學(xué)號(hào)/工號(hào)、手機(jī)號(hào)、信用分、創(chuàng)建時(shí)間。openid必須加唯一索引這是用戶身份的唯一標(biāo)識(shí)。第二張表是實(shí)驗(yàn)室表。字段包括id、名稱、地址、容量、負(fù)責(zé)人、設(shè)備說明、是否開放預(yù)約、開放開始時(shí)間、開放結(jié)束時(shí)間、備注。重點(diǎn)在于“是否開放預(yù)約”這個(gè)狀態(tài)位管理員可以臨時(shí)關(guān)閉某個(gè)實(shí)驗(yàn)室進(jìn)行設(shè)備維護(hù)。第三張表是課程排課表。字段包括id、實(shí)驗(yàn)室id、課程名稱、教師、星期幾、開始節(jié)次、結(jié)束節(jié)次、開始周次、結(jié)束周次、單雙周標(biāo)記、備注。這里我用“星期幾開始節(jié)次結(jié)束節(jié)次”表述時(shí)段比直接存日期時(shí)間更符合高校作息排課表本來就是按周重復(fù)的。如果是企業(yè)培訓(xùn)場景也可以改成具體的開始時(shí)間、結(jié)束時(shí)間。第四張表是預(yù)約記錄表。這是最核心的表字段包括id、用戶id、實(shí)驗(yàn)室id、預(yù)約日期、開始節(jié)次、結(jié)束節(jié)次、參與人數(shù)、狀態(tài)pending/approved/cancelled/completed/no_show、創(chuàng)建時(shí)間、更新時(shí)間。狀態(tài)字段要有默認(rèn)值如果是免審核模式就直接置為approved。預(yù)約記錄表建議加兩個(gè)索引一個(gè)是實(shí)驗(yàn)室id、預(yù)約日期、開始節(jié)次、結(jié)束節(jié)次用來快速查沖突另一個(gè)是用戶id、預(yù)約日期用來查用戶的預(yù)約歷史和防止重復(fù)預(yù)約。并發(fā)情況下光靠索引還不夠下面代碼段解決。3.2 后端接口實(shí)現(xiàn)以FastAPI為例環(huán)境準(zhǔn)備這里不多廢話Python 3.9以上版本安裝fastapi、uvicorn、sqlalchemy、pymysql就夠了。Linux服務(wù)器上如果自帶Python版本太低建議用源碼編譯安裝新版或者直接裝miniconda管理虛擬環(huán)境省去一堆依賴問題。登錄接口先從簡單的開始。小程序傳入code后端拿到code調(diào)微信接口換openid再生成自己的token。from fastapi import FastAPI, Depends, HTTPException import httpx, secrets from datetime import datetime from sqlalchemy.orm import Session app FastAPI() # 假設(shè)已配置微信小程序 appid, secret WX_APPID your_appid WX_SECRET your_secret app.post(/api/login) async def login(data: dict): code data.get(code) async with httpx.AsyncClient() as client: resp await client.get( https://api.weixin.qq.com/sns/jscode2session, params{ appid: WX_APPID, secret: WX_SECRET, js_code: code, grant_type: authorization_code } ) wx_data resp.json() openid wx_data.get(openid) if not openid: raise HTTPException(status_code401, detail微信登錄失敗) # 查詢或創(chuàng)建用戶然后生成 token token secrets.token_hex(16) # 將 openid token 保存到數(shù)據(jù)庫返回 token return {token: token, role: student}真實(shí)的項(xiàng)目里token要把user_id、角色、過期時(shí)間一起管理最好存到一張login_token表里每次請求通過token查到用戶。token不要直接存openid的明文關(guān)系在小程序端不然有個(gè)人信息泄露的風(fēng)險(xiǎn)。預(yù)約接口是重點(diǎn)我們必須保證創(chuàng)建預(yù)約時(shí)檢查沖突是原子操作。簡單的方法是用數(shù)據(jù)庫行鎖但更穩(wěn)妥的做法是對預(yù)約記錄表加一個(gè)唯一約束讓數(shù)據(jù)庫幫我們擋掉并發(fā)重復(fù)插入。實(shí)際項(xiàng)目中我會(huì)在業(yè)務(wù)檢查后再執(zhí)行一次插入插入時(shí)如果撞了唯一索引捕獲IntegrityError并返回“該時(shí)段已被預(yù)約”。下面是一個(gè)簡化示例from sqlalchemy import and_, func from sqlalchemy.exc import IntegrityError app.post(/api/reserve) async def reserve(data: dict, db: Session Depends(get_db)): # 參數(shù): user_id, lab_id, reserve_date, start_period, end_period, people_count lab db.query(Lab).filter(Lab.id data[lab_id]).first() if not lab: raise HTTPException(status_code404, detail實(shí)驗(yàn)室不存在) if not lab.is_open: raise HTTPException(status_code400, detail實(shí)驗(yàn)室未開放預(yù)約) # 檢查課程排課沖突 conflict_course db.query(CourseSchedule).filter( CourseSchedule.lab_id data[lab_id], CourseSchedule.week_day data[week_day], CourseSchedule.start_period data[end_period], CourseSchedule.end_period data[start_period] ).first() if conflict_course: raise HTTPException(status_code400, detail該時(shí)段已被實(shí)驗(yàn)課占用) # 檢查普通預(yù)約沖突 conflict_reserve db.query(ReserveRecord).filter( ReserveRecord.lab_id data[lab_id], ReserveRecord.reserve_date data[reserve_date], ReserveRecord.start_period data[end_period], ReserveRecord.end_period data[start_period], ReserveRecord.status.in_([approved, pending]) ).first() if conflict_reserve: raise HTTPException(status_code400, detail該時(shí)段已被預(yù)約) record ReserveRecord( user_iddata[user_id], lab_iddata[lab_id], reserve_datedata[reserve_date], start_perioddata[start_period], end_perioddata[end_period], people_countdata[people_count], statusapproved ) db.add(record) try: db.commit() except IntegrityError: db.rollback() raise HTTPException(status_code400, detail手慢了該時(shí)段剛被別人預(yù)約) return {id: record.id, status: record.status}代碼里用了一個(gè)技巧判斷課程沖突時(shí)沒寫死“星期幾等于”而是把week_day也作為篩選條件。這里注意數(shù)據(jù)庫查詢中的區(qū)間重疊判斷要和業(yè)務(wù)需求對應(yīng)跨天、跨節(jié)次的場景要特別測試。如果是晚上20:00到21:00這種按絕對時(shí)間存的判斷方式一樣但要把日期和時(shí)間拼成一個(gè)datetime再比較。3.3 前端小程序關(guān)鍵頁面實(shí)現(xiàn)小程序端代碼分三塊頁面、請求封裝、狀態(tài)管理。頁面用來展示和交互請求封裝統(tǒng)一處理token和錯(cuò)誤提示狀態(tài)管理保存用戶信息。請求封裝非常重要。我見過很多新手在每個(gè)頁面里直接寫wx.request結(jié)果token過期了到處都要改錯(cuò)誤提示五花八門。建議把請求封裝成一個(gè)request.js文件類似下面這樣const BASE_URL https://api.example.com; function request(path, method GET, data {}) { return new Promise((resolve, reject) { wx.request({ url: BASE_URL path, method: method, data: data, header: { Content-Type: application/json, Authorization: wx.getStorageSync(token) || }, success: (res) { if (res.statusCode 200) { resolve(res.data); } else if (res.statusCode 401) { wx.navigateTo({ url: /pages/login/login }); } else { wx.showToast({ title: res.data.detail || 請求失敗, icon: none }); reject(res); } }, fail: (err) { wx.showToast({ title: 網(wǎng)絡(luò)異常, icon: none }); reject(err); } }); }); } module.exports { request };預(yù)約頁面的wxml結(jié)構(gòu)很常規(guī)核心就是日期選擇器、時(shí)段選擇、實(shí)驗(yàn)室容量提示、提交按鈕。需要注意的細(xì)節(jié)有兩個(gè)第一日期選擇器的范圍要設(shè)置min屬性為今天不能讓學(xué)生約過去的日期第二時(shí)段選擇建議用按鈕組而不是picker因?yàn)橐坏┻x擇多個(gè)連續(xù)時(shí)段picker并不方便。用戶選完時(shí)段后前端先算一下本次預(yù)約總共多少節(jié)再連同實(shí)驗(yàn)室容量一起展示減少后端失敗的挫敗感。頁面JS里調(diào)接口也要注意防重復(fù)點(diǎn)擊。把提交按鈕加一個(gè)loading狀態(tài)第一次點(diǎn)擊后禁用按鈕直到請求完成否則用戶連點(diǎn)三下會(huì)產(chǎn)生三個(gè)重復(fù)請求雖然后端有沖突檢查但會(huì)給用戶“約了好幾次”的錯(cuò)覺體驗(yàn)極差。4. 常見問題與排查技巧實(shí)錄4.1 并發(fā)情況下預(yù)約超賣怎么處理這是實(shí)驗(yàn)室預(yù)約系統(tǒng)最容易出的線上事故。兩個(gè)學(xué)生同時(shí)提交同一個(gè)實(shí)驗(yàn)室同一個(gè)時(shí)段的預(yù)約后端都先查詢了一遍沒有沖突然后同時(shí)執(zhí)行插入數(shù)據(jù)庫結(jié)果兩個(gè)請求都成功了實(shí)驗(yàn)室被超賣。我在開發(fā)階段就遇到過一次當(dāng)時(shí)還以為是前端按鈕沒做防重復(fù)后來一查是并發(fā)問題。解決這個(gè)問題的核心思路是查詢和寫入之間必須有隔離性不能靠業(yè)務(wù)代碼的先后順序。最實(shí)踐的做法就是在預(yù)約記錄表上建立針對實(shí)驗(yàn)室、日期、開始節(jié)次、結(jié)束節(jié)次的聯(lián)合約束但因?yàn)闀r(shí)間區(qū)間不是枚舉唯一索引比較難設(shè)計(jì)。退而求其次可以用數(shù)據(jù)庫的行級(jí)鎖。在SQLAlchemy里通過with_for_update()鎖定實(shí)驗(yàn)室記錄行保證同一時(shí)間只有一個(gè)事務(wù)能檢查并插入預(yù)約記錄。如果項(xiàng)目并發(fā)量確實(shí)大比如全校幾千人同時(shí)搶晚上7點(diǎn)到9點(diǎn)的實(shí)驗(yàn)室那就得上消息隊(duì)列或者Redis分布式鎖。但坦白說這種校內(nèi)預(yù)約系統(tǒng)做到這個(gè)程度有點(diǎn)過度設(shè)計(jì)了。我建議先把數(shù)據(jù)庫事務(wù)和行鎖做好已經(jīng)能覆蓋絕大多數(shù)場景。并發(fā)問題的排查也簡單高并發(fā)壓測時(shí)觀察日志里有沒有同時(shí)插入成功的情況。4.2 微信登錄時(shí)session_key和token搞混微信小程序登錄流程中主流的說法是通過wx.login拿到code后端用code換openid和session_key。很多新手會(huì)把session_key存在自己的服務(wù)器然后拿來當(dāng)身份憑證這是不對的。session_key是微信會(huì)話密鑰用來解密用戶數(shù)據(jù)不應(yīng)該服務(wù)于業(yè)務(wù)系統(tǒng)的會(huì)話管理。正確做法是后端用code換到openid之后生成一個(gè)自己的token比如用secrets.token_hex(16)生成隨機(jī)字符串關(guān)聯(lián)user_id設(shè)置7天過期時(shí)間存數(shù)據(jù)庫。小程序端以后請求都帶這個(gè)token后端通過查詢token表驗(yàn)明正身。不要把openid在接口返回里暴露給小程序端雖然openid本身不能直接干壞事但它屬于用戶敏感信息接口盡量只返回用戶id和昵稱等業(yè)務(wù)必要字段。在實(shí)際開發(fā)中微信官方對js_code2session接口的調(diào)用頻率有限制如果登錄頻繁可能會(huì)有臨時(shí)接口報(bào)錯(cuò)。這種情況可以做一個(gè)簡單的本機(jī)token緩存小程序啟動(dòng)時(shí)如果本地已有未過期的token就直接使用不再重復(fù)wx.login只有后端返回401才重新走登錄流程。4.3 時(shí)間重疊判斷的邊界問題時(shí)間重疊判斷這個(gè)代碼寫出來只有一行但邊界問題特別多。第一次寫這個(gè)系統(tǒng)的時(shí)候我用的是“開始時(shí)間小于新結(jié)束時(shí)間且結(jié)束時(shí)間大于新開始時(shí)間”然后測試時(shí)發(fā)現(xiàn)課程表里的“9月30日”和預(yù)約表的“2025-09-30”格式不一致直接查不中。后來約定所有日期都存成date類型節(jié)次都用整數(shù)才算是徹底解決。另一個(gè)邊界問題是跨天實(shí)驗(yàn)。比如晚上實(shí)驗(yàn)室通宵開放學(xué)生預(yù)約了22:00到第二天06:00如果按“日期”作為查詢條件這條預(yù)約在第二天的記錄里就查不到導(dǎo)致第二天白天的時(shí)段被重復(fù)預(yù)約。解決辦法是預(yù)約表里存“開始時(shí)間”和“結(jié)束時(shí)間”完整datetime查詢時(shí)用兩個(gè)時(shí)間字段做區(qū)間重疊判斷而不是用日期加節(jié)次的拼接方式。如果堅(jiān)持用節(jié)次模型那就要允許結(jié)束節(jié)次大于當(dāng)天總節(jié)次并且日期順延一天這會(huì)引入很多麻煩。還有單雙周排課的問題。很多高校實(shí)驗(yàn)課是單周或雙周輪換如果課程排課表不保存“單雙周標(biāo)記”會(huì)導(dǎo)致隔周一次的實(shí)驗(yàn)課在另一周被錯(cuò)誤占用。我的建議是排課表里加一個(gè)week_type字段取值為all/odd/even檢查時(shí)間沖突時(shí)把當(dāng)前預(yù)約日期對應(yīng)的教學(xué)周和week_type比對一下只有匹配才視為沖突。4.4 小程序真機(jī)預(yù)覽和HTTPS域名配置這個(gè)問題幾乎每隔幾天就會(huì)有人來問我。小程序開發(fā)工具里接口調(diào)試得好好的一上真機(jī)就白屏、請求全部失敗原因基本都是域名沒配好。小程序正式環(huán)境要求所有請求必須是HTTPS而且域名要從小程序后臺(tái)的“request合法域名”里提前配置。如果你只是本地開發(fā)可以在開發(fā)工具里勾選“不校驗(yàn)合法域名”但真機(jī)上如果還跑localhost那是連不上的因?yàn)槭謾C(jī)訪問不到你電腦上的服務(wù)需要后端部署到局域網(wǎng)可訪問的IP或者云服務(wù)器。我個(gè)人的經(jīng)驗(yàn)是開發(fā)階段直接用內(nèi)網(wǎng)穿透工具或者部署到一臺(tái)云服務(wù)器上測試不要等到上線再配域名。后端接口路徑和前端BASE_URL要一致避免出現(xiàn)開發(fā)環(huán)境是http、線上環(huán)境是https導(dǎo)致請求被攔截的情況。部署后端時(shí)用Nginx把Python服務(wù)反代到443端口配好SSL證書小程序那邊才能順暢請求。再提醒一個(gè)容易忽略的點(diǎn)小程序的request并發(fā)限制是10個(gè)。如果頁面初始化時(shí)同時(shí)發(fā)送實(shí)驗(yàn)室列表、課程表、用戶信息好幾個(gè)請求數(shù)量不多沒問題但如果后續(xù)功能膨脹了注意合并接口或者做請求隊(duì)列不然偶爾會(huì)出現(xiàn)高并發(fā)時(shí)的請求失敗。4.5 Python環(huán)境與依賴安裝的坑Python環(huán)境的坑大多是版本不一致造成的。有的服務(wù)器自帶的Python是3.6但FastAPI要求3.7以上SQLAlchemy新版也可能不兼容Python 3.6所以裝好依賴后第一步就是檢查版本。建議用虛擬環(huán)境管理項(xiàng)目依賴簡單說就是在項(xiàng)目根目錄執(zhí)行python3 -m venv venv然后source venv/bin/activate激活再pip install。這樣不會(huì)污染系統(tǒng)Python換服務(wù)器時(shí)也能靠requirements.txt一鍵恢復(fù)環(huán)境。很多新手遇到的問題是這樣本地運(yùn)行好好的上傳服務(wù)器后報(bào)ModuleNotFoundError。原因基本是忘記執(zhí)行pip install -r requirements.txt或者requirements.txt沒有把依賴寫全。生成requirements.txt最穩(wěn)妥的方法是pip freeze但要注意它會(huì)把無關(guān)的全局依賴也帶進(jìn)去所以更推薦手動(dòng)維護(hù)一個(gè)干凈的依賴清單只寫fastapi、uvicorn、sqlalchemy、pymysql、httpx這幾個(gè)核心包帶上版本號(hào)。Linux系統(tǒng)上安裝Python如果使用源碼編譯千萬別忘了先安裝libssl-dev和libffi-dev否則Python編譯出來缺少ssl模塊后面調(diào)用微信HTTPS接口會(huì)直接報(bào)錯(cuò)。另外pip下載慢的問題可以臨時(shí)指定清華鏡像源pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名。這些都是老生常談但每屆學(xué)生都會(huì)踩一遍。5. 一些額外的實(shí)踐經(jīng)驗(yàn)做這個(gè)系統(tǒng)最值錢的不是代碼本身而是把一個(gè)真實(shí)業(yè)務(wù)抽象成一套可以被驗(yàn)證的邏輯。我開發(fā)的時(shí)候把大部分時(shí)間花在編寫沖突規(guī)則和測試邊界條件上反而頁面布局這些只花了兩天。如果你也在做類似項(xiàng)目我強(qiáng)烈建議先畫出完整的業(yè)務(wù)流程圖把每種角色、每個(gè)狀態(tài)、每個(gè)異常分支都標(biāo)出來再開始寫代碼。給即將上線的小項(xiàng)目三個(gè)具體建議第一先從一間實(shí)驗(yàn)室試運(yùn)行管理員手工檢查一天確認(rèn)預(yù)約準(zhǔn)確率再放開所有實(shí)驗(yàn)室第二預(yù)約成功之后一定要有消息通知最簡單的是在小程序里做個(gè)“我的預(yù)約”列表學(xué)生自己來看結(jié)果復(fù)雜點(diǎn)的可以用訂閱消息推送第三建立爽約懲罰機(jī)制否則過兩個(gè)月就會(huì)有人惡意占坑。信用分字段我已經(jīng)放在用戶表里了后續(xù)就是每次爽約扣分、定時(shí)解禁的簡單邏輯。如果后續(xù)想擴(kuò)展可以考慮把實(shí)驗(yàn)報(bào)告提交、設(shè)備借用、耗材領(lǐng)用都掛在預(yù)約單下一個(gè)實(shí)驗(yàn)室管理系統(tǒng)就慢慢成形了。但別急著一次做完先讓預(yù)約排課跑穩(wěn)定這個(gè)核心穩(wěn)定其他功能都是加分項(xiàng)。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚洲欧美精品一区天堂久久 | 麻豆60秒| 老子午夜伦不卡影院| 欧亚成人在线视频| 顶级少妇BT天堂| 三级三级三级a级全黄三| 婷婷8月天青娱乐| 综合日本女人伊人| 在线国产一区二区av| 四虎免费在线播放| 日韩资源网| 91丨九色丨国产打屁股| 秋霞成人一级在线观看| 女性91网站| 国产午夜视频| 久久久久久久久久久六六| 亚洲天堂五月天国产| 激情文学小说一区二区| 精品无码一区二区| 天天爽天天操| 婷婷五月天色| 国产伦乱91| 97亚洲欧美| 操死我了啊啊啊| 欧中日成人免费影视| 久久久久久久国产视频| 黑人精品一区二区在线播放| 乱抡国产91| 国产路线专区| 高清肉丝中文无码| 亚洲另类色图片| 国产精品永久免费10000| 欧美激情 亚洲色图| 人人噜夜夜操| 蜜桃狠狠色伊人亚洲综合 | 超碰天天久久79| 日韩三级久久久| 国产成人精品亚洲日本| 国产精品99久久久www| 欧美精品日韩久久久九| a片久久久久久久久久久久 | 亚洲黄色AV电影| 亚洲日韩黑丝| 超碰97极品9| 亚洲综合夜色| 97天天插| 九九九九AV| 欧美日韩国产色五月综合在线| 伊人精品视频| 欧美日韩少妇色情| 蜜臀AV一区二区三区激情综合| 黑丝内射一区二区三区| 欧美黑人猛交春色影视大全| 久久久999日本大片| 99爱爱| 精品国产久热在线观看| 欧美少妇第一页| 国产蜜臀精品一区免费尤物| 韩日男人的天堂| 91殴美大片| 黄色成品网站| Aa东京男人的天堂| 亚洲情色 自拍| 白嫩91在线亚洲| 久久中文字幕女同性恋一区| 岛国片在线视频网站| 欧美人人曰人人操人人射射| 国产无吗在线播放| 国产欧美日韩精品中文| www.色五月| 亚洲人妻一区二区三区| 久久久久久九九九九-美女久久久久久久-成人AV| 九九精品美女高溯喷水| 亚洲大胆人体av| 美女网站91| 日韩欧无码一区二区三区免费不卡| 一级毛片电影免费看| 亚洲欧美自拍偷拍| 婷婷久草一区二区三区| 久久高清无码夜夜操| 久久久熟妇熟女国产| 久湿久久| 久久中日麻豆| 一本色道久久综合精品婷婷| 少妇久久久| 久久精品国产99精品亚洲蜜...| 国产日韩欧美亚洲精品95| 久久鲁干| 日本男人插女人的逼黄色| 天天综合麻豆视频| 韩国免费播放一级毛片| 国产麻豆福利av在线播放| 狠狠97| 天天做天天爱| 国产亚洲综合欧美一区| 少妇69中文| 97免费视频在线| 少妇一级婬片免费放一级a性色.| 久久九色| 美女让帅哥通她小鸡鸡| 热思思免费视频| 日本孕妇一区二区视频操逼免费看 | 五月婷婷六月激情| 99r九九| 久久一二三四五六七八九区区| 亚洲97P| 四季av一区二区凹凸精品小说| 欧美性色欧美| 欧美日韩国产三级黄色| 国模限制级电影| 曰本91情色| 精品无码久久久久久久久果冻糖心| 色婷婷激一区二区三区| 香蕉久久精品| а√天堂资源官网在线资源| 蜜臀亚洲中文| 欧美人黑A片无码免视费| 中文字幕一区二区韩| 玖玖人人爱| 久久人妻一区二区三区高清 | 九九九综合精品| 大茄子熟女AV导航| 日韩啪啪啪啪啪| 色亚洲欧美| 无码精品人妻一区二区三区妖精| 综合av社区| 超碰av人人人| 最新AV在线| 小情侣高清国产在线视频| 视频在线观看一二三区| 黄色激情电影在线观看| 国产精品色哟哟| 国产自制av蜜乳| 久久久久久亚洲精品不卡人乳| 大香交| 巨爆乳肉感一区二区三区竹菊影视| 国产久久一区二区| 午夜精品视频777| 后入式999| 亚洲综合色网| 中文久久| 91超碰碰在线| 亚洲av强奸乱伦| 91黄射| 午夜男女爽爽爽在线视频| 亚洲熟女偷拍在线观看| 亚洲欧洲日韩国产自在线| 五十路人妻在线| 精品一啪| 超碰在线91| 99色综合| 岛国在线免费视频| 大色网久久| 男人的天堂99| 有码免费观看| 国产乱码精品一区二区三区四川| 国产自产91区13区| 亚洲成a人在线观看久| 蜜桃视频一区二区三区在线观看| 日本三级A片网站com| 试看60秒| 看日韩美女二区三区免费操逼视频| 97亚洲在线| 欧美成人精品一区二区三区| 欧美成人黄网色网站| 国产精品禁久久久精品| 久久爽爽精品| 亚洲中文字幕av| 天天激清| 91M一社| 九月丁香婷婷| 国产精品久久伊人| 无码操逼视频一下| 色69大色97香蕉| 午夜呻吟欧美| 高清无码国产亚洲| 在线观看不卡一区二区三区| 亚洲第一页综合在线| 欧苏综合色综合| 天天操天天射天天日| 中文字幕第二页| 日韩av熟女一区二区三区成人| 国产一区二区a毛片| 黑人综合色| 91欧美色| 美欧老女人97| 亚洲图片欧美日韩| 欧美性爱十八禁| 欧美双插| 我爱搞逼综合网| 中文字幕亚洲在线一区| 一级黄色性爱A级片| 亚洲欧美综合| 日韩精品三级片长长久久| 国产精品老熟女一区二区| 国产精品干干干| V A在线| 四季av一区二区凹凸精品小说| 久久9精品视频| 99色综合| 玖玖色综合| 日韩欧美国产一区二区三区四区| 午夜噜噜噜| 超碰1997| 秋霞午夜视频一区二区| 色偷综合| 一级黄碟| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 日韩操逼性鲍| 日韩欧美日韩| 亚洲国产精品无码AV久久| 日韩91网| 精品夜夜澡人妻无码AV| 中文字幕一区二区无码成人 | 欧美日韩性爱无码| 久久免费精品视频免一| 国产乱色国产精品免费视| 精品999999| 久久久96| 国产成人亚洲精品无| 国产福利合集| 日本精品一级二级三级| 中文字幕久久婷婷丁香五月天| 2017天天插| 欧美性91| 天天日天天干天天操| www.男人的天堂| 亚洲一区二区av| 人妻熟妇一区二区三区| 黑人免费福利视频| 国产亚洲精品久久久久小| 在线播放成人高清免费视频| 亚洲天堂人妻熟妇视频| 色情五月丁香| 男人的天堂2019AV| 四季AV综合网址| 亚洲一区二区 麻豆传媒| 99re只有精品| 色眯眯av| 亚洲清纯综合| 日韩成人无码| 岛国1区2区3区在线观看| 国产精品免费1区2区视频| 操婢日韩| 免费一级欧美片片线观看| 好一吊区二区| 亚州男人天堂| 波多野42部无码喷潮在线观看| 久久九九视频九九视频| 午夜大香蕉| 久久久久免费少妇| 久久e6只有精品| 亚洲最大黄网| 久久久久国产精品人妻aⅴ天堂| 新精精品久久精品| 欧美顶级黄色大片免费| www.色综合| 国产女人9999| 亚洲少妇激情视频| 久久精品日韩| 一区二区不卡免费| 中文字幕欧美丝袜07资源| 久久久999| 99re热有精品视频国产| AV中文在线| 97爱欧美| 九九热re99re6在线精品| 精品人妻免费观看| 欧美日韩成人在线| 91国产在线精品| 97超碰站| 天天插天天射| 天天影视射综合网| 懂色av中文字幕一区二区三区天美| 五月丁香色综合| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 在线免费观看日韩一区| 中文字幕在线观看视频www| 五月天春色激情网| 啊v在线观看视频| 老熟妇一区二区三区…| 大香蕉综合| 这里只有97精品| 午夜120视频在线观看| 熟女啪啪视频| 久久久久九九九| 国语国产操逼伊人AV网| 免费成人在线熟妇网| 天天插网| 亚洲 欧美 另类 综合 偷拍| 欧美日韩亚洲少妇寂寞影院正在播放 | 日本精品第一视频在'| 色噜噜国产在线| 91热热色| 亚洲色图殴美色图激情乱伦| 91丝袜激情在线| a片自拍直播视频| 五月天色图影视| 欧美人妖内射| 色色综合网站| 日韩无码一区二区三区| 牛黄色久午久| 天天日天天干天天摸天天操| 91久操| 久草色在线观看| 久热香蕉精品在线视频| 色婷婷A V一二三四区麻豆综合| 另类TS人妖一区二区三区| 暖暖精品二区三区观看| 国产强奸无码乱伦| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 免费视频观看60秒| 日本3级一区二区免费| 亚洲在钱| 去干网最新版| 欧美性夜| 久久视网78| 天天日天天搞天天干| 一本大道综合伊人精品热热| 成人av影院在线观看| 国产精品 午夜福利| 777超碰| 欧美极品女人的天堂| 91天天综合日韩欧美| ′ !γ}丶。。久久精品欧美一区二区三区| 日本加勒比无码专区| 99激情| 欧美色图亚洲激情| 久久精品国产99国产精品亚洲| 国产精品麻豆成人av| 97超碰在线资源网站| 污污汅18禁网站在线永久免费观看| 99国产精品免费| 国产乱码精品一区二区三区四川| 国产精品另类一区大香蕉| 国产亚洲在线| 东京热男人的天堂精品| 日本大香蕉综合网| 久久久久久波多野吉衣高潮| 911粉嫩人妻| 中文字幕三四五区| 亚洲色图第一页| 欧美日韩第一页| 97视频免费播放| 国产污视频麻豆传媒一区二区 | 亚洲福利中文字幕在线| 91欧美大片| 欧洲自拍色图gif在线| 超碰av在线| 国内偷拍精品一区二区| 亚洲国产精品久久久久婷婷老年| 精品妇女一区二区三区| 亚洲欧美国产成人综合不卡| 97欧美精品| 熟妇高潮精品一区二区三区下载| 午夜精品久久久久久久男人的天堂 | 91天天综合日韩欧美| 91红杏| 国产成人精品亚洲日本| 人人看人人插| 密乳视频在线| 超碰色老头| 91 丝袜在线观看| 亚洲熟女乱色| 老女人日韩美91| 无码少妇精品一区二区60岁老人| 日本韩国国产精品一区| 搡老女人老熟女91老熟女综合网| 久草线上视频免费看| 午夜性| 91色情黑丝搞鸡在线观看一区二区三区三州 | 搡老女人老熟女91老熟女综合网| 9999九九九久久久| 91熟女综合| 日韩人妻少妇中文字幕| 玖玖在线视频| 717影院理论午夜伦八戒| 国产精品分类在线观看| av影片在线观看不卡| 夜夜嗨TV| nuu12国产麻豆精品| 麻豆国产成人精品| 韩国一区二区精品亚洲| 97色干| 国产家庭乱伦性爱视频| 啪啪啪综合| 欧美性爱一区二区三区四区| 欧美色图亚洲色图成人在在线| 久久九九99| 亚洲色图殴美色图激情乱伦| 亚洲精品无码久久AV| 免费国产电影一区二区| 97在线免费观看视频| 国色综合天| 亚洲国产日韩精品久久久| 死我十八禁| 天天热精品| 亚洲宗合网| 97AV在线免费观看| 国模久久在线| 九七毛片九九毛片| 色综九九九一区| 欧美成人精品一区二区男人蜜臀| 五月天伊人| 国产91精品久久久久久久网曝门| av大香蕉网站| 久久久不能久久久久| 韩国女主播青草福利视频| 视频二区美腿丝袜制服人妻欧美| 亚洲综合色男人网| 成人综合色网| 青青草啪啪网| 区自美91| 密臀视频三区免费网站| 91综合色噜噜| 一区操逼| 无码高清专| 亚洲av无码成人精品国产| 十八禁啪啦拍视频无遮挡| 丁香五月性| 成人情色一区二区| 青青草国产亚洲精品久久| 骚逼一区二区| 天天干,天天日| 操人妻丝袜高跟| 亚洲精品欧洲精品| 久久人妻一区二区三区高清| 友优传媒精品在线一区二区| 999国产精品999久久久久久| 国产精品乱码久久久久久久久| 天天综合-91入口| 综合伊人网12色| 三级网色| 日韩在线76| 免费看污网址| 国内一级精品| 一类无码操逼视频| 免费夜夜爱黄色视频毛片| 亚洲视频,小说| 亚洲好色人妻| 狼狼色丁香久久婷婷综合五月| 五月丁香综合| 久久少妇人妻| 亚洲图片激情小说| 国产色呦呦| 成人熟女视频一区二区三区| 日韩无码第3页| 中文字幕一区二区免费在线| 九九热精品在线| 北条麻妃性愛视频| 中文字幕99999| 人人射人人操人人摸| 德国一二三不卡| 亚洲天堂久久| 免费伦费视频在线观看| 久久精9| 亚洲天天精品| 日韩无码黄色片| 国产suv精品一区二区四区999| 公司1区2区3区精产精| 18禁看网站一区| 97人人射| 欧美 日韩第一性色| 天天操人人操狠狠插| 欧美天天拍| 天天欧美97| 国产高清视频无码在线| 久久男人的天堂国产| 蜜桃AV天堂| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 久久婷婷色综合一区二区三区| 色色青青久久| 强奸乱伦AV网站| 影音综合网| 亚洲欧美情色| 欧美亚洲综合色| 亚洲毛片久久| 99热综合| 日韩99999| 看一级黄色视频| 国产午夜福利合集| 九九色图| 熟女熟妇一区二区三四区| 丰满人妻av一区二区三区| 吊色| 色色五月婷| 亚洲色丰满少妇高潮| av无线看| 精品无码产区一区二| 国人欧美精品一区二区| 久肏视频字幕| 色噜噜婷婷| 在线观看十八禁| V A在线| 九九热超碰| 俞拍久久国应视频| 亚州黄站| 天天摸,夜夜摸| 亚洲加勒比久久日本道| 欧美亚洲国产自久久| A一区片| 丝袜无码a片| 欧美日本中字另类在线| 欧美在线干| 天天天天干| 亲子敌伦对白在线播放| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 精品一区二区三区最新| 久久久久久久九九九九九九| 久草精品一区| 天天爽夜夜操| 先锋影音av先锋一区| 天天天天天天天天综合| 操逼片中文| 欧美黑人与女人91| 亭亭丁香激情| 福利色色| 伊人影院日本| 锕锕好爽 死我在线观看| 99精品免费| 老熟女乱伦片| 日本久久久久久久久久| 久久9精品视频| 国产精品一级片在线看| 久久69| 午夜综合在线| 97WW精品| 亚洲精品美女久久久久久久久| 亚洲人妻久久| 很狠操| www.色婷婷| 天天操人人操狠狠插| 97伦综合| 亚洲日韩XXX| 97人人模人人爽人人| 国产强奸AV在线| 夜夜骑日日| 超碰1024久久| 天综合中文| 91人妻尻屄视频| 97精品一区二区视频| 超碰综合97在线| 91粉嫩萝控精品福利网站_精品影音先锋国 | 久久成年精品| 99热这里只有精品9| 久久无码成人| 操一操摸一摸| 高清无码人妻久久久一区二区三区aⅴ| 美国久久一二三四| 十八禁网站在线| 五月丁香久久| 久精品无码av一区二免费国产在线观看 | 国产精品一区二区三| 欧亚揄拍偷拍精品视频| 校园春色亚洲欧洲| 在线观看AV不卡| 亚洲成人在线播放| 日韩成人大片一区二区| 欧美人与性动交a美精品| 很很操在线| 日韩欧美麻豆 | 97热视频在线观看| 国产青青美女玩逼视频| 日韩三级在线观看mp4| 色五月大香蕉| 9丨亚洲一区二区在线| 啪啪自拍九九综合| 色臀AV| 日本熟妇人妻一区二区三区| 国产怡红院在线| 日日日日做夜夜夜夜做无码97| 免费福利视频中文字幕| 日韩强奸av| 四虎国产精品永久在线囯在线| 精品一区二区三区麻豆| 91熟女丨91老女人| 凌辱美少妇久久aV| 天天综合官网| 久久这里只精品| 91欧美经典| 777超碰| 69精品| 久久在线观看免费视频| 人人爱人人乐人人操| 老司机午夜精品视频| 男人天堂新在线| 亚洲天堂男人天堂网| 亚91网| 色香欲影| 中文字幕第9页萱萱影音先锋| 精品97久久| 99热导航| 亚洲天堂少妇| 蜜臀一区二区三区在线| 成人小说视频在线精品欧美| 国产亚洲深夜激情| 男人天堂网址| 亚洲囯产精品女人久久久| 日韩性爱再线视频| 九九色色| 97视频7| 国产精品3| 久久精品无码一区二区三区| 精品综合久久久久久五月天| 久久久久久久久久久免费精品| 377p欧洲日本亚洲大胆| 动漫爆乳3D奶水一区在线观看| 欧美一区91大爱| 色综合91| 射丝袜大香蕉| 伊人久久AV诱惑悠悠| 91在线视频国产网站| 欧洲亚洲国产综合在线| 欧美极品美女aaaaaa级黄片| 91亚洲欧美综合高清在线| 美女性91| 奇米狠999| 男人天堂久久精品| 丰满人妻一区二区三区在线| 伊人久久亚洲色欲综合网站| 亚洲开心网| 欧美性生活免费网| 亚洲夜色在线| 91亚洲黑人| 美国三级日本三级久久99| 97超碰护士| 欧美日韩国产高清在线一二三区| 97舔舔| 国内毛片四区| 亚洲人妻在线一区| 亚洲熟女乱色| 春色综合网| 久久九九国产精品| baisiav| 国产乱码久久久| 17c在线成人免费A片观看| 色色热| 久久久久久99999国产精品| 欧美色999| 大香蕉啪啪啪| 玖色av| 黄色在线网站| 99热精品国产| 在线日韩精品一区二区三区| 色色国产| 黑人精品久久97| 欧美色图片| 亚洲欧美国产其他二区| 熟女一区二区三区| 国产色综合亚洲色综合吹潮| 伊人五月天青青草婷婷| 91亚州| 久操网线| 亚洲综合校园春色| 日日噜噜夜夜狠狠视频无| 久久的网站啊啊啊啊啊| 日日夜夜精品视频| 91亚·色| 97在线观看免费视频| 午夜a成v人电影| 人妻天天爽夜夜爽爽| 国产免费小视频| 日日夜夜天天| 性91| 日韩伦理视频| av操操不卡| 风月影院十八禁| 爱射综合| 日本国产欧美一区三区二区| 99青草| 在线播放成人高清免费视频| 麻豆天美传媒在线视频天堂| 日韩一区二区精彩视频| 中文字幕艹艹| 婷婷干黄色| 亚av顶级裸体一区二区三区四区五区| 亚洲天堂一区二区久久| 91n免费处女| 久久精品色欧美aⅴ一区二区| 久久久草草精品| 激情视频网址| 久久只有精品| 97爱b| 91深夜夜| av橘色网站| 91 在线亚洲| 欧美日韩性爱电影在线| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 日本日逼高清| 欧美,亚洲,日韩,v,天堂,手机在线观看 | 婷婷五月天成人| 日本精品五区| 超碰在线第一页| 亚洲成人免费在线| 免费A片三p视频| 97精品国产精品免费观看| 国产精品成人AV片免费看网站| 日韩9999| 国产精品久久久久久久久久久久| 综合欧美亚洲| 美女操逼A A| 十八禁成人网站在线观看| 另类天堂| 亚州高清av| 加勒比人妻综合| 亚洲啪啪视频免费| 欧美写真视频一区| 四虎影视欧美| 久久r精品| 极品极品色影院| 少妇天堂| 蜜臀99久久精品| 深夜国产一区二区三区在线看| 色丁香久久| 亚洲欧洲第二视频在线观看色图| 小说区 图片区色 综合区| av亚欧| 国产区性爱在线视频秋霞豆| 久久粉色| 激情文学网伊人| 日本操逼无码| 久久综合九九| 国产三级在线现体验区| 亚洲男人的天堂网| 欧美激情五月天| 韩国一级婬片A片无码天美| 欧美九一精品久久久熟妇| 欧美日日网| 国产乱伦性爱区| 天堂亚洲精品| 97bbn| 激情四射婷婷四五月天| 日韩一二三区| 东京热熟女亚洲视频网站| 欧美性爱五月天| 亚洲做性| 99精品久久久久久| 少妇六月天| 久久人妻办公室视频| 91九色丨风韵犹存| 天天综合,91入口| 一区二区偷拍拍视频| 欧美日韩国产色图在线| 国产一区二区成人av在线播放| 五月天加勒比啪| 亚洲天天影视综合网| 五月丁香影院| 99热啪啪| 久久久久久亚洲Av无码| 尤物视频偷拍免费| 裸体美女久久久| 男人天堂一区二区| 大香蕉日韩| 女人18精品一区二区三区| 国产传媒午夜理伦精品| 开心激情站| 尤物av网站免费在线播放| 欧美日韩另类在线播放| 精品国产一区二区三区久久久蜜臀 | 色婷婷丁香| 黄色污污污污污污网站| 强奸乱伦AV网站| 久久青青草在线视频| 日本不卡一二区| 亚洲男人天堂2| 欧美一区二区情色| 九热大香蕉| 男人天堂久久日韩| 操死我了嗯嗯嗯| 99热 按摩 日韩| 97硬碰| 性老妇一区二区三区| 欧美三级不卡| 91亚洲欧美色图| 1区2区3区中文字幕日韩| 青娱乐蜜桃臀AV色婷| 一区,二区,三区视频| 亚洲资源网| 久久九九精品一区二区| 91美女视频。| 亚洲爽图| 摸奶性爱视频网站在线免费播放| 激情小说日韩无码| 中文字幕乱在线伦视频中文字幕乱码在线| 天天摸夜夜添无码小视频| 国产亚洲女v在线观看| 日本欧美亚洲高清在线看| 女人被添高潮免费视频| 日韩国产精品人妻无码久久久| 热99这里有精品综合久久| 在线中文AV| 老司机香蕉久久久久| 亚洲高清自拍| 成人七区| 婷婷五月天激情网| 天美麻豆精品视频99| 天天α片| 91欧美情色| 1000部熟女视频在线观看| 亚洲精品天堂久久A∨51成人漫| 国产免费久久久久| 超碰97资源中文字幕| 中文字幕人乱码中文字的预防方法| www被窝色com| 国产精品九九九| 在线国产福利网址导航| 婷婷导航| 九九热男人天堂| 欧美极品少妇交| 99热在线不卡| 蜜臀久久99精品久久久久电影| 国产精品不卡高清在线观看| av日韩在线观看电影| 日韩三级天堂在线观看| 中文字幕在线免费观看视频| 嗯阿好爽好紧| 大香蕉人妻久久| 伊人久久综合影院| 素人播放一区| 久久爽爽精品| 无码国产精品96久久久久孕妇| 日韩激情无码影院| 天天爽天天爽| 欧美青青草视频| 少妇熟女1区2区3区| 九九热在线精品视频| 麻豆黄色五月天| 97超碰伊人| 丝袜美腿91| 日韩国产乱子伦App| 久久久久久久久久久久久久久乱码| 日产精品久久久一区二区| 人人看欧美性爱| 熟女一区二区| 好爽视频在线观看视频| 静品嫩模一区二区| a片亚洲一本通视频| 91美女在线| 日本欧美一区二区三区视频麻豆| 天天综合网一91网| 婷婷午夜清品久久久久久久性色视频观| 中文字幕亚洲永久精品| 日韩女优中文字幕| 热热色中文无码| www.av家庭乱伦| 亚州情色j区| 综合自拍| 九九九精品| 婷婷色五月激情| 噜噜噜亚洲精| 欲综合网| 欧美精品xxxwww| 女色视频社区| 玖草在线视频| 999狠狠综合| 国产精品白丝www| 亚洲成人免费在线| 久热这里| 97色婷婷| 老熟乱一区二区三区四区| 婷婷五月天激情网| 欧美自拍网| 国产亚洲精品玖玖玖在线观看| 欧洲亚洲人人爽爽视频| 囯产操逼片| 狠狠躁日日躁夜夜躁A| 久久中文字幕在线观看| 在线观看综合精品亚洲| 免费成人在线熟妇网| 奇米狠999| 欧美72网页| 亚洲 国产 精品一区| 夜夜嗨绯色| 玖玖玖玖精品国产剧情| 日韩欧美偷拍美女视频| 久久精品店| 国产人妻久久精品一区二区三区| 多毛小伙内射老太婆 | 十八禁电影伊人网| 欧美亚洲中文字幕| 涩亚洲欧洲| 激情五月天网| 天天干人人看综合| m欧洲一级午老| AV和黑人在线播放| 伊人久久久日韩一区| 国内毛片欧美香蕉精品| 日韩人成网站在线播放| 久久久久女教师免费一区| 国产精品午夜高潮呻吟久久av| 久久久久久九| 欧美精品91| 国产一区二区a毛片| 亚洲97资源| 少妇蜜汁| 久久亚洲精品成人av| 日日嗷| 亚洲日韩一区电影| 久久天天艹| 免费97视频| 把腿张开老子CAO烂你| 久久伊人影院| 97精品国产97久久久久久免费| 免费黄色片。| 欧美91精彩| 五月天婷婷久久| 国产绿奴视频在线观看| 天天干夜夜鈤| 91日产欧美| 亚洲天堂无码| 欧美日韩啪啪电影| 97视频播放| 囯产精品强| 少妇国产不卡| 人人考人人摸人人干| 久久AV无码AV| 久久久免费视频18| 99色热| 日韩一级久久毛片| 91狠狠综合久久| 免费超碰97久久| 国产人伦精品一区二区三区| 亚洲成人综合在线| 中文字幕亚洲永久精品| 精品国产乱码久久| 少妇第一页| 九热大香蕉| 欧亚综合一卡二卡中文字幕| 国产精品人人爽人人做可爱福利| 亚洲AV色图| 国产91专区| 伊人991| 嫩草 人人网精品| 偷拍欧美综合| 免费一级视频特黄色大片| 95自拍视频在线观看| 中文乱码字字幕在线第5页| 日本媚薬中文字幕在线| 99国产在线绯色一区| 果冻国产精品麻豆成人av| 欧美劲爆第一页| 天天热精品| 亚洲蜜臀懂色| 欧美一区二区情色| 人人 操人人 操人人| 日韩欧美性爱电影在线观看| 中文 人妻 制服| 国产成人五月天丁香花| 成人综合网 欧美| 五月丁香| 五月婷婷激情网| 国产1769在线| 黄片在线免费在线观看| 免费A V在线播放| av在线观看不卡网站| 国内偷拍精品一区二区| 亚洲欧美日韩中文播放| 另类天堂| 久久久久九九九| 亚洲欧美第一页| 97免费在线观看| 亚洲少妇综合| 97久久天天综合色天天综合色电影| 国产在线76页| 久久久九97| 色妹子A V| 91在线美女| 天天夜夜久久| 久久夜嗨| 亚洲色情在线影视| 激情情色五月天| 亚洲熟女一区二区| 久夜视频| 亚洲在线91| 久久久久亚洲| 欧美日韩国产另类综合| 密乳无码| 91精品黄在线观看| 日韩乱码Av| 夜夜夜夜夜夜夜夜夜狠狠狠狠狠狠狠| 宗合情欲网| 亚洲色图综合网| 9久久久久久| 毛片一区二区| 亚洲中文一区二区三区| 午夜a成v人电影| 亚洲一卡2卡3卡4卡乱码网站| 操比国产| 欧美系列在线一区二区| 少妇一区二区三区高速| 免费观看的黄色的网站| AA特级绝黄| 香港澳门日本三级网站| 人妻系列无码专区中文有码| 日日干天天干夜夜爽| 在线A日本| 亚洲人妻AV| 欧美日韩丝袜| 香蕉免费一区二区三区不读 | 欧美亚洲中文字幕| 日本久操视频| 国产1727欧美| 久久岛国| 蜜臀AV一区二区三区激情综合| 一区二区三区无卡视频在线观看| 草B在线| 人乳av| 老熟妇一区二区三区| 久久成年片色大黄全免费网站| 18禁美女裸体无遮挡啪啪| 亚洲精品国产精品乱码不99| 国产精品呦一区二区三区| 四虎AV在线观看| 91少妇香蕉久久精品| 久久熟女嫩草成人片免费 | 五月亭亭六月丁香| 人妻 中文 日韩| 1024久久高清视频| 国产二区三区粉嫩在线| 91丝袜人妻| 风月影院十八禁| 郑州宾馆老熟女露脸啪啪| 91久热这里只有精品| 91色人| 日韩免费大片一级播放| 96精品在线| 欧美日韩青操| 亚洲无码精品AV久久久| 久久老子无码午夜伦不卡| 久久綜合很很很| 99国产精品| 中文字幕黄色片| 久久↗↗| 国产精品视频麻豆入口| 超碰97欧美在线| 成人青青草原伊人| 久久精品国产亚洲AV片多多| 1区2区3区中文字幕日韩| 久久久久久综合久久伊人蜜月| 麻花豆传媒剧国产MV出差| 欧美色图片91| 无码人妻1727| 色99色| 3P丝袜熟女 色综合| 久久精品人妻一区| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 九九亚洲精品| 这里只有精品97| 日韩九区| 在线小视频| 99热99在线播放激情| www.激情| 北野未奈加勒比av| 天天色天天干天天射| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 国产高清不卡视频| 九久9精品| 色蜜AV| 女人天堂av在线播放| 久久久成人国产精品无码| 欧亚揄拍偷拍精品视频| 无码逼| 丝袜狠狠草尤物 91| 亚洲第一黄色av网站| 热久日综合| 精品v1区| 91久久久久久久久18| 精品丰满人妻一区二区三区免费观| 久久久偷拍| 久久久久久亚洲精品不卡人乳| 欧美激情在线观看视频| 欧美黄色大香蕉一区二区| 超碰在线在公开超碰在线在公开| 久久久久久亚洲Av无码| 亭亭丁香激情| 激情黄色片在线观看| 91色综合激情| 亚洲无码免费看| 欧美亚洲韩国视频十五区| 99热自拍| 黑人娇小av在线播放| 97激情97激情| 天天摸夜夜添无码小视频| 亚洲欧美setu| 51久久夜色精品国产麻豆| 蜜桃狠狠色伊人亚洲综合 | 久久久久免费少妇| 一区二区影视| 一道本东京热加勒比一区二区三区| 国产隔壁老王影院在线| 久操影视| yellow网站免费观看日韩高清无码| 91五月天| 柠檬AV导航| 欧州一区二区三区四区| 午夜精品久久999热蜜桃介男人用| 色一色综合网| 沈阳熟女高潮对白视频| 人妻超碰青青草98| 97超碰jingpin| 亚洲导航深夜福利| 中文字幕在线免费观看2| 亚州熟妇精品| 超踫中文字幕| 中文字幕亚洲永久精品| 久久超碰com| 国产av色网| 伊人久久亚洲中文字幕| 男女激情黄色网址| 日本成人在线不卡一区二区三区| 久久久久久久六六| 国产丝袜美女诱惑| 欧美日韩99| 中文字幕一区二区日韩网| 男人天堂欧美| 强奸乱伦中文字幕AV| 999狠狠综合| 欧美一级A片在线看视频性色| 家庭乱伦麻豆| 午夜操一视频一区| 啊啊啊啊二区好大| 欧美后进式| 97精品综合久久| 色天使亚洲综合在线观看| 亚洲日韩美女丝袜美腿人妻视频| 91精品国| 熟妇女伦乱视频视频| 欧美操逼视频二区| 欧美18禁91| 久久久久成人蜜桃精品| 成人免费在线网站| 99国产精品| 日本不卡一区二区| 美女骚尻视频| 色偷偷男人的天堂麻豆| 婷婷激情五月综合| 国产精品香蕉热久久新品| 亚洲第2页| 嫩草在线视频| 超碰成人人人爽人人爽| 中文字幕一区二区无码成人| 色网亚洲人| 少妇二级| 920日本午夜免费| 九九人人操| 综合欧美激情网| 操逼操逼逼操操逼91| 日本三级一区二区 在线| 综合色欧美| 校园春色 亚洲| 猛猛干| 亚洲欧美色图片| 一区二区三区看视频| 91少妇人妻| 天天草天天日| 国产午夜在线观看| 中文字幕一区二区无码成人| 久99在线免费观看视频| 国产AV天美传媒一区二区三区 | 99国内精品|