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

ARTICLE DETAIL

資訊詳情

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

Flask+Vue寵物領(lǐng)養(yǎng)寄養(yǎng)系統(tǒng)開發(fā)實戰(zhàn):從數(shù)據(jù)庫設(shè)計到部署避坑

Flask+Vue寵物領(lǐng)養(yǎng)寄養(yǎng)系統(tǒng)開發(fā)實戰(zhàn):從數(shù)據(jù)庫設(shè)計到部署避坑 最近整理項目代碼時翻到一套之前花了兩周時間搭出來的“寵物之家”系統(tǒng)技術(shù)棧是 Flask 做后端Vue 做前端頁面開發(fā)環(huán)境用 PyCharm。這個項目在同類里非常典型寵物領(lǐng)養(yǎng)、臨時寄養(yǎng)、后臺管理、用戶登錄注冊全都是老生常談但又繞不開的功能。很多人拿到這種題目第一反應(yīng)是套個管理系統(tǒng)模板但真要從零把一個可演示、可部署的完整系統(tǒng)寫出來里面還是有不少值得說的細節(jié)。這篇博文我就拿這個項目當例子從需求拆解、技術(shù)選型、數(shù)據(jù)庫設(shè)計、核心接口、前端聯(lián)調(diào)到部署避坑完整串一遍。先說一下項目的真實定位它不是一個大廠級別的中臺就是一個單體應(yīng)用后端 Flask 提供 REST API前端 Vue 寫單頁頁面數(shù)據(jù)庫用的 SQLite 做開發(fā)環(huán)境、上線再切 MySQL。這個組合在課程設(shè)計、個人作品集、小團隊內(nèi)部工具里出現(xiàn)的頻率非常高原因也很簡單——能跑、能改、能演示還不重。接下來按模塊拆開講。1. 項目盤點與需求拆解1.1 寵物之家在解決什么業(yè)務(wù)問題寵物之家解決的是兩個看起來相似、但邏輯上要分開的場景領(lǐng)養(yǎng)和寄養(yǎng)。領(lǐng)養(yǎng)場景里平臺是信息撮合方。有寵物來源方通常是救助站、個人送養(yǎng)人把寵物信息發(fā)布出來有領(lǐng)養(yǎng)意向的用戶瀏覽寵物列表看中之后提交領(lǐng)養(yǎng)申請管理員在后臺對申請做審核審核通過后寵物狀態(tài)改成“已領(lǐng)養(yǎng)”。這個流程看著簡單但狀態(tài)處理很考驗設(shè)計。比如寵物一旦被別人提交了申請就不能繼續(xù)出現(xiàn)在“可領(lǐng)養(yǎng)”列表里了否則兩個人同時申請同一只寵物后臺審核就會打架。寄養(yǎng)場景則更像一個服務(wù)預(yù)約流程。寵物主人因為出差、旅游等原因沒法照顧寵物就在平臺上下一個寄養(yǎng)訂單選擇寄養(yǎng)開始和結(jié)束日期系統(tǒng)根據(jù)時長算費用管理員確認后訂單進入“寄養(yǎng)中”狀態(tài)寄養(yǎng)結(jié)束后訂單完成。這里面涉及日期重疊校驗、訂單狀態(tài)流轉(zhuǎn)、費用計算邏輯比領(lǐng)養(yǎng)復(fù)雜一點。這兩個場景合在一起就是寵物之家的全部核心。剩下的是用戶管理、內(nèi)容管理這類周邊功能本質(zhì)上都是給這兩個主流程服務(wù)的。1.2 角色、權(quán)限與核心功能邊界系統(tǒng)里我設(shè)計了三種角色普通用戶、管理員、訪客。訪客不是一種持久角色只是為了描述“未登錄狀態(tài)下的瀏覽行為”。角色主要能力典型操作訪客瀏覽寵物列表、查看寵物詳情打開首頁看寵物不登錄也能看普通用戶注冊登錄后提交領(lǐng)養(yǎng)申請、創(chuàng)建寄養(yǎng)訂單、管理個人資料申請領(lǐng)養(yǎng)“布丁”、給自家貓預(yù)約7天寄養(yǎng)管理員管理寵物信息、審核領(lǐng)養(yǎng)申請、處理寄養(yǎng)訂單、管理用戶上架新寵物、通過/駁回領(lǐng)養(yǎng)申請、確認寄養(yǎng)訂單權(quán)限邊界這件事我在開發(fā)時就強調(diào)了一點前端菜單隱藏只是體驗問題后端接口必須再做一次鑒權(quán)。很多人前端的“刪除按鈕”用v-ifrole admin控制但后端的/api/pet/delete接口誰都能直接調(diào)。這種漏洞在演示時可能沒事答辯或外包驗收時一問就露餡。所以后端每個接口我都在路由裝飾器層做了角色校驗管理員接口除了要登錄還要檢查 token 里的角色字段。這個細節(jié)放在第三章詳細講。2. 技術(shù)選型Flask 作為后端Vue 作為前端2.1 為什么用 Flask 而不是 Django項目標題里同時出現(xiàn)了 Flask 和 Django很容易讓人困惑。實際項目里我選的是 Flask原因很現(xiàn)實這個系統(tǒng)規(guī)模不大Flask 的輕量優(yōu)勢能讓我把每個模塊的邏輯都寫得很清楚。具體展開說一下兩者差異。Django 自帶 ORM、Admin 后臺、Form 校驗、遷移工具功能完整但是“完整”的另一面是“重”。你建一個模型之后Django 自動幫你生成一套后臺看起來省事可對自定義業(yè)務(wù)邏輯比較強的場景反而不順手。比如領(lǐng)養(yǎng)申請這個流程狀態(tài)流轉(zhuǎn)和審核操作被我塞了比較多的自定義判斷Django Admin 默認的增刪改查頁面要改很多配置才能貼合業(yè)務(wù)。Flask 不一樣它只提供基礎(chǔ)的路由、請求上下文剩下的一切由你自己拼裝代碼里面的每一個判斷都清清楚楚調(diào)試時路徑也短出錯更容易定位。另外一個考慮因素是學習曲線。Flask 的代碼從app Flask(__name__)開始寫一個接口只要幾行入門成本低。這個項目如果給一個剛開始接觸前后端分離的人看Flask 的后端代碼比 Django 更容易看懂因為數(shù)據(jù)流是肉眼可見的。2.2 前后端分離架構(gòu)怎么落地前后端分離聽起來高級實際上就是把“界面展示”和“業(yè)務(wù)邏輯”拆到兩個進程里。前端 Vue 跑在 8080 端口負責渲染頁面、收集用戶操作、發(fā)請求后端 Flask 跑在 5000 端口只處理 API 請求并返回 JSON。項目的目錄結(jié)構(gòu)大概長這樣pet-home/ ├── backend/ │ ├── app.py │ ├── models.py │ ├── auth.py │ ├── api/ │ │ ├── user_api.py │ │ ├── pet_api.py │ │ ├── adoption_api.py │ │ └── foster_api.py │ ├── requirements.txt │ └── config.py └── frontend/ ├── public/ ├── src/ │ ├── api/ │ ├── router/ │ ├── views/ │ └── components/ └── package.json后端不是把所有路由寫在同一個文件里而是按照業(yè)務(wù)模塊拆成了幾個 Blueprint。這個拆分很重要不然隨著接口數(shù)量增多app.py會膨脹到?jīng)]法維護。開發(fā)階段前端通過代理轉(zhuǎn)發(fā)請求Vue CLI 的vue.config.js里配置一個 devServer.proxy 就能把/api開頭的請求轉(zhuǎn)發(fā)到后端。上線階段則用 Nginx 做反向代理同一個域名下/指向前端靜態(tài)文件/api指向后端服務(wù)這樣跨域問題也順帶解決了。2.3 PyCharm 下的開發(fā)環(huán)境搭建PyCharm 配合 Flask 項目的體驗確實好主要功勞集中在三塊虛擬環(huán)境管理、代碼補全和調(diào)試器。我建議不要用全局 Python 環(huán)境而是給項目建一個獨立的虛擬環(huán)境。PyCharm 里新建項目時直接選 Virtualenv或者進入Settings - Project - Python Interpreter新增一個。虛擬環(huán)境可以把 Flask、SQLAlchemy、PyJWT 這些依賴隔離在項目目錄內(nèi)換機器部署時只需要用pip freeze requirements.txt導(dǎo)出一份依賴列表目標機器上pip install -r requirements.txt就能還原。調(diào)試這塊Flask 自帶 debug 模式能打印錯誤堆棧但 PyCharm 的斷點調(diào)試更實用。在某個 API 函數(shù)里打一個斷點瀏覽器發(fā)起一次請求PyCharm 會自動把請求攔截住一步一步看變量變化。這種能力在處理登錄鑒權(quán)、狀態(tài)流轉(zhuǎn)類邏輯時特別好用。3. 核心業(yè)務(wù)模塊的設(shè)計與實現(xiàn)3.1 數(shù)據(jù)庫模型設(shè)計寵物之家涉及四張核心表用戶表、寵物表、領(lǐng)養(yǎng)申請表、寄養(yǎng)訂單表。四張表各自獨立又通過外鍵關(guān)聯(lián)成一個閉合的數(shù)據(jù)關(guān)系網(wǎng)。用 Flask-SQLAlchemy 定義模型代碼大致是這樣# models.py from datetime import datetime from flask_sqlalchemy import SQLAlchemy from werkzeug.security import generate_password_hash, check_password_hash db SQLAlchemy() class User(db.Model): __tablename__ user id db.Column(db.Integer, primary_keyTrue) username db.Column(db.String(80), uniqueTrue, nullableFalse) password_hash db.Column(db.String(256), nullableFalse) role db.Column(db.String(20), defaultuser) phone db.Column(db.String(20)) created_at db.Column(db.DateTime, defaultdatetime.utcnow) def set_password(self, password): self.password_hash generate_password_hash(password) def check_password(self, password): return check_password_hash(self.password_hash, password) class Pet(db.Model): __tablename__ pet id db.Column(db.Integer, primary_keyTrue) name db.Column(db.String(80)) species db.Column(db.String(20)) # cat / dog breed db.Column(db.String(50)) age db.Column(db.Integer) status db.Column(db.String(20), defaultavailable) cover_url db.Column(db.String(200)) description db.Column(db.Text) created_at db.Column(db.DateTime, defaultdatetime.utcnow) class Adoption(db.Model): __tablename__ adoption id db.Column(db.Integer, primary_keyTrue) pet_id db.Column(db.Integer, db.ForeignKey(pet.id)) user_id db.Column(db.Integer, db.ForeignKey(user.id)) status db.Column(db.String(20), defaultpending) remark db.Column(db.Text) apply_time db.Column(db.DateTime, defaultdatetime.utcnow) class FosterOrder(db.Model): __tablename__ foster_order id db.Column(db.Integer, primary_keyTrue) pet_id db.Column(db.Integer, db.ForeignKey(pet.id)) owner_id db.Column(db.Integer, db.ForeignKey(user.id)) start_date db.Column(db.Date) end_date db.Column(db.Date) fee db.Column(db.Float, default0.0) status db.Column(db.String(20), defaultpending) note db.Column(db.Text)設(shè)計時我重點考慮了兩個點。第一個是密碼存儲。密碼絕對不能明文存進數(shù)據(jù)庫。這里用 Werkzeug 的generate_password_hash做加密校驗時用check_password_hash。即使數(shù)據(jù)庫文件泄露攻擊者拿到的也是哈希值不是原始密碼。第二個是寵物狀態(tài)字段。寵物表里我留了一個status字段可選值有available可領(lǐng)養(yǎng)、pending申請審核中、adopted已領(lǐng)養(yǎng)、suspend下架。為什么不用布爾值的“是否可領(lǐng)養(yǎng)”因為狀態(tài)之間存在過渡期用戶提交申請之后到管理員審核之前寵物既不能算“可領(lǐng)養(yǎng)”也還沒到“已領(lǐng)養(yǎng)”如果只用一個布爾字段這個區(qū)間沒法表達。多狀態(tài)枚舉字段雖然看著笨但邏輯最清晰。3.2 基于 JWT 的登錄與權(quán)限攔截登錄模塊我選的是 JWT不是傳統(tǒng)的 Session。原因很簡單前后端分離場景下前端和后端不在同一個端口Session 依賴 Cookie 的自動攜帶配置起來麻煩跨域時還要處理 CORS 的credentials設(shè)置。JWT 天然適合這種架構(gòu)用戶登錄成功后后端返回一個 token 字符串前端存到本地存儲里每次請求在請求頭帶上Authorization: Bearer token即可。核驗邏輯寫成一個裝飾器# auth.py import jwt from functools import wraps from flask import request, jsonify, g from datetime import datetime, timedelta SECRET_KEY change-me-in-production def generate_token(user): payload { uid: user.id, role: user.role, exp: datetime.utcnow() timedelta(days7) } return jwt.encode(payload, SECRET_KEY, algorithmHS256) def login_required(fn): wraps(fn) def wrapper(*args, **kwargs): token request.headers.get(Authorization, ) if token.startswith(Bearer ): token token[7:] try: payload jwt.decode(token, SECRET_KEY, algorithms[HS256]) g.user_id payload[uid] g.user_role payload[role] except Exception: return jsonify({code: 401, msg: 登錄已失效}), 401 return fn(*args, **kwargs) return wrapper def admin_required(fn): wraps(fn) def wrapper(*args, **kwargs): token request.headers.get(Authorization, ) if token.startswith(Bearer ): token token[7:] try: payload jwt.decode(token, SECRET_KEY, algorithms[HS256]) except Exception: return jsonify({code: 401, msg: 登錄已失效}), 401 if payload.get(role) ! admin: return jsonify({code: 403, msg: 無權(quán)限}), 403 g.user_id payload[uid] g.user_role payload[role] return fn(*args, **kwargs) return wrapperSECRET_KEY在實際項目里不能寫死在代碼中我上線時改成了從環(huán)境變量讀取。JWT 有一個坑要注意它不需要服務(wù)端存儲狀態(tài)所以 token 一旦簽發(fā)在過期之前無法主動撤銷。如果遇到安全要求高的場景要么把 token 過期時間設(shè)短要么加一層服務(wù)端黑名單但那樣反而犧牲了 JWT 的無狀態(tài)優(yōu)勢取舍要看具體項目級。3.3 寵物管理與領(lǐng)養(yǎng)申請閉環(huán)寵物管理接口天然分成兩個角色視角管理員可以增刪改查寵物普通用戶只能看列表和詳情。刪除接口我特意做了軟刪除策略。后來想了想在這個系統(tǒng)里寵物被刪除通常意味著“下架”而不是“從數(shù)據(jù)庫抹掉”直接DELETE FROM pet WHERE id1會把歷史申請記錄的外鍵關(guān)系搞斷。所以實際實現(xiàn)里我沒有用物理刪除而是把status改成suspend列表接口默認過濾掉這些寵物。領(lǐng)養(yǎng)申請閉環(huán)是整套系統(tǒng)里邏輯最繞的一部分。用戶提交申請時后端要做的檢查按順序來當前寵物狀態(tài)必須是available當前用戶之前沒有對這只寵物提交過通過審核的申請創(chuàng)建申請記錄同時把寵物狀態(tài)改為pending前兩步是為了防并發(fā)兩個用戶同時看到一只可領(lǐng)養(yǎng)的寵物都點了申請按鈕如果后端不檢查就產(chǎn)生了兩條申請記錄。雖然實際教學中并發(fā)量很小但這個邏輯該有還得有。管理員審核時接口接收adoption_id和審核結(jié)果。通過則把對應(yīng)寵物改成adopted并駁回這只寵物的其他pending申請拒絕則把寵物改回available。這里面就是一個事務(wù)操作我用 Flask-SQLAlchemy 的db.session包了整個過程中間任何一步出錯就回滾保證數(shù)據(jù)庫不會出現(xiàn)“寵物已經(jīng)領(lǐng)養(yǎng)但申請記錄還是待審核”這種矛盾狀態(tài)。# adoption_api.py 簡化版 app.route(/api/adoption/int:adoption_id/review, methods[POST]) admin_required def review_adoption(adoption_id): action request.json.get(action) # approved / rejected adoption Adoption.query.get(adoption_id) if not adoption: return jsonify({code: 404, msg: 申請不存在}), 404 pet Pet.query.get(adoption.pet_id) if action approved: adoption.status approved pet.status adopted # 駁回同寵物其他待審核申請 Adoption.query.filter( Adoption.pet_id pet.id, Adoption.status pending, Adoption.id ! adoption.id ).update({status: rejected}) elif action rejected: adoption.status rejected if pet.status pending: pet.status available db.session.commit() return jsonify({code: 0, msg: 處理成功})3.4 寄養(yǎng)預(yù)約與訂單狀態(tài)流轉(zhuǎn)寄養(yǎng)的復(fù)雜度比領(lǐng)養(yǎng)更高因為它多了一個“時間段”的維度。寄養(yǎng)訂單表里必須校驗起始日期和結(jié)束日期的先后順序還要避免同一只寵物在同一時間段被預(yù)約兩次。日期重疊的判斷我卡了很久后來理清楚了一個法則兩條時間記錄重疊等價于“新開始時間 舊結(jié)束時間 且 新結(jié)束時間 舊開始時間”。比如舊訂單是 9 月 1 日到 9 月 7 日新請求如果也是 9 月 1 日至 9 月 7 日重疊如果新請求是 9 月 8 日到 9 月 10 日不重疊。訂單狀態(tài)我設(shè)計了五個pending待確認、confirmed已確認、in_progress寄養(yǎng)中、completed已完成、canceled已取消。狀態(tài)流轉(zhuǎn)的約束規(guī)則寫在業(yè)務(wù)層pending可以被管理員確認成confirmed也可以被用戶自己取消成canceledconfirmed在開始日期到達后系統(tǒng)自動或由管理員手動改成in_progressin_progress在結(jié)束日期到達后改成completed只有pending和confirmed狀態(tài)允許用戶取消為了避免狀態(tài)想怎么跳就怎么跳我專門寫了一個校驗函數(shù)每次更新狀態(tài)前檢查當前狀態(tài)到目標狀態(tài)是否合法。這樣雖然代碼多幾行但防止了接口調(diào)用方傳一個奇奇怪怪的狀態(tài)過來搞壞數(shù)據(jù)。4. 前端 Vue 集成思路4.1 路由規(guī)劃與頁面結(jié)構(gòu)前端我用 Vue 2 加了 vue-router頁面不多但路由規(guī)劃直接映射了業(yè)務(wù)結(jié)構(gòu)。// router/index.js const routes [ { path: /, name: home, component: () import(../views/HomeView.vue) }, { path: /pets, name: petList, component: () import(../views/PetList.vue) }, { path: /pets/:id, name: petDetail, component: () import(../views/PetDetail.vue) }, { path: /login, name: login, component: () import(../views/LoginView.vue) }, { path: /register, name: register, component: () import(../views/RegisterView.vue) }, { path: /my/adoptions, name: myAdoptions, component: () import(../views/MyAdoptions.vue) }, { path: /my/fosters, name: myFosters, component: () import(../views/MyFosters.vue) }, { path: /admin, name: adminDashboard, component: () import(../views/admin/Dashboard.vue), meta: { role: admin } } ];普通用戶能看到的頁面有寵物列表、詳情、登錄注冊、我的申請、我的寄養(yǎng)訂單。管理員頁面單獨放在views/admin目錄路由上加了meta.role標記。vue-router 的全局守衛(wèi)里讀取 token 解析后的角色如果不是管理員就重定向到首頁。這個只是體驗層后端接口的權(quán)限校驗依然不可省略。4.2 Axios 請求封裝與接口對接Vue 頁面里如果每個頁面都直接axios.get(url, { headers })寫重復(fù)代碼會很多而且 token 還要手動塞進頭部。我封裝了一個request.js實例// api/request.js import axios from axios const request axios.create({ baseURL: process.env.VUE_APP_BASE_URL || /api, timeout: 10000 }) request.interceptors.request.use(config { const token localStorage.getItem(token) if (token) { config.headers.Authorization Bearer ${token} } return config }) request.interceptors.response.use( response response.data, error { if (error.response error.response.status 401) { localStorage.removeItem(token) window.location.href /login } return Promise.reject(error) } ) export default request響應(yīng)攔截器統(tǒng)一處理后端返回的結(jié)構(gòu)。后端約定了一個固定的返回格式{ code: 0, msg: success, data: {...} }錯誤時code非 0。前端頁面只需要判斷response.code 0再取數(shù)據(jù)不用每個接口單獨處理異常結(jié)構(gòu)。4.3 關(guān)鍵頁面實現(xiàn)細節(jié)寵物列表頁是普通用戶進系統(tǒng)的第一站我用卡片網(wǎng)格展示寵物。每個卡片包含寵物照片、名字、品種、年齡和當前狀態(tài)。狀態(tài)這個字段需要映射成中文展示available顯示“可領(lǐng)養(yǎng)”pending顯示“審核中”adopted顯示“已領(lǐng)養(yǎng)”。這個映射我放在前端的公共utils/statusMap.js里避免頁面組件里到處寫重復(fù)的三元判斷。寵物詳情頁比較有意思的地方是“申請領(lǐng)養(yǎng)”按鈕的可點擊條件。按鈕是否可用要同時滿足三個條件寵物狀態(tài)是可領(lǐng)養(yǎng)、用戶已經(jīng)登錄、用戶不是管理員。用戶未登錄時按鈕旁邊顯示“登錄后即可申請”點擊后跳轉(zhuǎn)登錄頁面管理員登錄時根本不顯示申請按鈕因為管理員不會申請領(lǐng)養(yǎng)自己的平臺寵物。提交領(lǐng)養(yǎng)申請的表單里我留了一個必填的備注框引導(dǎo)用戶填寫喂養(yǎng)經(jīng)驗、居住環(huán)境等信息。這個設(shè)計是學真實領(lǐng)養(yǎng)平臺的目的是輔助后臺管理員做初步篩選也讓整個申請流程更像真事。5. 聯(lián)調(diào)、部署與踩坑記錄5.1 跨域問題的三種解法前后端分離開發(fā)中遇到最多的第一個坑就是跨域。前端跑在 127.0.0.1:8080后端跑在 127.0.0.1:5000瀏覽器默認會攔截前后端不同端口之間的 AJAX 請求。最簡單的解法是安裝 Flask-Cors 擴展初始化時放開所有跨域限制。這種方式適合本地開發(fā)但不適合上線。上線后接口如果對任意域開放等于把接口暴露給第三方網(wǎng)頁隨意外調(diào)用存在被刷接口的風險。第二種解法前端開發(fā)環(huán)境用 devServer proxy。Vue CLI 項目在vue.config.js里寫module.exports { devServer: { proxy: { /api: { target: http://127.0.0.1:5000, changeOrigin: true } } } }這樣前端請求/api/pet/list開發(fā)服務(wù)器會幫它轉(zhuǎn)發(fā)給 5000 端口的后端。瀏覽器里看到的請求地址始終是同源的不會觸發(fā)跨域限制。第三種解法也就是上線的做法用 Nginx 同時托管前端靜態(tài)文件和后端反向代理server { listen 80; server_name pet-home.example.com; location / { root /var/www/pet-home/dist; try_files $uri $uri/ /index.html; } location /api/ { proxy_pass http://127.0.0.1:5000/api/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }三種方案按開發(fā)階段和上線階段配合使用跨域問題就徹底不存在了。5.2 圖片上傳與靜態(tài)資源處理寵物信息必然要上傳圖片。最開始我把圖片路徑直接存在數(shù)據(jù)庫的cover_url字段里圖片本身存到后端的uploads目錄。開發(fā)時一切正常上線后遇到一個問題Nginx 只托管了前端靜態(tài)文件訪問/api走代理但用戶上傳的圖片路徑如/uploads/xxx.jpg沒有匹配到任何 location直接 404。解決辦法是給圖片目錄單獨加一個 locationlocation /uploads/ { alias /var/www/pet-home/uploads/; }同時提醒一個細節(jié)后端返回的圖片地址不要存成完整的http://127.0.0.1:5000/uploads/xxx.jpg因為服務(wù)器的 IP 或域名一變前端就全都崩了。正確做法是只存相對的資源路徑uploads/xxx.jpg前端拼接域名顯示圖片。我這個項目里統(tǒng)一用了相對路徑換環(huán)境部署時省去一大半麻煩。5.3 部署時常見問題部署到 Linux 服務(wù)器時有幾個坑比較隱蔽一一記錄。第一個是數(shù)據(jù)庫遷移。開發(fā)時用的 SQLite文件數(shù)據(jù)庫直接復(fù)制數(shù)據(jù)庫文件到服務(wù)器沒問題。但切到 MySQL 之后需要重新建庫、重新配置連接字符串。如果模型改動頻繁建議用 Flask-Migrate 管理數(shù)據(jù)庫遷移省得每次手動刪表重建。第二個是 Python 依賴和版本兼容。requirements.txt里最好鎖定版本號不鎖定的話過幾個月在新環(huán)境裝依賴可能裝出一個不兼容的新版本。比如 Flask-SQLAlchemy 2.x 和 3.x 的某些 API 變化會造成代碼報錯。第三是服務(wù)進程存活。上線我用的 gunicorn 做 WSGI 服務(wù)但 gunicorn 進程如果掛了就不會自動起來。所以用 systemd 寫了一個守護服務(wù)進程崩潰后自動重啟。這個方法很老套但確實管用比定期人工檢查靠譜得多。6. 項目復(fù)盤與可擴展方向6.1 維護心得寵物之家這個系統(tǒng)代碼量不算大后端大概 2000 多行前端 3000 多行但我維護了很長一段時間中間沒覺得頭疼主要歸功于一開始守住了幾條原則。第一所有接口都按業(yè)務(wù)模塊分組用 Blueprint 劃分不往app.py里堆。第二API 返回格式統(tǒng)一成{ code, msg, data }前端攔截器統(tǒng)一處理。第三狀態(tài)字段都用字符串枚舉表示不藏數(shù)字魔法值。這三條看著是基本功但很多中途爛掉的項目都是在這上面翻的車。6.2 后續(xù)升級建議如果這個系統(tǒng)還要繼續(xù)往下走我會優(yōu)先補三塊線上支付對接、消息通知、數(shù)據(jù)統(tǒng)計分析。寄養(yǎng)訂單現(xiàn)在只是算費用不收款接個標準支付接口可以真實跑通商業(yè)閉環(huán)。消息通知方面領(lǐng)養(yǎng)申請審核通過后可以用簡單的站內(nèi)信或者推送小程序通知用戶不用短信成本低。數(shù)據(jù)統(tǒng)計則適合給管理員后臺加一個首頁儀表盤展示寵物總數(shù)、領(lǐng)養(yǎng)轉(zhuǎn)化率、寄養(yǎng)訂單量直接查幾張表做聚合就行。另外可以將前端 Vue 2 升級到 Vue 3組合式 API 寫業(yè)務(wù)邏輯更順手狀態(tài)管理也能用更輕量的方式。后端可以逐步拆出服務(wù)層把業(yè)務(wù)邏輯從 API 視圖函數(shù)里挪出去邏輯更清晰測試也好寫?;乜凑麄€實現(xiàn)過程最深的體會是“別急著寫代碼”。一開始我拿到題目就上手建表結(jié)果做了兩天推翻重來。后來老老實實把業(yè)務(wù)流程圖和數(shù)據(jù)流圖畫清楚再動手寫效率反而更高。中間還踩了不少環(huán)境、部署相關(guān)的坑我把每一條都記錄在項目文檔里后來別人接手也能少走彎路。如果你正在做類似領(lǐng)養(yǎng)寄養(yǎng)的系統(tǒng)建議直接拿這張表去對照一下自己的功能是否齊全模塊必備功能加分功能用戶注冊、登錄、角色區(qū)分找回密碼、手機號綁定寵物發(fā)布、列表、詳情、狀態(tài)管理多圖展示、篩選搜索領(lǐng)養(yǎng)申請、審核、狀態(tài)流轉(zhuǎn)申請記錄回溯、免疫信息檔案寄養(yǎng)下單、日期校驗、費用計算支付、日歷可視化、護理日志后臺寵物管理、訂單管理、用戶管理數(shù)據(jù)統(tǒng)計、操作日志框架和語言只是工具核心還是把業(yè)務(wù)流程想透。希望這篇分享能給正在做類似系統(tǒng)的你一些啟發(fā)。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
91人人看| 丰满人妻区一区二区三| 色综合1991| 岛国1区2区3区在线观看| 91黑人无码激情在线| 日本岛国黄色网址| 久久青娱乐| 一级黄色视频网| 亚洲国产精品乱码在线观看| 亚洲中文字幕av | 亚洲国产天堂| 美女被艹尤物视频| 欧美天天综合| 色爽爽文学| 69麻豆天美| 五月天综合| 99热一区二区三区四区| 97在线精品| 亚春色色| 99这里只有精品| 天天综合站| 国产精品亚洲一区二区三区四区| 欧洲大香蕉| av无码av无码专区| 国产高清在线自在拍69| 欧美日韩 强奸乱伦| 久久久久久久78| 91成人高清在线观看| 99久久久无码| 激情小说日韩无码| 美美91成人国产精品欧美精品久久久久久久 | 国产av美女被艹的乱叫| 日本不卡一二区| 亚州色图第三区| 精品78| 精品少妇后入一区二区三区四区人妻巨乳 | 一级A片女人高潮叫床| 欧洲精品欧洲精品| 激情四射婷婷四五月天| 亚洲黄片免费在线播放| 麻豆一区二区三区精品| 美女超碰978| 99热99色| 亚洲熟妇无码一区二区三区| 在线 亚洲 网爆 自拍| 国产精品午夜福利视频| 一二三啪啪专区| 综精品久久久aaaa| 欧美色图在线视频少妇| 亚洲九九视频| 日本性爱少妇| 台湾大香蕉99热| 青青草视频在线观看一区二区| 久久婷婷在线观看视频| 欧美色图91p| 大香蕉手机在线| 好爽免费视频| 九九探花视频在线观看| 无码日韩人妻av一| 大香蕉亚洲中文| 亚洲激情色片| 国产一国产一级毛片古装| 国产在线能看的你懂的| 可以免费观看的AV| 乱子伦一区二区三区国产精品| 日韩紧密久久| 97色综合中文网| 亚洲,日韩,欧美,成人播放 | 人人看人人摸人人色| 啊啊啊 在线观看| 在线观看AV不卡| 美骚妇av高清在线| 一级性爱视频免费观看| 99亚亚热| 玖玖草久草99蜜月一区二区三区| 欧美色亚洲| 最近的最新的中文字幕视频| 久久精品视频在线观看| 欧美十八禁视频| 日韩有码免费视频| 91中出在线| 国产成年免费大片黄在线观看| 婷婷五月丁香五月| 香蕉欧美| 韩日性爱av| 久久不卡一区二区| 1769一区| 人妻-91porn| a片亚洲一本通视频| 国产熟码AV| 久操凹凸视频| 日本熟妇自慰性高潮一区二区三区| 先锋影音av先锋一区| 婷婷五月天激情四射| 色原狠狠天天天| 日婷婷| 91新在线欧美| 精品欧美А∨无码黑人大荫蒂| 九九成人| 18禁在线视频| 亚洲综合贴图91| 国产无码精品高清| 老鸭窝日丰县女人| 色一情一乱一乱一区91Av| 日本ZZ高免费A级视频| 日韩av乱伦| 97久操| 久操九九九九| 亚洲精美粉嫩嫩泬在线观看| 中文乱码字幕观看视频| 另类亚洲图色| 97人人干| 最新av中文字幕高清| 亚洲天堂人人妻| 欧美性爱另类综合| 五月婷婷激情综合| 综合五月婷婷| 99国内精品| 免费精品中文字幕| 日韩人妻无码不卡网站| 九九热五区| 午夜免费福利视频一区| 日本淫乱女一区二区三区视频| 色盈盈影院| 亚洲高清无码免费观看视频| A 在线网址| 精品久9| 超碰在线第一页| 日本三级中国三级99人妇网站| 精品蜜乳AV免费观看| 夜夜做夜夜爽精品视频| 国产久久男人天堂| 久久超碰免费的| 丝袜美腿欧美| 超踫中文字幕| 亚洲影视综合网| 黄片无码在线制服| 亚洲免费人妻在| 可以免费看黄片的视频| 久久超碰免费的| 亚洲情色第一页| 色婷婷丁香五月天| 欧美亚洲另类在线蜜桃| 色成人Www精品永久观看| jizz啪啪| 欧美日韩国产黄色片| 久久久性少妇| 天堂亚洲精品| 亚洲综合首页| 中文一区二区三区影院| 在线97在线| 午夜精品视频777| 国内外毛片在线观看| 最新av在线| 粉嫩av一区二区三区四季| 欧美亚洲丝袜人妻制服99| 中文字幕 码 自拍 视频 区| 人妻夜夜爽天天爽麻豆三区网站 | 日本精品一区二区不卡| 中文字幕乱码在线观看| 欧美性爽xyxOOOO| 久久伊人最新网址视频| 成人乱人伦一区二区| 婷婷影院入口| 九九无码久久精品视频| 中文幕97| 99国产精品| 在线岛| 亚洲aV性爱| 婷婷色色五月| 殴洲老熟女| 国产精品禁久久久精品| 色噜噜国产精品视频一区二区| 国产女人操逼视频| 国产九九九九九九九九| 天堂日本亚洲欧美| 精品免费成人久久| 2017人人操,人人摸| 亚洲色图殴美色图激情乱伦| 久久熟女人| 亚洲丝袜二区在线| 国产欧美精选激情视频| 97久久视频| 后入综合久久| 中文字幕日韩综合| 97久久精品不卡| 99精品在线| 蜜桃久久久久久久久久久久| 加勒比99999| 国产高清无码一区三区二区| 综合情欲网| 久久六六| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 97碰碰色| 美女诱惑1区2区| 啊啊啊啊啊啊在线观看| 亚洲情色一区三区| 免费观看国产不卡av| 欧美亚洲丝袜人妻制服99| 97视频在线观看免费高清| AAA久久| 久久久精精精| 超碰 另类 欧美| 婷婷操视频| 无码视频一区二区| 国产美女mm131爽爽爽爽| 精品久久久久成人码免| 蜜臀少妇一区二区| 亚洲乱色熟女一区| 超碰97伊人| 天天插天天舔舔天天干| 色哟哟511老熟女| 欧美97av| 色男人色天堂东京热| 国产精品探花在线| 欧美AAAA黄片| 九九九九一区| 一级黄碟| 老熟女区| 一二三啪啪专区| 天天插夜夜操| 亚洲骚女一区二区三区| 久久丝袜| chaopen97久久| 精品国产自在在线99| 激情视屏国产乱伦强奸| 欧美综合国产精品久久丁香| 国产区在线| 日韩天天本| 中文字幕五区| 91欧美| japan日本高清乱xxxx| 日韩性爱小视频| 超碰九区| 日本 情色 1区| 女人天堂网| 欧美激情久| 蜜桃色院一区久久 | 色眯眯av| 啊啊啊在线观看免费视频| 亚洲成人av色网| 97在线视频观看| 黄色一级视| 婷婷中文网| 日本狂喷奶水在线播放212| 大象AV在线| 女色综合| 黄色人人| 丰满少妇乱子伦精品无| 欧美日韩操逼嗦吊| av九九| 99久久com免费视频′| 五月丁香成人网| 长长久久曰曰夜夜成人网| 91精品黄在线观看| 97久精品| 综合欧美日韩在线| 日本天天人人狠狠在线日美女| 欧美白嫩女HD| 91人人臊| 日本伦理一区二区| 九一精品牛牛一区二区| 99re热| 高颜值美女口爆高潮浪叫| 亚洲中文字幕av| 我要色综合网| 国产福利影视| 尤物av网站| 亚洲天天影视色综合| 综合自拍| 老熟女乱伦一区| 日韩性爱网址| 久热精品色情| 日本一区不卡| 日韩成人大片在线观看| 日韩精品99久久久久久中文字幕 | 亚洲一区二区av| 强奸乱伦 亚洲一区| 日韩乱伦视频| 亚洲日韩久久精品一区| 97超碰超碰| 日韩精品亚洲专区在线影视| 91蜜臀熟女| 欧美综合狠| 亚洲码在线中文在线观看| 无码国产精品午夜不卡(| 免费人人搞97| 亚洲欧美天堂| 天天操女人| 日韩欧美中文字幕搭讪巨乳美人妻视频| 91激情| 久久精品小视频| 欧美在线|亚洲| 中文字幕一区二区三区高清| 熟女欧美日韩综合婷婷| 五月天精品| 亚洲色91C| 中文啪啪视频| 久久岛国| 精品国产乱码久久久久久影片| 制服丝袜第二页| 91精品久久久久五月天精品| 免费农村成人少妇人妻Aa一区二区视频 | 亚洲伊人a线观看视频| 91ise欧美| 国产精品久久泡妞网站| 99久久久| 国产精品久久久亚洲一区| 亚洲精品蜜桃久久久久久久| 国产操操日韩三级黄| 男生女生啊啊啊啊| 日本免费专区| 噜噜噜亚洲精| 亚洲精品97在线| 久久精品国产精品一区 | 久久成人午夜精品影院| 精品久久久不卡一区二区| 青青操网| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 国产毛片久久久久久久| 色优久久| 2024年最新色情网站在线观看| 天天看片天天爽| 波多野结衣AV无码一区| 久久久三区二区一区| 婷婷五月天AV| 人人操人人插人人摸人人干| 男人天堂 天天射| 天天天天干| 成人免费毛片| 97超碰超| 天天日骚逼熟女| 日本天天吊| 亚洲色香| 岛国AB视频| 精品毛片久久久精品毛片| 久久无码精品| 五月天人妻综合| 超碰 另类 欧美| 国产热RE99久久6国产精品首| 97超碰香蕉| 丰满人妻一区二区中文| 天天综合网1| 99re9在线| 国产高清成人传媒影视| 丰满岳乱妇一区二区三区| 国产60页| 久9无限国产| 婷婷性网| 天天色综合影视网| 人妻第一页| 99re在线视频国产| 亚洲色资源| 色女网日韩| 偷窥自拍亚洲色图| 蜜臀久久一区二区| 蜜色网色哟哟| 青青爽| 五月激情综合网| www色婷婷| 亚洲超碰在线| 日本狠狠干| 丰满人妻一区二区三区| 另类图片五月| 国产农村妇女精品一| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 久久综合18p| 七久久久| 成人日韩欧美| 99ri视频| 中文字幕欧美日本乱码一线二线| 一级片视频啪啪| 亚洲日本韩国在线| 玖玖超碰熟| 变态乱伦伪娘灌肠一区二区| 超碰在线974| 青草一区二区| 九九亚洲| 亚欧成人一级片在线播放| 成片免费播放| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 国产67194| 久草线上视频免费看| 亚洲三区视频| 日韩电影天堂视频一区二区| 五月丁香六月综合缴清无码 | 一牛影视成人片免费| 97硬碰| 九九综合九九综合| 国产精品乱码久久久久久久久久久久| 日韩啊V| 欧美黑人与女人91~| 啪啪啪综合网| 91亚州欧美| 亚洲精品一区二区精品| 中文字幕超碰CAO| 思思热免费在线视频| 超碰久久草| 911av网站免费观看| 久久亚洲色图中文字幕| 国产女人91精品嗷嗷嗷嗷| 本道在线| 久久久网站| 亚州男人天堂| 一区中文字幕二区日韩| 激情国产乱伦Av| 熟女露脸激情自拍视频| 欧美午夜精品久久久久久3D| 日韩激情电影中文字幕| 91丝袜熟女| 美女被艹尤物视频| 肏逼视频日本| 免费97视频| 巨爆乳肉感一区二区三区竹菊影视 | 91neishe| 午夜超爽| 干B网| 中文字幕丝袜人妻| 粉嫩不卡一区二区性爱| 国产99热| 九九夜精品九九在线| 综合欧美日韩在线观看| 中文字幕97| 夜精品久无码| 99热免费| 亚洲中文日韩欧美大香蕉视频| 91日韩网站| 青青青操| 久久精品国产72国产精品福利| 精人妻一区二区三区| 91丝袜美女| 18禁的网站在线| 麻豆91熟妇人妻中文字幕茄子| 国产极品999| 综合欧美日韩在线观看| 欧美精品三级黄片| 欧美桃色网| 蜜桃臀 后入 一区 二区 三区 在线| 久久黄色性爱视频| 久久啊啊啊| 亚洲性图91| 亚洲熟女乱色| 久久精品国产精品亚洲艾通辽熟妇| 伊人网青青| 97ai亚洲| 亚洲AV不卡在线观看| 91女在线观看| 色五月激情综合网| 懂色天天爱天天日天天射天天澡| 狠狠操狠狠操操| 亚洲一区制服诱惑| 国产白丝精品在线观看| 日日骚av| 国产熟女自拍| 爱爱久久| 东北女人的毛片| 日韩啪啪啪啪啪| 操逼操网| 二男一女成人A片| 久久久久久久精| 99久久免费看精品国产一区| 97超碰超欧美。| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 操死我了啊啊啊| 久久久婷婷| 久久伊人在线五区| 亚洲综合春色| 伊人网av| 后入美女国产| 粉嫩国产精品久久粉嫩| 99久久网站| 一级A片女人高潮叫床| 久综合国内精品自在自线| 国产精品999aaa| 久热一区二区| 9999久久久| 欧美日韩色| 91热| 夜夜欢天天干| 97狠狠| 午夜精品久久99蜜桃的功能章节| 久久久久99精品成人片蜜臀| 天天夜夜rb| 大香蕉懂9| 怡红院久久老司机| 大香蕉日韩| 国产97色在线| 97在线视频免费| 91老熟女视频| 亚洲国产一级黄色视频| 强奸乱伦亚洲第一页| 国产高清免费不卡av| 亚洲伊人a线观看视频| 日逼逼免费看| HEYZO高无码国产精品227| 新婚人妻扶着粗大强行坐下| 欧美做爰无码A片视频| 激情五月综合| 天天操天天射青青草| 一区久久久二区| 国产超碰在线一区| 超碰一区二区| 超碰97伊人| 色五月AV| 亚洲av综合色区图片亚洲| 国产精品999zyz| 国产AV高清AV无码| 混色激情av| 好吊色一区| 97国产伦理| 日逼97| 国产中出内射一区二区| 日本一级婬片试看三分钟| 美中日韩无码| 香蕉在线一区二区三区| 校园春色综合色| 中文熟女五十乱码在线| 天天噜| 久久久久久大| 亚洲综合校园春色| 亚洲97超碰| 国产又黄又爽又刺激久久久久久| 91人妻尻屄视频| 91九九九馒头| 人妻少妇久久| 思思久热在线精品66| 久久黄色性爱视频| 国产成人亚洲精品自产在线| 综合久久99亚洲人妻中文在线| 日曰骚久久精品| 91免费看一区二区三区| 亚洲日韩国产欧美综合v| 青青青国产| 国产久9| 久草精品国产99| 桃花色涩综合影院| 东京热av男人的天堂| 老熟女综合网| 日韩激情啪啪啪| 小泽玛利亚一二三| 亚洲se电影| 日韩字幕一区| 蜜臀久久99精品久久综合| 日日骚精品视频| 97色网| 成人日本视频人妻在线| 婷婷另类小说| 欧美天天射| 激情五月天社区| 久久香蕉超碰97国产精品| 国产一区二区在线播放| 国产无套粉嫩白浆在| 欧美在线啊啊啊| 青青久久艹| 在线视频日韩欧美国产| 97爱b| 精品日韩人妻视频| 啊啊啊啊视频免费| 中欧人妻丝袜中文字幕| 亚洲免费看片| 人人操超碰在线| 金莲网址| 欧美激情久久久久| 亚洲av综合色区图片亚洲| 五月天黄色av| 精品人妻av区天天看片| 爽爽淫人网| 中文字幕一区二区三区人妻不卡 | 免费观看性欧美一级| 精品妇女一区二区三区| 久久国产精品m码| 亚洲精品亚洲人成人网| 亚洲色图 91| 国产尤物AV尤物在线观看不卡| 性爱欧美五月| 九月丁香婷婷色| 97精品97| 美女国产一区二区久久| 中文字幕伊人| 欧美精品自慰系列寂寞少妇| 亚洲日韩狠狠撸视频| 亚洲性爱无码乱伦av| 啊啊啊在线看| 免费黄色片子| 亚洲色图一区二区三区| 熟女丰满人妻一区| 一二三区操逼国产91| 欧美在线伊人色| AV在线性爱| 欧美78| 日韩一级成人毛片免费观看| 综合网亚洲1| 亚洲操操| 亚洲欧洲av影音| 69视频入口| 熟女天天干| 国产成人手机视频激情| 日韩射图| 91是天天| 乱伦Av网| 国产伦精品| 97色爱| 欧美强奸乱能| 久久αⅴ| 亚洲欧美国产中文字幕| 日本国产成人亚洲精品无码| 97超碰欧美中文字幕| 蜜桃精久三区| JIZZJIZZ国产精品喷水| 国产精品乱码久久| 日本人妻天堂网站在线播放| 日韩欧美亚洲一区二区三区影院| 97中文字幕九区| 亚洲AO在线| av在线免费一区二区| 久久97视频| 亚洲欧美另类少妇精品| 在线人人人人人人精品超| 精品亚洲天堂| 夜精品久无码| 啊啊啊操一区| 操高情无码| 五月情色天| 中文字幕AV片| 伊人AAA| 无码天天操| 97免费视频在线| 欧亚成人在线视频| 九九热九九热| 日本日皮视频逼| 国产在线观看一区二区三区| 亚洲中亚日激情视频| 校园春色制服丝袜中文字亚洲| 日韩精品碰碰| 久操精品| 亚洲色性| 男人的天堂日本东京热| 亚洲 中文 女同| 精品成人av一区二区三区在线| 国内毛片欧美香蕉精品| 深喉吞精| 午夜精品久久久久久久99| 青青操97| 日本在线一二| 无码伊人久久大杳蕉中文无码| 国产亚洲欧洲在线观看| 爱爱60秒免费视频| 久久久久女教师免费一区| av爱爱爱| 日韩中文字幕二区| 99碰碰| 91九九九馒头| 999热日韩精品| 超碰91在线| 国产suv一区二区三区6| 无码国产精品午夜不卡(| 乱色老一区二区三区的观看方式| 无码 黑人一区二区三区| 天堂精品小草| 亚洲美女自拍偷拍视频| 东京热99999| 色成人Www精品永久观看| 男人的天堂kva| 欧美一区二区一级岛国大片| 97资源欧美| 日本熟女中文字幕一区| 亚洲加勒比色图| 99热综合| av亚欧| 欧洲一区二区三区免费| 91人妻素女| 成人草草视频| 日本亚洲vr欧美不卡高清专区| 不卡在线观看视频| 日本中文字幕一区| 长长久久88视频| 97在线观看| 91挑色欧美| 五月天啪啪| 亚洲 日本 国产 综合| 色综九九九一区| 麻豆精品A片免费观看| 操99| 亚洲欧洲日韩国产自在线| 夜夜欢天天干| 人人操人人操人妻人| 330Dv国产女人终合视频极品人与兽 | 成人情色综合网| 青娱乐av在线| 五月丁香六月激情| 麻豆国产视频精品观看| 超碰九区| 午夜啊啊| 无码九九| 日本高清加勒比| 操死我了嗯嗯嗯| 有码色中文字幕在线观看| 欧美图片偷拍| 熟女被操视频网址| 欧美人妻久久精品二区三区 | 999日韩中文精品观看视频。| 亚洲欧洲精品视频发布| 91人妻最真实刺激绿帽| 91视频伊人| 日本精品一级二级三级| 69精品| 国产深夜福利| 91综合在线| 精品三级在线专区| 日本性感人妻91| 日本高清免费一本视频在线观看| 日本三级A片网站com| 少妇久久久久| 91福利网在线观看| 久久久久亚洲av综合波多野制衣| 思思热在线视频免费| 成人免费视瓶| 欧美色视频在线| 极品尤物在线观看| 91亚·色| 伊人色综合欧美| 日韩欧美久久婷婷网站| 搡老女人老91二区| 91伊人久| 91五月天| 歐美性天天| 亚洲天天精品| 久久啊啊| 久久无码成人| 校园春色综合| 久久久久96| 国产强奸无码乱伦| 看一级黄色视频| 91精品成人www| 91AV天美在线视频| 亚洲色电影在线| 久久毛卡| 亚洲第91页| 欧美天天射| 亚洲AV无码乱码在线观看性色| 九九综合久久| 久久久久亚洲一区女同性恋中文字幕| 9精品久久久久| 精品国产人成在线| 99热在线不卡| 91亚洲人| 色色五月天激情| 日韩97视频| 26uuu偷拍亚洲欧洲综合| 香一区二区三区| 国产精品97视频| 日本成人电影资源网| 大香蕉碰碰| 大香蕉日韩| 欧美极度丰满熟妇hd| 国产AV人人夜夜澡人人爽麻豆| 中文字幕精品一区欧美| 久热久一区二区三区| 中文字幕后石码四区五区| 亚洲欧美成人在线| 99热欧美| 亚洲九区| 大色综合| 国产精品2020| 强奸乱伦AV网站| 91少妇高潮| 91一起操| 青青草好吊色| 人妻激情另类| 在线观看一级α片刺激高潮视频| 亚洲天堂东京热| 国产欧美日本亚洲精品 | 婷婷伊人| 色99999| 国产亚卅97| 日韩欧美字幕亚洲一区二区| 亚洲第一男人天堂| 亚洲天堂中文字幕无码男同| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 熟女网站最新| 日本福利二区视频| 亚洲欧美色图| 久久久草草精品| www.四虎在线| 在线啊v一区| 日韩三级在线观看网站| 97热视频在线观看| 蜜臀久久99精品久久综合| 亚洲AV成人精品网站在AV| 久久久免费懂色| 久久99国产综合精品女同| 无码精品人妻一区二区三区妖精| 伊人久久AV诱惑悠悠| 亚洲欧美一区二区不卡视频播放| 婷婷五月花| 亚洲 一区二区 自拍| 日本久久女同性恋视频| 国产久久一区二区| 久久e6只有精品| 天天日日夜夜| 国产女人91精品嗷嗷嗷嗷| 日韩欧美亚欧在线视频| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 人人操人人肉久久精品| 日韩综合第八区国产精品| 亚洲宗合电影| 少妇国产不卡| 熟妇最新先锋一二三区| 很很干很很操| 色五月网址| 久久久久久欧美精品se一二三四| 久久成人午夜精品影院| 婷婷五月综合在线| 九色视频91| www.99在线| 五月婷婷五月天| 九色 人妻 大香蕉| 97一区二区蜜臀| 精品网站9999| 天天色怡春院| 中国黄色特级精品一区二区三区片| 国产传媒1234区| 韩国女主播青草在线| 超碰综合色| 精品无码产区一区二| #NAME?| 国产97av| 国产一区二区免费福利片| 国产一区二区在线播放量| 天天做日日做| 国产乱码久久| 伊人久久蜜月| 色吧91| 欧美一级黄片视频在线| 综合色色网| 欧美色图亚洲色图成人在在线| 熟妇高潮一区二| KK色在线影院| 秋霞一集毛片观看| 国产亚洲禁久一区二区 | 97超碰美国| 久久久久久久久久久久欧美日| 亚洲欧美日韩不卡人妻| 性爱Av免费| 欧美性天天影视| av久日| 久9re热视频这里只有精品| 日韩性爱再线视频| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 国产精品一二三免费网站| 精品国产99| 久久无码精品| 国产精品青草综合久久| 国产第二页| 777琪琪午夜免费A片| 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒 | av绯色| AV老汉| 国产辣妈在线视频福利| 91女神在线视频| 欧美天天综合网| 日韩啪啪啪啪啪| 加勒比海人人操超碰在线| 欧美性爱视频免费一区一A | 国产 日韩 欧美高清| 夜夜騷av、一區二區| 日本黄大片在线观看视频| 久久久久久久久久久97| 亚洲国产熟妇综合色专区| 大香交伊人网| 香蕉99秘 一区精品蜜桃臀| 2019午夜福利视频| 亚洲超碰AV| 一区二区三区四区理论片| www.婷婷| 久久久久久亚洲Av无码精| 久久综合精品一区二区三区| 大香蕉黄色一级片免费看| 操淫穴亚洲五月丁香| 亚洲精品视频在线播放| 久久女人| 天天综合网1| 操美女高潮抽搐白浆| 欧美综合网在线| 欧美久久婷婷| 乱色视频中文字幕| 少妇一级无码精品| 麻豆区久久久久亚| WWW4虎| 天天摸夜夜添无码小视频| 久久黄黄黄| 成人女人国产| 欧美躁死她一区二区| 国产亚洲精品一区二区三区| 天天影视之亚洲综合网| 亚洲欧美天堂在线| 无码聚合| 久久成年片色大黄全免费网站| 加勒比海成人视频网| 久久色情| 萌白酱自拍视频| 蜜臀久久99精品久久久| 九99久久| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 99精品网| 国模吧 一区二区三区| 国产成人拍国产亚洲精品| 久9九综合在线| 97se综合| 清清草影| 少妇500双飞99| 精品久久久九九九孕妇| 强免费黄色网址| 美国aaaaa一级黄片| 日本孕妇一区二区视频操逼免费看| 中韩中文字幕在线观看| 亚洲色图第四色| 99re99视频在线免费观看| 精品久久在线区一区| 又大又长又爽| 日韩精品人妻中文字幕有码午| av优播| 人妻出轨一区二区三区| 97资源欧美| 97视频620| 亚洲欧洲无码一区夜| 日日日色色色色色| 久久久成人免费av电影| 丰满欧美放荡少妇在线| 天天影视之亚洲综合网| 久草毛片| 无人区高清电影免费观看一区二区三 www.qmcai2.com | 天堂8在线新版官网| 99视频精品| 一道本久久棕合爱| 97色色国产视频| 亚洲宗合网| 伊人操| 一类无码操逼视频| 99久久久久| 精品然女一区二区| 人妻少妇精品无码专区二区密桃| 91色夜| 黄片qw| 色婷久久| 欧美超碰96| julia国产在线| 欧美高清18A片| 人人摸人人叼| 国产极品999| 大香交| 性爱视频啪啪啪啪| 婷婷久草| 屁股久久久久久久久| 亚洲欧美不卡线| 粉嫩不卡一区二区性爱| 日本天堂网| 日韩精品午夜操呦呦不卡影院| a片 xxxx受爽视频| 亚洲综合色婷婷| 我中文字幕6区| 中文字幕99999| 婷婷五月综合激情| 日韩少妇在线视频| 亚洲日韩人妻中文字幕一区| 婷婷啪啪| 亚洲图片91| 开心婷婷五月| 欧美伦乱| 五月天久久久| 舔人妻中文免费视频| 亚洲av综合色区无码一| 97国产天堂岛| 免费的很黄很污的全部视频| 亚洲天堂自拍| 日日操免费视频| 韩国女主播青草在线| 明星性猛交ⅹxxx乱大交| 欧美日韩夜夜| 欧美精品精品一区二区| 二级久久网| av强奸乱轮| 天天躁夜夜躁狠狠躁AV| 日本色色色视频| 性交一区二区在线播放| 中日韩欧美精品无码AⅤ一区二区| 欧洲精品网| 丁香五月久久| 欧美97| 热久久九九热| ?亚洲伊人伊成久久人综合网| 久久久久久久9最新免费视频观看| 国产人伦a片信息免费片| 久久久九精品| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 91情色在线| 天天舔九色婷婷| 97干在线视频| 免费一级黄色录像影片| 亚洲影视高清三级-草1024榴社区入口-品爱AV| 国产伦乱91| 777琪琪午夜免费A片| 国产精品一二三| 国产精品小视频一区二区三区| 国产性爱在线视频一区二区| 夜夜精品视频一区二区| 亚洲欧美另类少妇精品| 亚洲欧美日韩综合在线尤物 | 色五月综合| 手机在线A片| 亚洲熟女诱惑| 欧美亚洲色的图| 日韩一级二级三级免费看完整版国语版| 大香蕉九九| 日韩性爱视频免费在线 | 26uuu欧美| 亚洲精品尤物yw在线影院| 亚洲风情在线观看| 欧美日本视频一区| 中文在线视频| 亚av顶级裸体一区二区三区四区五区| 99久久婷婷| 99热最新| 色爱三区| 日本在线不卡一二区| 美国一区二区免费视频| 操操逼操操逼操操逼逼| 八戒无码国产午夜福利| 亚洲欧洲成人在线电影| 97香蕉网| 97久久超碰| 中文字幕三四区| 国产在线视频午夜精华在| 精品无码欧美三级| 精品久久久av无码免费| a级免费在线观看| 亚洲一区二区三区在线激情| 啪啪性爱免费视频| 黄页视频网站野外| 91日本在线观看| 色妹子A V| 91人妻视频| 青青草中日韩在线| 天天干18禁| 大香蕉78| 国产精品久久久无码AV网站| 欧洲熟妇xxXx欧美老妇裸体| 欧美日韩国产中文精品字幕自在自线,| 国产av白丝| 日韩懂色网| 四虎精品亚洲| 日日操免费视频| 牛黄色久午久| 欧美精品双插| 蜜桃久久一区二区| 久久久99免费| 日本一级一级一级一级| 欧美大香蕉在线观看| 熟妇高潮精品一区二区三区下载| 国产视频97| 高清孕妇孕交| 熟妇操花| 亚洲AV无码久久精品蜜桃小说| 98超碰日本| 国产精品原创巨作?v网站| 丁香五月天啪啪| 秋霞一区二区三区四区五区六区七区| 久久9免费视频| 成人日韩3| 亚洲情色1区| 欧美劲爆第一页| 欧美做爰无码A片视频| 人人澡人人弄| 国产精品美女久久久久久网站| 日韩av在线播放不卡| 国产噜噜噜噜噜久久久久久久久| 国产又粗又大硬免费色网视频| 亚洲av乱伦色图网站| 日本在线15p| 干婷婷综合网| 天堂精品一区| 欧亚在线视频| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 国产女人操逼视频| 欧美Aⅴ| 色网色网色网色网色网色| 欧美人妖内射| 亚州黄站| 亚洲丨在线| 78m成人视线| 亚洲欧美黄| 日韩成人高清一区二区| 欧美国产婷婷久久| 日韩9区| 天天综合官网| 日韩一级欧美一级国产一级台湾| 少妇久久久久久久| yaouchengrenav| 精品高清一区二区三区三州| 亚洲伊人a线观看视频| 东北丰满熟女国产一区| 美国aaaaa一级黄片| 日本性爱不卡视频| 99热在线观看| 欧美后进式| 99国产天美| 久久久成人精品| 欧美日韩色| 7777奇米影视久久| 久久丁香五月天| 丝袜性亚洲| 色欧美在线| a亚洲欧美色欲| 最新日韩黄片| 欧美最婬乱婬爆婬性视频| 欧美综合制服在线| 婷婷10月天青娱乐| 日韩无码三级影院| 日韩人妻一区二区精品| 青青草视频这里只有精品| 亚洲成人妻日韩在线| 91性情| 99久久精品无码一区二区| 天天综合日韩网| 97亚洲国产| 精品久久久久久中文字幕三区| 人妻99p| 新视频sss国产| 亚洲图片欧美| 热九九精品| 色69大色97香蕉| 日本潮催一卡操| 人人摸人人干| 天天日天天干天天摸天天操| 人人干黄色| 91天天日| 欧美97| 熟女人妻av在线资源,黄色的资源| 国产性爱欧美性爱在线| 欧美人人操人人插| 欧美一二三区四五区| 熟妇一区二区| 婷婷伊人綜合中文字幕小说| 亚洲久草AV色图| 俄罗斯一区二区视频在线观看| 九九玖玖精品| 无码久久亚洲高清,| xxx亚洲午夜天堂| 91亚洲欧洲| 欧美日不卡| 亚洲高清视频在线免费观看| 五月天婷婷综合| 九九草| 夜夜嗨AV蜜臀av| 国产一区二区三区久久久精品| 黄色乱论网站| 亚洲电影中字一区二区| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 婷婷五月成人| 免费成人自拍视频在线|