国产成人欧美一区二区三区vr_久久国产精品人人爽人人爽_国产精品永久免费播放_肉欲啪啪a∨无码精品一区二区_国产超短裙jk丝袜在线_亚洲AV片高清资源在线观看_国模无码一区二区三区久久_国产成年人未进视频_中文字幕无码精品夜_一区二区三区在线视频免费看_亚洲成AV人片在线观看网址_日本激情视频高清综合久久_亚洲午夜视频福利_国内大量揄拍人妻精品視_久久国产精品福利二区三区

ARTICLE DETAIL

資訊詳情

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

Flask+SQLite學(xué)生榮譽(yù)證書(shū)管理系統(tǒng):從數(shù)據(jù)庫(kù)設(shè)計(jì)到部署

Flask+SQLite學(xué)生榮譽(yù)證書(shū)管理系統(tǒng):從數(shù)據(jù)庫(kù)設(shè)計(jì)到部署 每年獎(jiǎng)學(xué)金評(píng)定季各個(gè)學(xué)院的辦公室基本都要經(jīng)歷一場(chǎng)Excel表格帶來(lái)的災(zāi)難。幾百條證書(shū)記錄在多個(gè)文件里來(lái)回復(fù)制粘貼名字寫(xiě)法不統(tǒng)一、發(fā)證日期格式混亂、按條件統(tǒng)計(jì)時(shí)只能靠肉眼數(shù)行數(shù)。我去年幫一個(gè)學(xué)院做了這套基于Flask的學(xué)生榮譽(yù)證書(shū)管理系統(tǒng)用Python寫(xiě)成的輕量級(jí)Web應(yīng)用部署在本地就能跑徹底治好了這個(gè)老毛病。這套系統(tǒng)適合誰(shuí)用高校輔導(dǎo)員、院系教務(wù)老師、學(xué)生工作負(fù)責(zé)人以及所有想用Flask練手做web開(kāi)發(fā)的初學(xué)者。它能完成學(xué)生信息維護(hù)、榮譽(yù)證書(shū)錄入、多條件查詢、級(jí)別篩選、Excel導(dǎo)出、打印預(yù)覽這些核心功能。整個(gè)項(xiàng)目代碼量不大但一個(gè)小型管理系統(tǒng)該有的東西幾乎都覆蓋了而且完全本地部署數(shù)據(jù)不出辦公室不依賴任何外部服務(wù)。我做這類項(xiàng)目有一個(gè)原則先解決真實(shí)場(chǎng)景里的痛點(diǎn)再談技術(shù)選型。下面就把這套系統(tǒng)的完整實(shí)現(xiàn)思路、數(shù)據(jù)庫(kù)設(shè)計(jì)、核心代碼和部署過(guò)程中的坑都攤開(kāi)來(lái)講希望你能少走彎路。1. 為什么放著現(xiàn)成系統(tǒng)不用非要自己寫(xiě)一個(gè)市面上成熟的學(xué)生管理系統(tǒng)并不少但落到學(xué)院內(nèi)部管理榮譽(yù)證書(shū)這個(gè)具體場(chǎng)景時(shí)往往都不合適。要么是收費(fèi)的商業(yè)系統(tǒng)功能大到根本用不完要么部署在云端數(shù)據(jù)安全和管理責(zé)任都說(shuō)不清更多的其實(shí)是學(xué)工系統(tǒng)里附帶的一個(gè)模塊字段固定、無(wú)法自定義想按校級(jí)、省級(jí)篩選還得找開(kāi)發(fā)方提需求一等就是幾個(gè)月。Excel雖然大家都在用但多人協(xié)作、數(shù)據(jù)校驗(yàn)、按條件篩選這些事做起來(lái)非常痛苦。證書(shū)一多、年份一長(zhǎng)表格就失控了。還有人把數(shù)據(jù)存在微信聊天記錄里換個(gè)人就斷檔。我的需求其實(shí)非常樸素就六條單機(jī)或局域網(wǎng)內(nèi)直接運(yùn)行不要復(fù)雜的部署流程能錄學(xué)生、錄證書(shū)刪改要方便支持按姓名、學(xué)號(hào)、證書(shū)級(jí)別、年份組合查詢?cè)u(píng)獎(jiǎng)評(píng)優(yōu)時(shí)要能快速導(dǎo)出名單打印證書(shū)清單時(shí)頁(yè)面要好看、格式要整齊數(shù)據(jù)不能丟備份要簡(jiǎn)單選型時(shí)我沒(méi)怎么糾結(jié)直接定了Python Flask SQLite這套組合。原因很直接Flask足夠輕一個(gè)小項(xiàng)目幾十個(gè)路由寫(xiě)完不需要框架替你決定代碼結(jié)構(gòu)SQLite零配置數(shù)據(jù)庫(kù)就是一個(gè)本地文件備份時(shí)直接拷貝走人。這套組合對(duì)學(xué)院級(jí)的數(shù)據(jù)量——幾千名學(xué)生、上萬(wàn)條證書(shū)記錄——性能綽綽有余。我也對(duì)比過(guò)其他方案。Django功能全自帶Admin后臺(tái)和完整ORM但項(xiàng)目體積和學(xué)習(xí)曲線都偏重殺雞用牛刀。Node.js和PHP也能做不過(guò)對(duì)非計(jì)算機(jī)背景的維護(hù)者來(lái)說(shuō)Python的語(yǔ)法和生態(tài)更友好后面想改需求拉個(gè)懂Python的人來(lái)也更容易。Electron桌面應(yīng)用方案我也考慮過(guò)打包體積大而且本質(zhì)還是Web技術(shù)不如直接用瀏覽器訪問(wèn)來(lái)得輕量自然。這里必須說(shuō)一個(gè)核心判斷這套系統(tǒng)的最終用戶大概率不是程序員。輔導(dǎo)員、班主任不會(huì)敲命令行也不懂環(huán)境變量怎么配。所以所有設(shè)計(jì)都要圍繞非技術(shù)用戶也能操作來(lái)展開(kāi)——界面要直觀、操作要少、反饋要明確。這也直接影響了我后面寫(xiě)一鍵啟動(dòng)腳本、簡(jiǎn)化部署步驟的方式。2. 數(shù)據(jù)庫(kù)怎么設(shè)計(jì)才夠用又不返工很多初學(xué)Flask的人上手就寫(xiě)路由、寫(xiě)頁(yè)面數(shù)據(jù)庫(kù)設(shè)計(jì)拖到最后隨便弄這是典型的本末倒置。數(shù)據(jù)庫(kù)是整個(gè)系統(tǒng)的地基字段沒(méi)想清楚后面改表結(jié)構(gòu)會(huì)讓你改到懷疑人生。我在這套系統(tǒng)上第一步就是定表結(jié)構(gòu)前后用了兩個(gè)晚上反復(fù)推演才把表設(shè)計(jì)敲定。我最后的學(xué)生表設(shè)計(jì)如下字段類型說(shuō)明idINTEGER 主鍵自增IDstudent_noVARCHAR(20)學(xué)號(hào)唯一索引nameVARCHAR(50)姓名class_nameVARCHAR(50)班級(jí)majorVARCHAR(80)專業(yè)enrollment_yearINTEGER入學(xué)年份證書(shū)表設(shè)計(jì)如下字段類型說(shuō)明idINTEGER 主鍵自增IDstudent_idINTEGER 外鍵關(guān)聯(lián)學(xué)生表idcert_nameVARCHAR(120)證書(shū)名稱cert_levelVARCHAR(20)級(jí)別國(guó)家級(jí)/省級(jí)/市級(jí)/校級(jí)/院級(jí)/其他issue_dateDATE發(fā)證日期issuing_unitVARCHAR(120)發(fā)證單位cert_noVARCHAR(80)證書(shū)編號(hào)remarkTEXT備注這個(gè)設(shè)計(jì)有什么講究每一點(diǎn)都是我實(shí)際踩過(guò)坑之后換來(lái)的。學(xué)生和證書(shū)必須拆成兩張表。這是最基本的表結(jié)構(gòu)規(guī)范化。如果為了省事全塞進(jìn)一張表同一個(gè)學(xué)生有三張證書(shū)他的姓名學(xué)號(hào)就得重復(fù)三行將來(lái)改一次班級(jí)信息要同時(shí)改三行甚至更多漏改一處數(shù)據(jù)就矛盾了。拆開(kāi)后學(xué)生的公共信息只存一份證書(shū)通過(guò)student_id外鍵關(guān)聯(lián)這是關(guān)系型數(shù)據(jù)庫(kù)最經(jīng)典的建模思路。學(xué)號(hào)必須唯一。現(xiàn)實(shí)中哪怕學(xué)生重名學(xué)號(hào)也一定不同所以學(xué)號(hào)是比姓名可靠得多的身份標(biāo)識(shí)。在SQLAlchemy里給student_no加uniqueTrue錄入時(shí)重復(fù)會(huì)直接報(bào)錯(cuò)攔截。這個(gè)約束必須在數(shù)據(jù)庫(kù)層面做不能只靠應(yīng)用層判斷不然并發(fā)提交時(shí)很容易繞過(guò)檢查。級(jí)別字段用固定下拉框。評(píng)獎(jiǎng)評(píng)優(yōu)時(shí)按證書(shū)級(jí)別加權(quán)計(jì)分是剛需如果允許自由填寫(xiě)國(guó)家國(guó)家級(jí)國(guó)獎(jiǎng)三種寫(xiě)法都會(huì)出現(xiàn)在庫(kù)里統(tǒng)計(jì)時(shí)頭都大。我在表單里直接用下拉框限定幾個(gè)選項(xiàng)國(guó)家級(jí)、省級(jí)、市級(jí)、校級(jí)、院級(jí)、其他。寧可損失一點(diǎn)靈活性也要保住數(shù)據(jù)的干凈整齊。發(fā)證日期用DATE類型而不是字符串。SQLite對(duì)類型約束相對(duì)寬松但業(yè)務(wù)代碼里用日期類型能保證后續(xù)按年份篩選、按月排序時(shí)不翻車。前端表單用input typedate用戶直接在日歷控件里選后端統(tǒng)一格式化成標(biāo)準(zhǔn)日期字符串存儲(chǔ)。如果圖省事存成2024年3月這種字符串后面你想按年份分組統(tǒng)計(jì)就等著自己寫(xiě)解析邏輯吧。這套設(shè)計(jì)是夠用且不返工的平衡點(diǎn)。我沒(méi)有做單獨(dú)的權(quán)限表因?yàn)槭褂脠?chǎng)景就是辦公室局域網(wǎng)內(nèi)幾個(gè)人用信任度較高不需要角色體系。也沒(méi)有做證書(shū)圖片上傳因?yàn)榇蛴∽C書(shū)清單所需的文字信息已經(jīng)全覆蓋了。如果你要把系統(tǒng)放到全校范圍用那就必須加用戶表、登錄驗(yàn)證、操作日志和備份策略這是后話。3. Flask項(xiàng)目骨架與實(shí)踐目錄結(jié)構(gòu)、配置和啟動(dòng)這一節(jié)直接給你一套我驗(yàn)證過(guò)可直接復(fù)用的項(xiàng)目結(jié)構(gòu)照著搭就行。cert-system/ ├── app.py # Flask應(yīng)用入口所有路由 ├── models.py # SQLAlchemy模型定義 ├── requirements.txt # 依賴清單 ├── start.bat # Windows一鍵啟動(dòng)腳本 ├── certs.db # SQLite數(shù)據(jù)庫(kù)文件首次運(yùn)行自動(dòng)生成 ├── static/ │ ├── css/ │ │ ├── style.css │ │ └── print.css │ └── js/ │ └── main.js └── templates/ ├── base.html ├── index.html ├── students.html ├── student_form.html ├── certs.html ├── cert_form.html ├── cert_detail.html └── stats.html依賴清單精簡(jiǎn)到極致就三樣flask2.3.3 flask-sqlalchemy3.1.0 openpyxl3.1.2flask我鎖了2.3.3版本因?yàn)檫@是我長(zhǎng)期使用的穩(wěn)定版本插件兼容性都已經(jīng)驗(yàn)證過(guò)。openpyxl是后面Excel導(dǎo)出功能要用的先裝好。models.py里定義兩個(gè)模型代碼是這樣from flask_sqlalchemy import SQLAlchemy from datetime import datetime db SQLAlchemy() class Student(db.Model): __tablename__ students id db.Column(db.Integer, primary_keyTrue) student_no db.Column(db.String(20), uniqueTrue, nullableFalse, indexTrue) name db.Column(db.String(50), nullableFalse, indexTrue) class_name db.Column(db.String(50)) major db.Column(db.String(80)) enrollment_year db.Column(db.Integer) certificates db.relationship(Certificate, backrefstudent, lazydynamic) def __repr__(self): return fStudent {self.student_no} {self.name} class Certificate(db.Model): __tablename__ certificates id db.Column(db.Integer, primary_keyTrue) student_id db.Column(db.Integer, db.ForeignKey(students.id), nullableFalse, indexTrue) cert_name db.Column(db.String(120), nullableFalse) cert_level db.Column(db.String(20), nullableFalse) issue_date db.Column(db.Date) issuing_unit db.Column(db.String(120)) cert_no db.Column(db.String(80)) remark db.Column(db.Text) created_at db.Column(db.DateTime, defaultdatetime.now) def __repr__(self): return fCertificate {self.cert_name} {self.cert_level}這里有兩個(gè)容易忽略但很重要的點(diǎn)。一是db.relationship的backrefstudent這個(gè)反向引用讓我們能通過(guò)cert.student.name直接拿到學(xué)生的姓名省去手動(dòng)join查詢。二是indexTrue加在student_no、name、student_id這些常用作查詢條件的字段上數(shù)據(jù)量上來(lái)之后查詢性能會(huì)明顯更好——幾千條數(shù)據(jù)時(shí)感覺(jué)不到區(qū)別但養(yǎng)成良好的加索引習(xí)慣對(duì)任何規(guī)模的項(xiàng)目都有價(jià)值。app.py入口的初始化方式from flask import Flask, render_template, request, redirect, url_for, flash, send_file from models import db, Student, Certificate import io from datetime import datetime from openpyxl import Workbook from openpyxl.styles import Font from openpyxl.utils import get_column_letter app Flask(__name__) app.config[SECRET_KEY] please-change-me-to-a-random-string app.config[SQLALCHEMY_DATABASE_URI] sqlite:///certs.db app.config[SQLALCHEMY_TRACK_MODIFICATIONS] False app.config[SQLALCHEMY_ENGINE_OPTIONS] { connect_args: {timeout: 10} } db.init_app(app) with app.app_context(): db.create_all()db.create_all()必須放在app.app_context()里這是flask-sqlalchemy 3.x的標(biāo)準(zhǔn)初始化方式。老版本可以直接在模塊級(jí)別調(diào)用新版本就必須顯式創(chuàng)建應(yīng)用上下文這是初學(xué)者最容易踩的坑——運(yùn)行后一直報(bào)No such table排查半天才發(fā)現(xiàn)是因?yàn)閏reate_all()根本沒(méi)執(zhí)行。路由的寫(xiě)法遵循標(biāo)準(zhǔn)的CRUD模式。以證書(shū)錄入為例我貼一段完整代碼app.route(/certs/add, methods[GET, POST]) def add_cert(): if request.method POST: student_id request.form.get(student_id) cert_name request.form.get(cert_name) cert_level request.form.get(cert_level) issue_date_str request.form.get(issue_date) issuing_unit request.form.get(issuing_unit) cert_no request.form.get(cert_no) remark request.form.get(remark) if not student_id or not cert_name or not cert_level: flash(學(xué)生、證書(shū)名稱、級(jí)別為必填項(xiàng)) return redirect(url_for(add_cert)) issue_date None if issue_date_str: try: issue_date datetime.strptime(issue_date_str, %Y-%m-%d).date() except ValueError: flash(日期格式不正確) return redirect(url_for(add_cert)) cert Certificate( student_idint(student_id), cert_namecert_name, cert_levelcert_level, issue_dateissue_date, issuing_unitissuing_unit, cert_nocert_no, remarkremark ) db.session.add(cert) db.session.commit() flash(證書(shū)添加成功) return redirect(url_for(cert_list)) students Student.query.order_by(Student.student_no).all() return render_template(cert_form.html, studentsstudents)后端校驗(yàn)這段一定要寫(xiě)。雖然前端HTML里已經(jīng)加了required標(biāo)記但后端必須再校驗(yàn)一次——用戶不一定通過(guò)頁(yè)面提交直接構(gòu)造請(qǐng)求繞過(guò)前端校驗(yàn)的事太常見(jiàn)了。后端校驗(yàn)做得好不好直接影響數(shù)據(jù)質(zhì)量。日期處理是個(gè)隱蔽的坑。表單如果傳了空字符串datetime.strptime(, %Y-%m-%d)會(huì)直接拋異常所以我先判斷if issue_date_str再轉(zhuǎn)換。很多人一眼覺(jué)得這邏輯多余直到自己提交空日期時(shí)頁(yè)面直接500才反應(yīng)過(guò)來(lái)。這類細(xì)節(jié)就是開(kāi)發(fā)經(jīng)驗(yàn)值在起作用。證書(shū)列表頁(yè)的查詢我實(shí)現(xiàn)了三維度組合篩選app.route(/certs) def cert_list(): keyword request.args.get(keyword, ).strip() level request.args.get(level, ) year request.args.get(year, ) query Certificate.query.join(Student) if keyword: like f%{keyword}% query query.filter(db.or_( Student.name.like(like), Student.student_no.like(like), Certificate.cert_name.like(like) )) if level: query query.filter(Certificate.cert_level level) if year: query query.filter(db.extract(year, Certificate.issue_date) int(year)) certs query.order_by(Certificate.issue_date.desc()).all() total query.count() return render_template(certs.html, certscerts, totaltotal, keywordkeyword, levellevel, yearyear)db.or_把多個(gè)LIKE條件合并成一個(gè)邏輯或讓用戶輸入一個(gè)關(guān)鍵詞就能同時(shí)匹配學(xué)生姓名、學(xué)號(hào)或證書(shū)名稱。年份篩選用的db.extract(year, ...)是跨數(shù)據(jù)庫(kù)安全的標(biāo)準(zhǔn)寫(xiě)法不要在SQLite里用字符串拼接函數(shù)來(lái)做換個(gè)數(shù)據(jù)庫(kù)就失效了。開(kāi)發(fā)時(shí)我用的是VSCode Python插件配好virtualenv后F5就能啟動(dòng)調(diào)試非常順手。如果你是新手建議先花半小時(shí)把VSCode的Python環(huán)境配置調(diào)好再開(kāi)始動(dòng)手寫(xiě)代碼能省下后面大量排錯(cuò)時(shí)間。4. 前端頁(yè)面骨架與體驗(yàn)細(xì)節(jié)不需要前端框架也很能打這個(gè)系統(tǒng)的使用者是辦公室老師不是專業(yè)前端所以我的原則是界面簡(jiǎn)單、反饋清晰、操作最少。我選了Bootstrap 5的CDN來(lái)搭頁(yè)面框架沒(méi)有引入Vue、React或任何工程化工具。為什么不用前端框架因?yàn)檫@類內(nèi)部管理系統(tǒng)的核心是表單和表格全是服務(wù)端渲染的Jinja2模板就夠用了。你用Vue ElementUI當(dāng)然更強(qiáng)但項(xiàng)目復(fù)雜度會(huì)指數(shù)級(jí)上升——打包、路由、狀態(tài)管理、跨域每樣都要學(xué)最后你可能花了三天搭環(huán)境一天寫(xiě)業(yè)務(wù)性價(jià)比太低。base.html是模板繼承的根基我把它當(dāng)作全站的公共殼!DOCTYPE html html langzh-CN head meta charsetUTF-8 meta nameviewport contentwidthdevice-width, initial-scale1.0 title{% block title %}學(xué)生榮譽(yù)證書(shū)管理系統(tǒng){% endblock %}/title link hrefhttps://cdn.jsdelivr.net/npm/bootstrap5.3.0/dist/css/bootstrap.min.css relstylesheet link href{{ url_for(static, filenamecss/style.css) }} relstylesheet {% block head_extras %}{% endblock %} /head body nav classnavbar navbar-expand-lg navbar-dark bg-primary div classcontainer-fluid a classnavbar-brand href{{ url_for(index) }}榮譽(yù)證書(shū)管理系統(tǒng)/a div classnavbar-nav a classnav-link href{{ url_for(student_list) }}學(xué)生管理/a a classnav-link href{{ url_for(cert_list) }}證書(shū)管理/a a classnav-link href{{ url_for(stats) }}統(tǒng)計(jì)看板/a /div /div /nav div classcontainer mt-4 {% with messages get_flashed_messages() %} {% if messages %} {% for message in messages %} div classalert alert-success alert-dismissible fade show rolealert {{ message }} button typebutton classbtn-close>link relstylesheet href{{ url_for(static, filenamecss/print.css) }} mediaprintprint.css的內(nèi)容media print { .no-print { display: none !important; } .container { width: 100%; max-width: none; } body { background: #fff; } .cert-box { border: 2px solid #333; padding: 48px; margin: 0 auto; max-width: 780px; font-family: SimSun, 宋體, serif; } .cert-box h2 { text-align: center; margin-bottom: 24px; } .cert-meta { line-height: 2.2; } }頁(yè)面顯示時(shí)證書(shū)詳情照常展示所有內(nèi)容用戶點(diǎn)打印預(yù)覽按鈕后瀏覽器會(huì)套用media print的規(guī)則把導(dǎo)航欄、操作按鈕全部隱藏只保留證書(shū)信息和樣式化的外框。這就是最輕量的生成PDF方案——用戶自己選擇另存為PDF就得到了電子版。證書(shū)詳情模板里打印按鈕我加在.no-print容器里div classno-print mb-3 button onclickwindow.print() classbtn btn-primary打印預(yù)覽/button a href{{ url_for(cert_list) }} classbtn btn-secondary返回列表/a /div div classcert-box h2榮譽(yù)證書(shū)/h2 div classcert-meta p證書(shū)名稱{{ cert.cert_name }}/p p證書(shū)級(jí)別{{ cert.cert_level }}/p p學(xué)生姓名{{ cert.student.name }}/p p學(xué)號(hào){{ cert.student.student_no }}/p p班級(jí){{ cert.student.class_name }}/p p發(fā)證日期{{ cert.issue_date.strftime(%Y年%m月%d日) if cert.issue_date else — }}/p p發(fā)證單位{{ cert.issuing_unit or — }}/p p證書(shū)編號(hào){{ cert.cert_no or — }}/p /div /divExcel導(dǎo)出的實(shí)現(xiàn)我用了openpyxl實(shí)際代碼app.route(/certs/export) def export_certs(): # 復(fù)用與cert_list相同的查詢邏輯獲取certs keyword request.args.get(keyword, ).strip() level request.args.get(level, ) query Certificate.query.join(Student) if keyword: like f%{keyword}% query query.filter(db.or_( Student.name.like(like), Student.student_no.like(like), Certificate.cert_name.like(like) )) if level: query query.filter(Certificate.cert_level level) certs query.order_by(Certificate.issue_date.desc()).all() wb Workbook() ws wb.active ws.title 證書(shū)匯總 headers [學(xué)號(hào), 姓名, 班級(jí), 證書(shū)名稱, 級(jí)別, 發(fā)證日期, 證書(shū)編號(hào), 發(fā)證單位] ws.append(headers) for cell in ws[1]: cell.font Font(boldTrue) for c in certs: ws.append([ c.student.student_no, c.student.name, c.student.class_name, c.cert_name, c.cert_level, c.issue_date.strftime(%Y-%m-%d) if c.issue_date else , c.cert_no or , c.issuing_unit or ]) for i, header in enumerate(headers, 1): ws.column_dimensions[get_column_letter(i)].width max(12, len(header) * 2 4) buf io.BytesIO() wb.save(buf) buf.seek(0) return send_file( buf, as_attachmentTrue, download_name證書(shū)匯總.xlsx, mimetypeapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet )這段代碼看著不難但里面藏著一個(gè)我排查了很久的坑第一次導(dǎo)出時(shí)Excel文件下載下來(lái)是損壞的。原因出在buf.seek(0)這行——openpyxl保存后文件指針停在末尾send_file從當(dāng)前位置開(kāi)始讀讀出來(lái)的自然是空內(nèi)容。所以凡是把數(shù)據(jù)寫(xiě)入內(nèi)存緩沖區(qū)之后再發(fā)送的用戶都要記得先seek(0)。這個(gè)坑不寫(xiě)出來(lái)不知道還會(huì)坑多少人。導(dǎo)出文件名用中文也完全沒(méi)問(wèn)題Flask 2.x以后會(huì)自動(dòng)處理download_name的編碼不需要手動(dòng)做URL編碼或特殊轉(zhuǎn)義。在統(tǒng)計(jì)看板頁(yè)面我按證書(shū)級(jí)別做了匯總統(tǒng)計(jì)直接展示條形圖。圖形我用的是Bootstrap的進(jìn)度條組件沒(méi)引入圖表庫(kù)——幾條色塊就能直觀看出哪個(gè)級(jí)別的證書(shū)占比高。需要更精細(xì)的圖表時(shí)再接Chart.js但現(xiàn)階段真沒(méi)必要。6. 本機(jī)部署與局域網(wǎng)訪問(wèn)從開(kāi)發(fā)機(jī)到輔導(dǎo)員電腦系統(tǒng)開(kāi)發(fā)完成后我在自己電腦上跑得很歡輪到我交付給真正的用戶時(shí)遇到的問(wèn)題數(shù)量遠(yuǎn)超預(yù)期。下面每一條都是真金白銀換來(lái)的經(jīng)驗(yàn)。第一關(guān)就是Windows環(huán)境的Python安裝問(wèn)題。輔導(dǎo)員辦公室的電腦完全沒(méi)有Python環(huán)境。裝Python本身不難但安裝器里那個(gè)Add Python to PATH復(fù)選框默認(rèn)是不勾的一旦漏勾命令行里敲python就報(bào)不是內(nèi)部或外部命令寫(xiě)好的腳本完全跑不起來(lái)。這是我遠(yuǎn)程協(xié)助時(shí)遇到的最多的報(bào)錯(cuò)場(chǎng)景幾乎可以確診為Python環(huán)境配置第一坑。我的解決辦法是給非技術(shù)用戶做一鍵啟動(dòng)腳本。start.bat內(nèi)容如下echo off cd /d %~dp0 python -c import flask 2nul if errorlevel 1 ( echo 正在安裝依賴庫(kù)請(qǐng)稍候... pip install -r requirements.txt ) python app.pycd /d %~dp0是切換到腳本所在目錄避免用戶從別的路徑雙擊運(yùn)行導(dǎo)致文件找不到。腳本先檢查flask有沒(méi)有裝沒(méi)裝就自動(dòng)裝依賴裝完再啟動(dòng)應(yīng)用用戶全程只需要雙擊一下。這里我把判斷是否已安裝用python -c import flask的退出碼來(lái)判斷比挨個(gè)檢查包名清爽得多。應(yīng)用啟動(dòng)時(shí)監(jiān)聽(tīng)地址要改一下if __name__ __main__: app.run(host0.0.0.0, port5000, debugFalse)host0.0.0.0意味著監(jiān)聽(tīng)所有網(wǎng)絡(luò)接口局域網(wǎng)內(nèi)其他電腦可以通過(guò)這臺(tái)主機(jī)的IP訪問(wèn)。假設(shè)辦公室電腦的IP是192.168.1.8那別的老師瀏覽器里輸入http://192.168.1.8:5000就能打開(kāi)系統(tǒng)。注意debugTrue在這種交付場(chǎng)景必須關(guān)掉——調(diào)試模式開(kāi)著等于把遠(yuǎn)程執(zhí)行入口暴露在局域網(wǎng)里還有修改代碼后自動(dòng)重啟的行為會(huì)干擾正常使用。第二個(gè)常見(jiàn)坑是SQLite數(shù)據(jù)庫(kù)并發(fā)寫(xiě)。多個(gè)老師同時(shí)錄入數(shù)據(jù)時(shí)SQLite會(huì)報(bào)database is locked。這個(gè)系統(tǒng)的并發(fā)量很小我用一個(gè)連接超時(shí)配置來(lái)緩解就是前面SQLALCHEMY_ENGINE_OPTIONS里那個(gè)timeout: 10。它表示如果數(shù)據(jù)庫(kù)被占用最多等待10秒再嘗試而不是立刻失敗。對(duì)辦公室場(chǎng)景實(shí)測(cè)這個(gè)配置非常穩(wěn)完全夠用。第三個(gè)問(wèn)題是備份。所有數(shù)據(jù)都在certs.db這一個(gè)文件里我寫(xiě)了個(gè)說(shuō)明讓老師每周把數(shù)據(jù)庫(kù)文件拷貝到共享盤(pán)或U盤(pán)就算備份。這方案聽(tīng)起來(lái)原始但比Excel散落在各個(gè)聊天記錄里強(qiáng)太多。有些學(xué)院的老師用Excel管理學(xué)期初誤操作覆蓋掉上個(gè)學(xué)期的文件幾個(gè)星期的錄入全沒(méi)了的例子我是親眼見(jiàn)過(guò)的。數(shù)據(jù)庫(kù)文件單文件備份反而是最簡(jiǎn)單可靠的方案。如果你的需求是要在更大范圍內(nèi)使用比如整個(gè)學(xué)院同時(shí)幾十人操作那可以考慮用gunicorn Nginx部署在專用服務(wù)器上數(shù)據(jù)庫(kù)換MySQL。好消息是SQLAlchemy的ORM層把這些都抽象好了業(yè)務(wù)代碼幾乎不用改只需要把SQLALCHEMY_DATABASE_URI換成MySQL的連接串再處理一下并發(fā)事務(wù)就行。這也是當(dāng)初堅(jiān)持用ORM而不是裸SQL的最大回報(bào)。部署完后建議做一次完整驗(yàn)證清空數(shù)據(jù)庫(kù)文件重啟應(yīng)用、插入幾條測(cè)試數(shù)據(jù)、導(dǎo)出Excel、打印預(yù)覽、斷網(wǎng)重連。全部跑通后再正式錄入真實(shí)數(shù)據(jù)。這個(gè)驗(yàn)證步驟能提前發(fā)現(xiàn)大部分環(huán)境問(wèn)題別等數(shù)據(jù)錄了一半再折騰。7. 我對(duì)這類小型管理系統(tǒng)的幾條實(shí)在建議寫(xiě)完這套系統(tǒng)我復(fù)盤(pán)出了幾條經(jīng)驗(yàn)。它們不一定適合所有項(xiàng)目但對(duì)Flask小項(xiàng)目來(lái)說(shuō)應(yīng)該挺有參考價(jià)值。第一功能一定要做減法。統(tǒng)計(jì)大屏、微信消息推送、批量圖片導(dǎo)入、自動(dòng)生成評(píng)語(yǔ)——這些功能都能做但第一版千萬(wàn)不要碰。內(nèi)部管理系統(tǒng)的需求有一個(gè)規(guī)律用戶想象中的很多功能真正上線后根本沒(méi)人用。正確節(jié)奏是先做錄、查、改、刪、導(dǎo)出這五件事跑起來(lái)讓用戶實(shí)際試用根據(jù)真實(shí)反饋再加功能。我見(jiàn)過(guò)太多項(xiàng)目死在增強(qiáng)管理功能的路上。第二模型層一定要用ORM。即使只是SQLite也別裸寫(xiě)SQL。ORM的價(jià)值不僅在于省幾行代碼更在于你想換數(shù)據(jù)庫(kù)、想加字段、想改關(guān)聯(lián)關(guān)系時(shí)改造成本極低。我之前用裸SQL寫(xiě)過(guò)一個(gè)類似的工具加了幾個(gè)條件的查詢后SQL拼得像天書(shū)重構(gòu)時(shí)才體會(huì)到ORM的甜頭。第三模板繼承是必須的。base.html把導(dǎo)航欄、公共CSS、flash提示、腳本引用都包好每個(gè)頁(yè)面只寫(xiě)自己獨(dú)有的{% block content %}全站一致性和后期維護(hù)都會(huì)輕松很多。我看到不少新手把同樣的導(dǎo)航欄復(fù)制到七八個(gè)頁(yè)面里后面改個(gè)鏈接要改七八處這種苦真沒(méi)必要吃。第四字符編碼問(wèn)題要前置處理。從Python源碼到數(shù)據(jù)庫(kù)再到HTML模板全程統(tǒng)一UTF-8基本不會(huì)遇到亂碼。開(kāi)發(fā)工具、編輯器的默認(rèn)編碼都設(shè)成UTF-8數(shù)據(jù)庫(kù)里已有的亂碼數(shù)據(jù)基本都是源頭導(dǎo)入時(shí)編碼不對(duì)造成的導(dǎo)入前先確認(rèn)原始文件的編碼。這個(gè)習(xí)慣能讓你少掉一大半頭發(fā)。最后說(shuō)一下后續(xù)擴(kuò)展方向。這套系統(tǒng)目前沒(méi)有登錄功能如果你部署的環(huán)境網(wǎng)絡(luò)不安全可以考慮加一層簡(jiǎn)單的登錄驗(yàn)證——Flask-Login是現(xiàn)成的方案往現(xiàn)在的代碼里接入也不算復(fù)雜。證書(shū)圖片上傳、批量錄入、學(xué)院內(nèi)多部門(mén)數(shù)據(jù)隔離也都可以做。但我的建議還是那句話先把當(dāng)前這套用順用戶真的提了明確需求再去動(dòng)代碼否則你會(huì)一邊寫(xiě)一邊替用戶設(shè)計(jì)他根本不需要的功能。對(duì)我個(gè)人來(lái)說(shuō)這類內(nèi)部工具的技術(shù)含量不算高但它解決了一個(gè)具體場(chǎng)景里反復(fù)出現(xiàn)的真實(shí)痛點(diǎn)——從用Excel翻找一下午到輸入一個(gè)名字點(diǎn)回車所有證書(shū)記錄一秒出來(lái)這種變化是實(shí)實(shí)在在的。你的學(xué)院或部門(mén)如果有類似的需求照著這套思路搭一個(gè)出來(lái)花的時(shí)間一定比你想象中少得多。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久久亚洲熟妇资源| 亚洲国产精品有声| 99热自拍| 国产精品视频在线观看| 婷婷五月天av| 91美女小视频| 麻豆人妻少妇在线免费观看| 香港澳门日本三级网站| 91红杏| 亚洲女人91| 欧美99热| 日韩成人小视频| 抽插无码高清一区| 60秒不遮不挡| 色欧美天天| 人妻丝袜一区二区三区在线| 欧美 日韩 国产传媒| 丝袜人妻av一区二区| 啊啊啊啊嗯嗯嗯用力好爽| 校园春色宗合网| 97欧美综合网| 午夜一区二区三区国产| 欧美精品偷拍| 久热9| 国产视频一区二区三区久久亚洲天堂| 无码人妻精品酒店| 中文一区在线日| 日本国产欧美高清在线| 中文字幕后石码三区四区| 最新加勒比丝袜在线| 97在线看| 麻豆区久久久久亚| 婷婷五月天丁香花| 亚洲全色网| 91女人的网站| 国产欧美岛国精品一区| 99这里只有精品| 久久免费精彩视频| 12一15性XXXX粉嫩国产| 夜夜骑天天燥| 久久久97| 国模不卡| 国产无码久久高清| 韩国嫰模上门援交视频| 成人女人国产| 中日韩熟女| 奶水 人妻 哺乳 在线| 色五月婷婷麻豆在| 秋霞一级A片黄色视频| 超碰视97中文| 大香蕉92| 亚洲性猛| 青青国产精品在线| 国产原创精品| 手机在线看片免费人成视频| 日本中文熟女视频| 国产精品另类一区大香蕉| 久草综合京东| 久热无码| 亚洲成人日韩小说| 中文一区二区三区影院| 欧美日本成人一区二区| 日本二三四区| 午夜综合在线| av亚洲天堂资源网站| 强奸乱伦大香蕉网| a片 xxxx受爽视频| 亚洲资源网| 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒 | 美女露胸露尿口| 操逼免费视频无码国产| 久久久久九九九九| 成人性爱免费播放| 蜜乳AV.COM| 精品国产乱码久久久A| 69综合网| 亚洲永久AV无码精品秋霞| 高清无码国产亚洲| 国产精品亚洲一级av第二区| 91亚洲综合| 999九九九九国产动| 日本美女性生活久久久久久久| 国产色呦呦| 中文字幕AV乱伦| 超碰97COm中文| 97超碰超欧美。| 亚洲欧美一区二区三区在钱蜜桃| 五月丁香六月婷综合成人综合| 情趣丝袜无码操逼视频| 蜜臀久久99精品久久久久久无删减| 在线 欧美 亚洲| 日韩精品99久久久久久中文字幕| 鸥美精品一区二区久久婷婷| 青青草白白色| 亚洲色图美腿丝袜| 97天天操天天干| 中文字暮97| 96精品在线| 一区二区三区机械有限公司| 日韩av影片在线观看| a一区二区三区乱码在线| 中文视频在线观看| 伊人影院日本| 青娱乐二区免费| 婷婷综合伊人一区| 久久超碰国产一区二区三区| 视频国产欧美在线播放| 青娱乐999| 91精品人| Av手机版天堂网| 少妇一级婬片免费放一级a性色.| 日韩操逼HD| 岛国毛片手机在线观看| 国产福利精品最新在线| 97人人操人人干| 婷婷五月av| 婷婷综合视频| 午夜精品99久久久久传媒| 日韩精品99999| 亚洲天堂东京热| 久久久草成人网站久久久草成人久久久草久久久 | 亚洲中文字幕有码视频一区二区三区| 丝袜综合色图| 91人妻久久久久久久久久久久久| 中文字幕在线第二页| 九九九九九九综合| 91美女在线观看| 91综合色噜噜| 一区二区三区四区免费视频| 校园春色亚洲欧洲| 99精品丰满人妻| 美欧色综合| 97在线看| 天天色综亚洲91污| 一本久道久久综合狠狠爱| 91蜜臀熟女| 91啪9色| 成人黄页| 午夜操一操| 18禁无码永久免费无限制| 国产偷拍自拍在线视频| 一牛影视久久久一区二区三区| 欲色影视综合吧| 91视频综合在线| 91熟女网| 国产精品自在线发布| 亚洲宅男天堂| 天天操天天看| 亚洲成人黄色在线观看| 女同性恋久久| 亚洲高清内射| 欧美高清第一页| 99国产在线 精品 视频| 亚洲色图大香| 亚春色色| 国产农村一一级特黄毛片| 亚洲欧洲视频小说在线观看| 2003天天干夜夜操| 一本色道综合久久欧美| 婷婷香蕉| 天天色踪合| 欧美AB在线| 国产亲戚伦亲在线| 亚洲欧美setu| 亚洲伊人久久综合97| 欧美做爰无码A片视频| 97干天天| 久久久97| 天天射,天天操,天天爽-国内精品一区二区三区-成人AV | 午夜电影在线观看无码专区| 欧美 亚洲 制服 精品| 任你干在线视频| 激情色图| 午夜免费视频1000| 中文字幕精品专区搜索结果91| 日韩一级久久毛片| 色女女女导航| 大JI巴好深好爽又大又粗视频| 性开放中文AV高清无码免费看| 国产乱码久久| 国色综合天| 欧美性爱www免费版| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 91精品国产综合久久久蜜臀酒店| 99精品在线| 国产精彩女在线观看视频| 四虎午夜影院| 国产怡红院| 九九九999久久久网站| 口爆吞精在线观看| 男人的亚洲天堂| 看免费一级在线播放毛片| 一本道综合色图| 啊啊啊啊无码| 亚洲丝袜色| 精品一级| 久久一区无码| 国产精品福利资源在线尤物| 9/A片| 精品人妻一区二区三区四区不卡在| 婷婷99| 999精品女人| 婷婷色色五月| 91大神精品长腿在线观看网站| 午夜激情床戏激情| 亚洲啪AⅤ永久无码| 日韩精品人妻系列无码天堂| 美女午夜福利免费视频| 影音资源男人日韩| 看一级黄色视频| 嗯嗯不要视频| 夜夜爽妓女| 久久透逼视频| 色偷综合| 久久婷婷色| 国产精品99999| 熟女啪啪视频| 国产女人和拘做爰视频| 亚洲欧美91√| 婷婷激情四射| 国产无码高清操逼视频| 国产中午字一暮区| 国产人妻精品久久久一区二区三区| 亚洲丝袜综合| 裸模AV女优| 日逼视频日本| 久久精品国产精品一区| 九一性生活免费视频| 欧美日韩操逼嗦吊| 91狠狠综合| 久久欧洲| 日韩一级片在线看| 三上悠亚在线毛片91| 日韩懂色网| 中国一区二区亚洲人妻| 操国产逼| 亚洲蜜臀精品视频久久| 和协无码影院| 日本特黄f c2| 午夜久久无码1000合集| 97欧美超碰| 天天综合网1| 亚洲天堂无码| 18禁在线视频| 一区二区三区麻豆| 男人的天堂色偷偷青青草视频婷婷网| 国产精品青草综合久久| 欧美日韩不卡a片| 欧美色图20P| 大香蕉在线视频重口味毛片在线| 夜夜爽77777| 福利伊人玖玖国产| 欧美色www亚洲国产阿娇要播| 插B在线观看| 久久国产精品91| jizzjizz欧美| 亚洲无码精品AV久久久| 久久精品国产97欧美精品亚洲 | 少妇诱惑视频| 日本三级大片| 国产激情在线| 影音先锋日本一区二区| 精品九区| 91亚洲综合| 91视频女生| 国产SV一线| 日韩啪啪啪啪啪| 午夜影美女日鸡鸡天天视频国产| 国模艳艳啪啪一区| 日韩偷拍一区二区三区| 97在线免费看视频| 少妇的嫩逼图片| 色悠久久久av| 久久久久无码一妻区| 精品无码一区二区| 国语人妻精彩刺激| 欧美少妇熟女| 亚洲宅男天堂| 五月激情小说| 91九色精品熟女内射| 亚洲人妻在线一区| 无码高清操逼网址| 少妇厨房愉情理伦片bd在线观看| 久久精品熟妇丰满人妻99| 国产AV天美传媒一区二区三区| 男人久久精品| 男人的天堂无码| 天天影视射综合网| 级品肉射| 无码九九九九| 屁股久久久久久| 男同专区一区二区三区在线| 人妻第一页| 天天夜夜rb| 在线播放欧洲免费av| 亚洲色图8| 中文字幕精品三级久久久| 欲色啪| 色九九综合AV| 欧美色道啊| 蜜臀th| 人妻喷水| 97久久久久| 人人妻人人澡人人爽人人精品浪潮| 九久久精| 色姑娘综合网| 豆花视频操逼网址| 无码精品一区二区三区潘金莲| 亚洲无码国产精品久久| 国语国产操逼伊人AV网| 日韩欧美经典在线观看| 亚洲综合激情五月久久| 影音综合网| 欧美在线视频播放| 国产日韩中文字幕欧美| 精品国产乱码久久久久久网站入口| 久久久一区二区三区四区五区| 国产精品不卡一区二区三区av| 激情熟女12P| 琪琪精品免费一区二区三区| 丁香五月婷婷五月| 亚洲综合影片| 爱丝福利| 国产精品999aaa| 日韩综合成人免费视频| 激情第四色| 口爆欧美91| 欧美激色| 欧美性爱日韩高清| 人妻少妇av在线观看| 青青草视频久久| 久久综合女优| 日本不卡在线二区三区| 草草影院最新网址| www.狠狠| 久9久精品视频| 97超碰大| 一类无码操逼视频| 中亚av| 日韩淫色网| 美女黄网| 欧美极度丰满熟妇hd| 日韩在线AB| 久久中文字幕女同性恋一区| 农村女一级毛卡片| 99热亚洲| 一二三区精品视频| WWW黄片COM| 久久有码| 综合网 欧美| 口爆吞精在线观看| 国产av青草| 激情在线青青操| 又粗又长又爽在线观看| 亚洲色图久久成人| 久久久久久十| aⅴ日韩成人电影av在线免费看av大全| 你操综合| 一区二区三区高清| 噜噜吧,噜噜色,噜噜| 白 大 人妻 区 在线| 欧美在线天堂| 五月色网| 亚洲成人帖图| 亚洲午夜福利视频| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 日本天天吊| 老熟乱一区二区三区四区| 嗯啊抽插大香蕉网页| 日韩一区二区熟女| 一区二区三区视频| 精品国产一区二区三区av在线资源| 久久精品中文| av无码av无码专区| 亚洲综合 欧美| 91在线秘 男同| 久久的网站啊啊啊啊啊| 国产久久免费精品视频| 久久久久久大| 操逼A∨| 亚洲欧美校园另类春色| 超碰97丝袜| 色婷视频| 黄色工厂这里只有精品| 天天做天天爽| 欧美97超碰| 欧美午夜精品久久久久久3D| 亚洲黑人在线| 天天操女人| 欧美裸体美女日麻屄| 蜜臀久久久久久999| 97天天日| 久久av色| 男女性感激情网站| 四季av一区二区凹凸精品小说| 欧美一区二区三区日韩| 美女爽到高潮91| 99综合免费视频| 色图四区| 91狠狠综合久久久久久| 妇女性内射冈站HDWWWCOM| 天天综合网在线| 国产一区二区三三视频| 人妻超碰青青草98| www.婷婷| 色欲久久久久综合网| 97色诱| 欧美成人AⅤ大片在线观看| 夜夜免费视频| 这里有精品| 日日夜夜精品视频| 久久色一区二区| 国产精品无码在线| 色九久| 麻豆天美传媒在线视频天堂| 91小视频| 婷婷五月天色网| 亚洲欧美91√| 人妻熟女av国产网站| 在线观看啊啊啊啊啊| 日本高清有码网址视频| 人人妻人人澡人人爽久久av| 久久色激情一区二区三区| 97超碰人人模人人拍人人| 中文字幕版| 丰满高潮18xxxx| 国产午夜精品一区二区三区牛牛| 国产久久视频| 丰满高潮18xxxx| 欧美黄业| 欧美 综合 亚洲| 很很干很很操| 亚洲第一黄色av网站| 91国产丝袜白虎| 91天美传媒精品| 日韩中文字幕视频在线观看| 久久97| 国产精品乱码久久久久久| 日日夜夜干| 精品午夜福利国产一区二区在线观看| 亚洲自拍小说| 久久久久9999妇女| 男人夜色天堂ss| 亚洲精品性爱片| 天天夜夜rb| 欧美中文狠| 中文字暮97| 亚洲乱码尤物193YW| 色综合一本| 亚洲日韩97| 欧美视频激情久久久久久| www.99热| 蜜乳AV一区二区三区四| 亚洲啪啪视频免费| 啊啊啊免费| 久久禁| 操死我了嗯嗯嗯| 热久久91婷婷| 大奶啊啊好爽| 不卡啪啪视频| 国产亚洲日本精品在线| 国产精品久久妻无码网站 | A 天堂在线观看视频| 起碰97| 欧美碰碰综合色| 97在线日韩中文字幕| 福利一级版子| 91久久18禁| 91N五十路| 97天天摸天天碰| 柠檬AV导航| 操比国产| 极品白嫩美女白浆成人福利在线看| 亚洲伊人a线观看视频| 国产1024在线播放| 国产捆绑一区| 久96热在线观看视频| 啊啊啊啊操死我| 中国少妇啪啪视频| 青青久久艹| 色约约一区=区三区| 清纯唯美第一页| 欧美,日韩,中文,另类| 超碰欧美97资源| 99最新日韩偷拍视频| 超碰久在线天天做| 五月天人妻综合| WWW美腿丝袜香蕉中文| 亚洲偷拍欧美激情| 中文字幕熟女人妻丝袜丝| 人妻少妇精品无码专区二区密桃| 精品熟妇视频一区二区| 麻豆成人AV| 午夜操一操| 国产精品com| 欧美特大AA级黄片| 色伊人91| 综合一区中亚洲国产成人综合精品 | 91久久精品美女高潮喷水| com 首页 18岁 禁区 女优 免费 精选 同城 | 欧美日韩狠狠爱| 精品无吗m| 东京热男人的天堂| 日本成人A片网站| 盗摄女人妻在线| 五月丁香色色网| 亚洲熟妇自偷自拍另欧美| 九九热免费国产视频婷婷伊人五月| 人妻在线中出视频| 男人精品天堂一区| 日韩97超碰| 91综合网| 国产理论视频在线播放| 日韩午夜啪啪视频| 天天日日本| 啊啊啊啊啊啊啊啊啊在线观看| 久久大香蕉97| 日本性感人妻91| 日韩 欧美 视频 在线 一区| 亚洲麻豆精品二区三区| 亚洲熟女一区| 9久久久久| 国产绿奴视频在线观看| 婷婷五月天成人| 99www.bibizy香蕉资源国产一区二区三区高清 | 日本熟妇人妻中出视频| 97亚洲综合电影| 成人欧美日超碰| 亚洲 欧美综合| 九九精品99| 婷婷久久五月天| 久久久久ab| 91亚洲网站| 午夜操逼不卡| 超碰资源亚洲97| 天天干1区2区在线| 日韩三级在线观看网站| 大香网伊人久久综合| 97亚洲资源| 蜜臀网 一区| 亚洲1区2区三区高清中文字幕| 狠狠欧美| 日韩精品人妻中文字幕不卡乱码| 国产黄色影片在线观看| 丁香五月综合| 久久久久极品| 上海一级黄片| 熟妇熟女一区二三区| 久久亚洲一区二区色婷婷| 国产精品成人无码a v毛片| 亚洲天堂综合AV| 欧美色图小说综合| caoni国产亚洲av| 日韩欧亚太美不卡| 亚洲毛片基地专区| 99综合网| 青草伊人网| 凹凸视频在线观看伊人| 丝袜综合| 成人av福利在线观看| 天天看少妇| 久久久久久久| 色情综合网| 97国产精选| blacked精品一区国产| 丝袜无码a片| 偷拍 欧美 日韩| 91ise欧美| 久艹日日日| 成人 日韩欧美一区| 久久男人| 久碰视频| 麻豆天美91| 免费看美国人人爽,人人操| 大香蕉99999| 国产九月婷婷| 日韩肏逼视频| 4141514逼喷水三级片| 超碰97人妻| 美腿色图| 中文精品一区二去| 国产免费一区| 久久久久国产无av| 夜夜性| 久久久久久久久久久久久久久性生活视频| 久久东京热久久| 口爆综合网| 久久大黄片| 蜜臀人妻少妇久久在线观看| 精品丝袜无码一区二区三APP| 九一综合精品视品av| 亚洲成人黄色在线观看| 免费成人在线熟妇网| 欧美亚洲| 天天天干977| 国内精品999| 五月丁香六月综合缴清无码| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 一级性爱视频免费在线| 97色涩| 蜜臀操逼黄色视频操的好爽| 极品少妇久久久| 精品区9| 亚洲成人黄色在线观看| 超碰97欧美日韩| av资源在线播放天堂| 天久久久噜噜噜久久国产精品爽爽 | 日韩黄片影院| 国产AV天美传媒一区二区三区 | 亚洲偷拍欧美激情| 99精品无码| 日韩免费高清大片在线| 伊人网一本| 国产天美欧美| 国产不卡免费在线视频| 无码人妻一区二区三区四区老鸭窝| 久久久工口| 国产亚洲女v在线观看| 操一对老熟妇爽上天视频| 中文一区二区婷婷视频| 97国产高清视频在线观看| 97av在线观看| 碰超人人在线一区二区三区| 丰满欧美少妇| 老司机射| 青娱乐淫乱1314| 伊人午夜福利视频| 天天影视激情欧美| 亚洲夜夜欢无码一区二区| 999久久久免费精品国产牛牛| 欧美色图在线视频少妇| 精品久久久av| 亚洲色诱惑| 黄色av网站在线播放| 欧洲精品二区| 精品妇操一区二区三区| 久久综合18p| 国产无套粉嫩白浆在| 欧美日韩大香蕉| 青草精品视频一日本久久久久网站| 国产传媒1234区| 成人婷婷丁香| 日本精品第一视频在'| 操逼视频国产无套| 另类欧美色| 日日日日做夜夜夜夜做无码97| 爱欲AV| 夜夜爽77777| 伦理片秋霞免费影院| 成年人三级黄色片视频| 呦呦一区| 啊啊啊啊网站| 97超碰欧美精品| 国产熟女自拍| 性交一区二区在线播放| 亚洲永久AV无码精品秋霞| 99热97| 色5月婷婷| 国产懂色精品国产av| 黄色片,com| 极品综合| 国产黄色视频久久| 翔田千里A片一区二区| 国产sv美女内射| 国产精品一二三| 免费99精品国产自在在线| 超碰久久草| AV在线资源| 欧亚久久偷拍视频| 东北女人| 伊人精品视频| 伊人伊人LD| 97超级欧美| 久久久久78| 一二三四视频在线社区中文字幕| 人妻 欧美 中文| 日韩中文字幕av在线播放| 中文字幕av久久爽Av| 亚洲91亚洲| 午夜性| baiduhicn.com。| 91路www| 综合一区二区影视| 国产熟码AV| 欧美精品激情| 2020中文字幕在线观看| 国产三级片在线观看| 99热这里只有精品18| 欧美色偷偷| 2023天天操夜夜操| 亚洲天天做日日做天天谢日日| 一级婬片120分钟试看| 人人操人人舒服| 亚洲精品无码成人久久久99| 欧美日韩香蕉| 99啪啪| 国产精品老熟女一区二区| 狠狠综合网| 三级片大波波| 亭亭在线资源| 国产精品一区二区三区在线| 亚洲无线观看久久| 熟女五十路一区二区三| 动漫爆乳3D奶水一区在线观看| 91九色网| 亚洲欧美性生活| 国产偷人妻精品一区二区在线| 人妻精品一区一区三区蜜桃91| 9Ⅰ超碰| 久久久99免费| 国产亚洲国产超碰| 91在线美女| 九九九九免费高| 久操免费电影| 久久黄片国产一区二区| 色官网在线| 亚洲国产综合久久天堂| 亚洲九九爱| 淫荡网址| 欧洲一级性爱视频在线观看| 99热超碰| 久久精品女同亚洲女同13| 欧美亚洲综合高清在线| 99在线无码精品秘 入口黑人| 久久激情综合| 97精品视频免费| av影院十区| 免费?级毛片无码?∨蜜芽试看| av天堂5| 动漫片子网站3黄| 熟妇高潮二区三区| 黄色操人| 人妻久久久久久久久久久久久久久| www.99热在线只有精品| 夜夜高潮夜夜爽夜夜爱爱一区| 欧美Ⅴ性爱| 亚洲日韩成人性爱视频| 欧美熟女激情| 亚洲熟女诱惑| 97国产高清视频在线观看| 91麻豆天美国产欧美| 欧美成人国产精品| 夜夜草我| 少妇二级| 久久日韩肥臀| av日韩在线观看电影| 亚洲高清视频在线观看| 噜噜噜噜久久久精品免费| 韩国成人精品久久久免费看| 欧美日韩免费专区在线| 手机在线大香蕉| 日韩一区二区三区四区五区 | 日产狠狠干| 欧洲一区二区三区四区在线观看| 国产精品麻豆成人av| 丁香五月天社区| 欧美人妻一区二区| 国产探花精品在线| 亚洲AV无码久久精品蜜桃小说| 精品九九九九九| 99热91| 久久久久深夜无码| 黄片com.| 天天色怡春院| 精品中文字幕一区二区| 96免费视频在线| av网站免费线看| 99re3这里只有精品| 日韩一级二级三级在线不卡观看完整| 五月婷婷AV| 欧美日韩人妻精品一区二区三区| 18禁超污无遮挡无码免费网| 九九热在线精品视频| 欧美激情性久久久久久| 国产福利夜| 亚洲在线网站| 久久男人网| 亚洲精品白浆高清久久久久久| 97干色天堂| 国产精品99精品视频网站| 一区二区 日韩 欧美 国产 传媒| 97无码视频在线播放| 亚洲色图20p| 免费看片黄| 天天看片麻豆| 岛国AB视频| 日日日日做夜夜夜夜做无码97| 日韩性爱再线视频| 超碰97极品9| 久色网| 亚洲在线91| 91大神电影天堂| 熟女这里只有精品6| 成人一区二区三区四区| 久久亚洲AV无码专区国产精品| 青草视频人妻在线观看| 干婷婷综合网| 亚洲天天更新| 欧美九九99久久精品| 性饥渴少妇av无码毛片| Aa东京男人的天堂| 亚洲欧美经典一区二区| 欧美性爱一区二区| 亚洲大色堂| 欧美人妻一区| 美女诱惑久久| 人人污日韩一区二区| 在线色导航| 精品少妇一区二区| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 欧美日韩亚洲天堂| 色好看av| 国产AV高清AV无码| 91综合色| 久久久久无码一妻区| 99操| 在线岛| 国产成人五月天丁香花| 5252色欧美在线| 睡产熟女乱伦| 日韩三级伦理中文字幕| 老司机午夜福利视频一区二区| 日欧操屄视频| 97超碰人人操人人操| 蜜桃视频啊啊啊啊| 91天天日| 国语对白在线播放视频| 97超碰久久| 麻豆传媒一区二区在线观看| www.色婷婷.com| 在线观看无码三级少妇| 操久久久久| 日本一天色道久久久精品视频| 一块操欧美性爱| 成人av福利在线观看| 国产又粗又长又大的视频| 男人天堂日日夜夜| 丁香六月综合激情| 国产女人操逼视频| 精品视频在线观看精品| 色69大色97香蕉| 黑人中出21连凳花野真衣| 五月丁香色色网| 手机在线播放国产福利| 欧亚日韩一区在线| 久久亚洲日韩国产欧| 熟妇艹鸡八| 亚洲日韩一区电影| 国产一区二区在线电影| 亚洲色图尤物视频| 中文字幕一区二区视频在线观看| 日本黄色天堂| 久久久久久久久久久久黄色| 人妻AV 中文字幕的| 成年人一级黄色毛片大全在线观看| 欧美色图片| 97在线视频免费看| av日韩中文字幕| 91美女看B| 九热大香蕉| 国产精品经典一卡久久久 | 美腿色图| 日本有码久久| 天天干天天插| 色人久久| 亚洲图片偷拍视频区| 日韩色| 新久久AV| 国产成年女人免费视频播放a| 欧美日韩中文视频播放| 久操频道免费在线呗看| 骚妻少妇精品性色无码四色A V| 九一精品牛牛一区二区| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 日韩人妻有码免费视频| 一级性爱视频免费观看| 成人线上超碰| 欧美组图日韩亚洲中文字幕| 久久春色| 91综合在线| 国产精品白丝| 亚洲伊人成综合成人网| 97超碰超碰| 欧美一级在线观看成人| 久久人妻| 欧美黄色手机在线观看| 日韩欧美大片免费高清啪啪| 中国AAAAAA黄色片| 色色色日本| 日韩99精品视频综合区| 国产 日韩 欧美高清| 一本精品日本在线视频精品| 另类小说综合网| 中文精品一区二去| 国产三级多多影院2022国产AA一级毛片无码 | 淫荡熟女乱伦网| 国产精品欧美日韩久久| 人人操人人摸人| 亚洲图片偷拍视频区| 亚洲免费看片| 97久久久久久久精| 欧美少妇第一页| 粉嫩AV输入| 色97国产69香蕉| 欧美天天搞| 精品人妻视频入口| 家庭乱伦性爱av| 欧美性生活综合| 人妻少妇蜜桃视频欧美一区| 国产人伦精品一区二区三区 | 久久9 9 9精品| 亚洲欧洲无码97久久精品| 国产久久久久影院老熟女| 玖玖资源视频一区二区三区| 国色综合天| PMv在线观看| 操逼片中文| 天天干少妇| 久久最新视频免费观看| 夜夜免费视频| 亚州一区二区| 人妻少妇被猛烈进入中| 天美麻花大全视频| 伊人97色天使| 蜜乳av一区二区三区四区不卡| 91青青在线| 操啊国产| 色爱综合网| 色鬼在线综合| 香蕉国产97| 亚洲无码精品AV久久久| 男女激情黄色网址| 夜夜爽爽爽| 亚洲精品一区二区免费在线观看| 玖玖爱视频网站| 手机午夜电影神马久久| 不卡啪啪视频| 色九月综合| 男人的天堂Va| 国产成人欧美一区二区三区的国产| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 青青青操| 一摸二插三插| 久久午夜鲁丝片| 人妻av在线| 97精品综合久久网| 97天堂| 人人考人人摸人人干| 久插综合| 国产日韩久久| 九九黄色视频在线观看| 91中文精品日韩欧美在线 | 操老熟女AV| 欧美片第一页| 亚洲欧美精品91| 另类专区加勒比| 亚洲男人综合| 蜜臀av在线播放一区二区三区| 亚欧美综合网。| 国产内射爽爽大片| 99热啪啪| 日本道日本道中文字幕日本道最新日本道在线观看 | 加勒比综合九九99视频在线播放| 亚洲一区二区av| 色成人Www精品永久观看| 操我啊啊啊啊啊| 97爱亚洲| 国产激情久久久| 激情四射婷婷六月天| 天天弄天天操| 欧美丝袜激情| 91综合色噜噜| 少妇一线天久久久久久| av影院十区| 黄网色一区二区三区四区精品| 国产 大胆 对白| 免费成人在线观看91| 午夜精品99久久久久传媒| 欧美人妻制服| 五月丁香大香蕉| 97操碰| 亚洲色诱惑| 四虎精品永久在线观看| 久久久久久AV无码免费网站| 亚洲偷拍欧美激情| 日韩A优精品在线观看| 婷婷香网站| 国产91乱伦| 狠色婷婷久久一区二区三区_| 久久黄片国产一区二区| 99re9这里只有精品| 人妻二区| 在线观看A啊啊啊| 高潮的A片激情扒开一区| 日韩精品第3页| 中国一级操逼视频| 欧美激情久| 最新中文字幕精品在线| 人妻熟妇久草在线| α√在线| 欧美特黄视频网站| AV电影在线播放| 精品人妻一区二区三区鲁大师| 五月天婷婷影院| 国内一区二区免费| 欧美在线伊人色| 国产精品视频自拍在线| 成人黄页| 日韩AV一起草| 啪啪啪亚欧美视频| 欧美成人精品一区二区三区| 人妻偷拍一区二区三区| 亚洲欧洲久久天堂| 乱伦3P视频| 美女好片色日本| 东北黄色电影| 18啪啪手机免费性爱| 国产久久男人天堂| 亚洲中文字幕精品久久久久久直播| 九九精品网| 久久久久久性爱视频| 国产成人无码啪| 亚洲欧美视| 狠狠欧美| 美女尤物人人操| 97色欧洲| 欧美性后入| 亚洲AV操| 国产精品久久久久久久久久久久| 夜夜操夜夜爽夜夜高潮| 夜间福利片1000无码| 99久久久| 国产午夜福利视频在线| 婷婷激情五月天小说网| 老鸭窝成人免费毛片视频| 日日夜夜骚| 综合自拍| 欧州一区二区三区四区| 欧美青青草视频| 夜夜操二区| 国产网红精品| 亚州欧美色图| 精品中文日韩字幕视频| 超碰国产在线| 久久免费99精品久久久久久| 日韩欧美久久婷婷网站| 玖玖综合色| 日欧操屄视频| 午夜a成v人电影| 91日产桃蜜| 超碰98综合网| 久久天天性久久伊人| 欧美人妻久久精品二区三区| 97在线视频免费| 国产中文日韩欧美一区二区三区人妻丝袜美腿 | 顶级丝袜熟女一区二区三区 | AV天堂国产| 中文字幕激情小说| 男人的天堂日本东京热| 亚洲有码 视频一区| 国产精品久久久久久 百度| 亚洲第一页第二页激情| 久久精品成人| 超碰538| 欧美AB在线观看| 久久久久9| 亚洲国产精品无码AV在线| 精品人妻中文字幕高清| 欧美色图自拍| 老司机久久| 96AV久久久| 日本三级韩三级99久久| 久精品无码av一区二免费国产在线观看| 欧美国产精品久久九九| 欧日韩一二三f区| 色妇91| 亚洲欧美日韩有码| 六月婷激情福利天堂69| 国产激情视频在线观看| 久久亚洲AV无码专区国产精品| 亚洲国产一级黄色视频| 久久精品—区二区三区内射| 91麻豆天美国产欧美高潮| 婷婷15月天青娱乐| 欧美色66| 国精品一区二区三| 亚洲欧美校园另类春色| 五月色丁香| 99ri在线视频| 思思热免费视频观看| 日韩亚洲国产视频| 人人操人人操人人人操| AV乱伦专区| 秋霞一集毛片观看| 丁香色狠狠色综合久久小说| 青草一区二区| 澳门色噜噜色噜噜色噜噜色噜噜色噜噜| 女同性恋中文字幕| 91国产丝袜美女| 美女丝袜激情小说| 91男人天堂网| 蜜臀th| 日本黄色XXX| 人人摸人人舔一区二区| 人人爽夜夜玩视频| 在线五区| 青青草在线视频美女| 国产超碰欧美| 91久热| 91欧美网| 97精品网| 黄片视频观看| 欧美成熟性爱精品| 在线有码中文字幕| 精品国产Av无码久久久亚洲| 精品色色| 樱花蜜乳av| 久久同城AV| 中日高清无码操逼视频| 黄色成年| 成年男人的天堂| 亚洲密乳AV| 国产精品3| 99精品久久久久久久婷婷蜜桃| 久久精品六区| 六月婷婷五月丁香| 家庭乱伦性爱av| 人妻精品一区二区| 水澄无码AV| 国产精品白领在线观看 | 操逼啊啊啊91| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | WWW美腿丝袜香蕉中文| 亚洲国产精品无码AV在线| 色偷偷2020免费视频播放| 中文字幕五区| 成人av影院在线观看| 91制服丝袜| 草b在线| 毛片视频白嫩| 91少妇| 国产精品高潮久久AV| 中文字幕久久亚州无码| 蜜臀va69| 午夜小电影在线插入淫高潮 | 欧美色图成人网一区二区| 欧美91久久久久| 久久久精品网| 欧美aa一级片| 久久女婷| 日韩钢筋无码高清啾啾啾| 欧美一二级| 亚洲色图欧美一区二区不卡| 午夜视频好爽啊| 丁香五月婷婷基地| 99xav| 欧美性爱一区二区三区| 中文字幕天堂在线| 欧美一区二区亚洲天堂| 综合日韩激情另类图片|