日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

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

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

Flask+SQLite學(xué)生榮譽(yù)證書管理系統(tǒng):從數(shù)據(jù)庫設(shè)計(jì)到部署 每年獎(jiǎng)學(xué)金評(píng)定季各個(gè)學(xué)院的辦公室基本都要經(jīng)歷一場Excel表格帶來的災(zāi)難。幾百條證書記錄在多個(gè)文件里來回復(fù)制粘貼名字寫法不統(tǒng)一、發(fā)證日期格式混亂、按條件統(tǒng)計(jì)時(shí)只能靠肉眼數(shù)行數(shù)。我去年幫一個(gè)學(xué)院做了這套基于Flask的學(xué)生榮譽(yù)證書管理系統(tǒng)用Python寫成的輕量級(jí)Web應(yīng)用部署在本地就能跑徹底治好了這個(gè)老毛病。這套系統(tǒng)適合誰用高校輔導(dǎo)員、院系教務(wù)老師、學(xué)生工作負(fù)責(zé)人以及所有想用Flask練手做web開發(fā)的初學(xué)者。它能完成學(xué)生信息維護(hù)、榮譽(yù)證書錄入、多條件查詢、級(jí)別篩選、Excel導(dǎo)出、打印預(yù)覽這些核心功能。整個(gè)項(xiàng)目代碼量不大但一個(gè)小型管理系統(tǒng)該有的東西幾乎都覆蓋了而且完全本地部署數(shù)據(jù)不出辦公室不依賴任何外部服務(wù)。我做這類項(xiàng)目有一個(gè)原則先解決真實(shí)場景里的痛點(diǎn)再談技術(shù)選型。下面就把這套系統(tǒng)的完整實(shí)現(xiàn)思路、數(shù)據(jù)庫設(shè)計(jì)、核心代碼和部署過程中的坑都攤開來講希望你能少走彎路。1. 為什么放著現(xiàn)成系統(tǒng)不用非要自己寫一個(gè)市面上成熟的學(xué)生管理系統(tǒng)并不少但落到學(xué)院內(nèi)部管理榮譽(yù)證書這個(gè)具體場景時(shí)往往都不合適。要么是收費(fèi)的商業(yè)系統(tǒng)功能大到根本用不完要么部署在云端數(shù)據(jù)安全和管理責(zé)任都說不清更多的其實(shí)是學(xué)工系統(tǒng)里附帶的一個(gè)模塊字段固定、無法自定義想按校級(jí)、省級(jí)篩選還得找開發(fā)方提需求一等就是幾個(gè)月。Excel雖然大家都在用但多人協(xié)作、數(shù)據(jù)校驗(yàn)、按條件篩選這些事做起來非常痛苦。證書一多、年份一長表格就失控了。還有人把數(shù)據(jù)存在微信聊天記錄里換個(gè)人就斷檔。我的需求其實(shí)非常樸素就六條單機(jī)或局域網(wǎng)內(nèi)直接運(yùn)行不要復(fù)雜的部署流程能錄學(xué)生、錄證書刪改要方便支持按姓名、學(xué)號(hào)、證書級(jí)別、年份組合查詢?cè)u(píng)獎(jiǎng)評(píng)優(yōu)時(shí)要能快速導(dǎo)出名單打印證書清單時(shí)頁面要好看、格式要整齊數(shù)據(jù)不能丟備份要簡單選型時(shí)我沒怎么糾結(jié)直接定了Python Flask SQLite這套組合。原因很直接Flask足夠輕一個(gè)小項(xiàng)目幾十個(gè)路由寫完不需要框架替你決定代碼結(jié)構(gòu)SQLite零配置數(shù)據(jù)庫就是一個(gè)本地文件備份時(shí)直接拷貝走人。這套組合對(duì)學(xué)院級(jí)的數(shù)據(jù)量——幾千名學(xué)生、上萬條證書記錄——性能綽綽有余。我也對(duì)比過其他方案。Django功能全自帶Admin后臺(tái)和完整ORM但項(xiàng)目體積和學(xué)習(xí)曲線都偏重殺雞用牛刀。Node.js和PHP也能做不過對(duì)非計(jì)算機(jī)背景的維護(hù)者來說Python的語法和生態(tài)更友好后面想改需求拉個(gè)懂Python的人來也更容易。Electron桌面應(yīng)用方案我也考慮過打包體積大而且本質(zhì)還是Web技術(shù)不如直接用瀏覽器訪問來得輕量自然。這里必須說一個(gè)核心判斷這套系統(tǒng)的最終用戶大概率不是程序員。輔導(dǎo)員、班主任不會(huì)敲命令行也不懂環(huán)境變量怎么配。所以所有設(shè)計(jì)都要圍繞非技術(shù)用戶也能操作來展開——界面要直觀、操作要少、反饋要明確。這也直接影響了我后面寫一鍵啟動(dòng)腳本、簡化部署步驟的方式。2. 數(shù)據(jù)庫怎么設(shè)計(jì)才夠用又不返工很多初學(xué)Flask的人上手就寫路由、寫頁面數(shù)據(jù)庫設(shè)計(jì)拖到最后隨便弄這是典型的本末倒置。數(shù)據(jù)庫是整個(gè)系統(tǒng)的地基字段沒想清楚后面改表結(jié)構(gòu)會(huì)讓你改到懷疑人生。我在這套系統(tǒng)上第一步就是定表結(jié)構(gòu)前后用了兩個(gè)晚上反復(fù)推演才把表設(shè)計(jì)敲定。我最后的學(xué)生表設(shè)計(jì)如下字段類型說明idINTEGER 主鍵自增IDstudent_noVARCHAR(20)學(xué)號(hào)唯一索引nameVARCHAR(50)姓名class_nameVARCHAR(50)班級(jí)majorVARCHAR(80)專業(yè)enrollment_yearINTEGER入學(xué)年份證書表設(shè)計(jì)如下字段類型說明idINTEGER 主鍵自增IDstudent_idINTEGER 外鍵關(guān)聯(lián)學(xué)生表idcert_nameVARCHAR(120)證書名稱cert_levelVARCHAR(20)級(jí)別國家級(jí)/省級(jí)/市級(jí)/校級(jí)/院級(jí)/其他issue_dateDATE發(fā)證日期issuing_unitVARCHAR(120)發(fā)證單位cert_noVARCHAR(80)證書編號(hào)remarkTEXT備注這個(gè)設(shè)計(jì)有什么講究每一點(diǎn)都是我實(shí)際踩過坑之后換來的。學(xué)生和證書必須拆成兩張表。這是最基本的表結(jié)構(gòu)規(guī)范化。如果為了省事全塞進(jìn)一張表同一個(gè)學(xué)生有三張證書他的姓名學(xué)號(hào)就得重復(fù)三行將來改一次班級(jí)信息要同時(shí)改三行甚至更多漏改一處數(shù)據(jù)就矛盾了。拆開后學(xué)生的公共信息只存一份證書通過student_id外鍵關(guān)聯(lián)這是關(guān)系型數(shù)據(jù)庫最經(jīng)典的建模思路。學(xué)號(hào)必須唯一?,F(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ù)庫層面做不能只靠應(yīng)用層判斷不然并發(fā)提交時(shí)很容易繞過檢查。級(jí)別字段用固定下拉框。評(píng)獎(jiǎng)評(píng)優(yōu)時(shí)按證書級(jí)別加權(quán)計(jì)分是剛需如果允許自由填寫國家國家級(jí)國獎(jiǎng)三種寫法都會(huì)出現(xiàn)在庫里統(tǒng)計(jì)時(shí)頭都大。我在表單里直接用下拉框限定幾個(gè)選項(xiàng)國家級(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ì)就等著自己寫解析邏輯吧。這套設(shè)計(jì)是夠用且不返工的平衡點(diǎn)。我沒有做單獨(dú)的權(quán)限表因?yàn)槭褂脠鼍熬褪寝k公室局域網(wǎng)內(nèi)幾個(gè)人用信任度較高不需要角色體系。也沒有做證書圖片上傳因?yàn)榇蛴∽C書清單所需的文字信息已經(jīng)全覆蓋了。如果你要把系統(tǒng)放到全校范圍用那就必須加用戶表、登錄驗(yàn)證、操作日志和備份策略這是后話。3. Flask項(xiàng)目骨架與實(shí)踐目錄結(jié)構(gòu)、配置和啟動(dòng)這一節(jié)直接給你一套我驗(yàn)證過可直接復(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ù)庫文件首次運(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依賴清單精簡到極致就三樣flask2.3.3 flask-sqlalchemy3.1.0 openpyxl3.1.2flask我鎖了2.3.3版本因?yàn)檫@是我長期使用的穩(wěn)定版本插件兼容性都已經(jīng)驗(yàn)證過。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è)反向引用讓我們能通過cert.student.name直接拿到學(xué)生的姓名省去手動(dòng)join查詢。二是indexTrue加在student_no、name、student_id這些常用作查詢條件的字段上數(shù)據(jù)量上來之后查詢性能會(huì)明顯更好——幾千條數(shù)據(jù)時(shí)感覺不到區(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()根本沒執(zhí)行。路由的寫法遵循標(biāo)準(zhǔn)的CRUD模式。以證書錄入為例我貼一段完整代碼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é)生、證書名稱、級(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(證書添加成功) return redirect(url_for(cert_list)) students Student.query.order_by(Student.student_no).all() return render_template(cert_form.html, studentsstudents)后端校驗(yàn)這段一定要寫。雖然前端HTML里已經(jīng)加了required標(biāo)記但后端必須再校驗(yàn)一次——用戶不一定通過頁面提交直接構(gòu)造請(qǐng)求繞過前端校驗(yàn)的事太常見了。后端校驗(yàn)做得好不好直接影響數(shù)據(jù)質(zhì)量。日期處理是個(gè)隱蔽的坑。表單如果傳了空字符串datetime.strptime(, %Y-%m-%d)會(huì)直接拋異常所以我先判斷if issue_date_str再轉(zhuǎn)換。很多人一眼覺得這邏輯多余直到自己提交空日期時(shí)頁面直接500才反應(yīng)過來。這類細(xì)節(jié)就是開發(fā)經(jīng)驗(yàn)值在起作用。證書列表頁的查詢我實(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)或證書名稱。年份篩選用的db.extract(year, ...)是跨數(shù)據(jù)庫安全的標(biāo)準(zhǔn)寫法不要在SQLite里用字符串拼接函數(shù)來做換個(gè)數(shù)據(jù)庫就失效了。開發(fā)時(shí)我用的是VSCode Python插件配好virtualenv后F5就能啟動(dòng)調(diào)試非常順手。如果你是新手建議先花半小時(shí)把VSCode的Python環(huán)境配置調(diào)好再開始動(dòng)手寫代碼能省下后面大量排錯(cuò)時(shí)間。4. 前端頁面骨架與體驗(yàn)細(xì)節(jié)不需要前端框架也很能打這個(gè)系統(tǒng)的使用者是辦公室老師不是專業(yè)前端所以我的原則是界面簡單、反饋清晰、操作最少。我選了Bootstrap 5的CDN來搭頁面框架沒有引入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)境一天寫業(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ù)證書管理系統(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ù)證書管理系統(tǒng)/a div classnavbar-nav a classnav-link href{{ url_for(student_list) }}學(xué)生管理/a a classnav-link href{{ url_for(cert_list) }}證書管理/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; } }頁面顯示時(shí)證書詳情照常展示所有內(nèi)容用戶點(diǎn)打印預(yù)覽按鈕后瀏覽器會(huì)套用media print的規(guī)則把導(dǎo)航欄、操作按鈕全部隱藏只保留證書信息和樣式化的外框。這就是最輕量的生成PDF方案——用戶自己選擇另存為PDF就得到了電子版。證書詳情模板里打印按鈕我加在.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ù)證書/h2 div classcert-meta p證書名稱{{ cert.cert_name }}/p p證書級(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證書編號(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 證書匯總 headers [學(xué)號(hào), 姓名, 班級(jí), 證書名稱, 級(jí)別, 發(fā)證日期, 證書編號(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證書匯總.xlsx, mimetypeapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet )這段代碼看著不難但里面藏著一個(gè)我排查了很久的坑第一次導(dǎo)出時(shí)Excel文件下載下來是損壞的。原因出在buf.seek(0)這行——openpyxl保存后文件指針停在末尾send_file從當(dāng)前位置開始讀讀出來的自然是空內(nèi)容。所以凡是把數(shù)據(jù)寫入內(nèi)存緩沖區(qū)之后再發(fā)送的用戶都要記得先seek(0)。這個(gè)坑不寫出來不知道還會(huì)坑多少人。導(dǎo)出文件名用中文也完全沒問題Flask 2.x以后會(huì)自動(dòng)處理download_name的編碼不需要手動(dòng)做URL編碼或特殊轉(zhuǎn)義。在統(tǒng)計(jì)看板頁面我按證書級(jí)別做了匯總統(tǒng)計(jì)直接展示條形圖。圖形我用的是Bootstrap的進(jìn)度條組件沒引入圖表庫——幾條色塊就能直觀看出哪個(gè)級(jí)別的證書占比高。需要更精細(xì)的圖表時(shí)再接Chart.js但現(xiàn)階段真沒必要。6. 本機(jī)部署與局域網(wǎng)訪問從開發(fā)機(jī)到輔導(dǎo)員電腦系統(tǒng)開發(fā)完成后我在自己電腦上跑得很歡輪到我交付給真正的用戶時(shí)遇到的問題數(shù)量遠(yuǎn)超預(yù)期。下面每一條都是真金白銀換來的經(jīng)驗(yàn)。第一關(guān)就是Windows環(huán)境的Python安裝問題。輔導(dǎo)員辦公室的電腦完全沒有Python環(huán)境。裝Python本身不難但安裝器里那個(gè)Add Python to PATH復(fù)選框默認(rèn)是不勾的一旦漏勾命令行里敲python就報(bào)不是內(nèi)部或外部命令寫好的腳本完全跑不起來。這是我遠(yuǎn)程協(xié)助時(shí)遇到的最多的報(bào)錯(cuò)場景幾乎可以確診為Python環(huán)境配置第一坑。我的解決辦法是給非技術(shù)用戶做一鍵啟動(dòng)腳本。start.bat內(nèi)容如下echo off cd /d %~dp0 python -c import flask 2nul if errorlevel 1 ( echo 正在安裝依賴庫請(qǐng)稍候... pip install -r requirements.txt ) python app.pycd /d %~dp0是切換到腳本所在目錄避免用戶從別的路徑雙擊運(yùn)行導(dǎo)致文件找不到。腳本先檢查flask有沒有裝沒裝就自動(dòng)裝依賴裝完再啟動(dòng)應(yīng)用用戶全程只需要雙擊一下。這里我把判斷是否已安裝用python -c import flask的退出碼來判斷比挨個(gè)檢查包名清爽得多。應(yīng)用啟動(dòng)時(shí)監(jiān)聽地址要改一下if __name__ __main__: app.run(host0.0.0.0, port5000, debugFalse)host0.0.0.0意味著監(jiān)聽所有網(wǎng)絡(luò)接口局域網(wǎng)內(nèi)其他電腦可以通過這臺(tái)主機(jī)的IP訪問。假設(shè)辦公室電腦的IP是192.168.1.8那別的老師瀏覽器里輸入http://192.168.1.8:5000就能打開系統(tǒng)。注意debugTrue在這種交付場景必須關(guān)掉——調(diào)試模式開著等于把遠(yuǎn)程執(zhí)行入口暴露在局域網(wǎng)里還有修改代碼后自動(dòng)重啟的行為會(huì)干擾正常使用。第二個(gè)常見坑是SQLite數(shù)據(jù)庫并發(fā)寫。多個(gè)老師同時(shí)錄入數(shù)據(jù)時(shí)SQLite會(huì)報(bào)database is locked。這個(gè)系統(tǒng)的并發(fā)量很小我用一個(gè)連接超時(shí)配置來緩解就是前面SQLALCHEMY_ENGINE_OPTIONS里那個(gè)timeout: 10。它表示如果數(shù)據(jù)庫被占用最多等待10秒再嘗試而不是立刻失敗。對(duì)辦公室場景實(shí)測(cè)這個(gè)配置非常穩(wěn)完全夠用。第三個(gè)問題是備份。所有數(shù)據(jù)都在certs.db這一個(gè)文件里我寫了個(gè)說明讓老師每周把數(shù)據(jù)庫文件拷貝到共享盤或U盤就算備份。這方案聽起來原始但比Excel散落在各個(gè)聊天記錄里強(qiáng)太多。有些學(xué)院的老師用Excel管理學(xué)期初誤操作覆蓋掉上個(gè)學(xué)期的文件幾個(gè)星期的錄入全沒了的例子我是親眼見過的。數(shù)據(jù)庫文件單文件備份反而是最簡單可靠的方案。如果你的需求是要在更大范圍內(nèi)使用比如整個(gè)學(xué)院同時(shí)幾十人操作那可以考慮用gunicorn Nginx部署在專用服務(wù)器上數(shù)據(jù)庫換MySQL。好消息是SQLAlchemy的ORM層把這些都抽象好了業(yè)務(wù)代碼幾乎不用改只需要把SQLALCHEMY_DATABASE_URI換成MySQL的連接串再處理一下并發(fā)事務(wù)就行。這也是當(dāng)初堅(jiān)持用ORM而不是裸SQL的最大回報(bào)。部署完后建議做一次完整驗(yàn)證清空數(shù)據(jù)庫文件重啟應(yīng)用、插入幾條測(cè)試數(shù)據(jù)、導(dǎo)出Excel、打印預(yù)覽、斷網(wǎng)重連。全部跑通后再正式錄入真實(shí)數(shù)據(jù)。這個(gè)驗(yàn)證步驟能提前發(fā)現(xiàn)大部分環(huán)境問題別等數(shù)據(jù)錄了一半再折騰。7. 我對(duì)這類小型管理系統(tǒng)的幾條實(shí)在建議寫完這套系統(tǒng)我復(fù)盤出了幾條經(jīng)驗(yàn)。它們不一定適合所有項(xiàng)目但對(duì)Flask小項(xiàng)目來說應(yīng)該挺有參考價(jià)值。第一功能一定要做減法。統(tǒng)計(jì)大屏、微信消息推送、批量圖片導(dǎo)入、自動(dòng)生成評(píng)語——這些功能都能做但第一版千萬不要碰。內(nèi)部管理系統(tǒng)的需求有一個(gè)規(guī)律用戶想象中的很多功能真正上線后根本沒人用。正確節(jié)奏是先做錄、查、改、刪、導(dǎo)出這五件事跑起來讓用戶實(shí)際試用根據(jù)真實(shí)反饋再加功能。我見過太多項(xiàng)目死在增強(qiáng)管理功能的路上。第二模型層一定要用ORM。即使只是SQLite也別裸寫SQL。ORM的價(jià)值不僅在于省幾行代碼更在于你想換數(shù)據(jù)庫、想加字段、想改關(guān)聯(lián)關(guān)系時(shí)改造成本極低。我之前用裸SQL寫過一個(gè)類似的工具加了幾個(gè)條件的查詢后SQL拼得像天書重構(gòu)時(shí)才體會(huì)到ORM的甜頭。第三模板繼承是必須的。base.html把導(dǎo)航欄、公共CSS、flash提示、腳本引用都包好每個(gè)頁面只寫自己獨(dú)有的{% block content %}全站一致性和后期維護(hù)都會(huì)輕松很多。我看到不少新手把同樣的導(dǎo)航欄復(fù)制到七八個(gè)頁面里后面改個(gè)鏈接要改七八處這種苦真沒必要吃。第四字符編碼問題要前置處理。從Python源碼到數(shù)據(jù)庫再到HTML模板全程統(tǒng)一UTF-8基本不會(huì)遇到亂碼。開發(fā)工具、編輯器的默認(rèn)編碼都設(shè)成UTF-8數(shù)據(jù)庫里已有的亂碼數(shù)據(jù)基本都是源頭導(dǎo)入時(shí)編碼不對(duì)造成的導(dǎo)入前先確認(rèn)原始文件的編碼。這個(gè)習(xí)慣能讓你少掉一大半頭發(fā)。最后說一下后續(xù)擴(kuò)展方向。這套系統(tǒng)目前沒有登錄功能如果你部署的環(huán)境網(wǎng)絡(luò)不安全可以考慮加一層簡單的登錄驗(yàn)證——Flask-Login是現(xiàn)成的方案往現(xiàn)在的代碼里接入也不算復(fù)雜。證書圖片上傳、批量錄入、學(xué)院內(nèi)多部門數(shù)據(jù)隔離也都可以做。但我的建議還是那句話先把當(dāng)前這套用順用戶真的提了明確需求再去動(dòng)代碼否則你會(huì)一邊寫一邊替用戶設(shè)計(jì)他根本不需要的功能。對(duì)我個(gè)人來說這類內(nèi)部工具的技術(shù)含量不算高但它解決了一個(gè)具體場景里反復(fù)出現(xiàn)的真實(shí)痛點(diǎn)——從用Excel翻找一下午到輸入一個(gè)名字點(diǎn)回車所有證書記錄一秒出來這種變化是實(shí)實(shí)在在的。你的學(xué)院或部門如果有類似的需求照著這套思路搭一個(gè)出來花的時(shí)間一定比你想象中少得多。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
极品内射| 日韩精品一区的| 热久久这里只有精品| 欧美91精彩| 91色色网站| 天天流夜夜操| 国产精品在线免费| 亚洲性爱高潮影院| 欧美的精品的视频| 欧美图片偷拍| 曰韩人妻中文字幕在线| 色九九九| 综合影院永久入口国产| 欧美日韩人人精品| 亚洲欧美一区二区网址| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 屌妞视频久久久久久久久久久久 | 日逼五月天| 久草午夜| 国语人妻精彩刺激| 搞中出久久| 亚洲A色| 久久久亚洲熟妇熟女| 午夜婷婷| 亚州性色| 亚洲熟妇丝袜在线观看| 中文字幕精品一区二| 操人妻逼91| 欧美一区二区一级岛国大片| 美女黄页网站| 国产大片精久久久久久| 久草国产在线视频| 69XX一中文字幕人妻91| 成人热久久精品| 青青久久手机线视频| 欧美女同在线| 97在线免费看| 国产高清无码一区三区二区| 成人精品水蜜桃久久久久久久| 国产精品一区二区三区,亚洲综合 性开放中文AV高清无码免费看 | 天天日天天操心| 久久六六| 亚洲精品美女操逼| 午夜福利久久久噜久噜久久综合| 久久中文字幕一区不卡| 午夜精品久久久99热蜜桃的功能特点 | 亚洲国产福利视频| 蜜臀av中文字幕| 日韩成人综合网| 97爱亚洲| 欧美日韩97在线| 天美传媒一二三区永久网站| 国产精品无码在线| 69一区二区| 天操老女人| 91精品国产高清久久久久久,亚洲成人 | 国产第二页| 天美精品av| 一区二区三区在线美女| 正宗无毛一线天嫩逼| 女优免费一区二区永久| 亚洲va有码在线天堂| 水滴偷拍| 五月天亚洲网| 日本久久综合| 91综合国产精品| 日本3级一区二区免费| 日韩成人性日韩成人性爱视频在线免费观看| 久久亚洲熟妇在线视频| 亚洲男人天堂Av| 国产一区在线观看无码AV| 熟女少妇视频| 蜜桃久久一区| 99蜜桃臀亚洲成人在线观看| 人妻天堂综合网| 脫衣舞一区二区三区| 东京热综合久久一区二区| 久久有码| 韩日男人的天堂| 成人性爱电影网| 综合欧美激情网| 精品人妻中文字幕高清| 色欲久久99国产精品久久久久久| 欧日韩一二三f区| 天天干天天日天天射黄色片| 中文字幕av色| 激激五月| 综精品久久久aaaa| 99成人| 国产热RE99久久6国产精品首| 911av网站免费观看| 好色综合| 精品无码欧美三级| 九七超碰| 亚洲少妇在线观看| 久久人妻| 亚洲美女AV无码| 久热精品在线| 亚洲啪啪综合?v一区综合精品区| 美女t无毒不卡不卡| 天天射夜夜| 少妇三P| 亚洲欧洲无码97久久精品| 精品国产乱码久久久久久影片| 五月婷婷激情综合| 五月丁香网站| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 97干天天| 亚州男人的天堂| 欧美亚洲美少妇一区二区| 五月天伊人| 精品国产一区二区三区久久久蜜臀| 亚洲色图大香| 天天影视激情欧美| 好看的91视频| www.91视频网| 久久久久久久免费A片国产成a人亚洲精∨品无码 | 女同亚洲欧美一二三区久久电影| 久久发布国产伦子伦精品| 国产原创精品| 欧美永久激情一区二区| 天天内射| 欧美97se| 日本一级真人黄色性爱视频| 2024年最新色情网站在线观看| 97超碰久久| 超清中文乱码字幕| 色色福利| 五月婷婷丁香六月| 九九十八精品| 久操网在线| 97色欧洲| 秋霞网无码| 18啪啪手机免费性爱| 国产亚洲色婷婷久久99精品91葵花宝典| 亚洲精品中文字幕一区在线视频| 亚洲图片欧美在线视频| 亚洲国产综合久久久性感熟妇| 日韩美女高潮喷水视频| 欧美日韩中文字幕不卡| 免费观看国产小粉嫩喷水精品午| 成片免费观看视频大全| 欧美AB在线观看| 激情小说亚洲视频| 又大又大又大又粗爽高潮观看 | 婷婷激情四射| 天天草夜夜草高潮片| 国产精品老师| 久久只有精品一区二区三区| 精品二区三四区五电影 | 亚洲激情欧美色图 | 日韩一级二级三级在线不卡观看完整| 乱伦a片视频| 亚洲中文字幕av| 欧美日韩国第一区| 208天天久久九九九| …亚洲黄色厕厕女女在线播…| 91精品微拍福利| 国产农村一一级特黄毛片| 97亚洲综合电影| 久久熟女久| 久久免费少妇| 亚洲AV永久无码一区仙野| 蜜臀亚洲中文| 久久久久久加勒比| 十八禁啪啦拍视频无遮挡| 亚洲第一页欧美| 台湾佬大香蕉| 无色无码| 曰本91情色| 欧美第二页| 一级特级aaaa毛片免费观看| 国产盗摄美女如厕大神作品在线观看| 亚洲情色综合| 欧美色图天堂在线| 欧美色91| 激情av| 亚洲欧美日韩国产丝袜自拍中文| 亚洲无线观看久久| 五月婷婷六月丁香| 久久三区四区| 亚洲精品精品一区二区| 人妻色情天天操| 国产精品永久免费10000| 中文字幕日韩国产传媒欧美精品| 欧美 日韩第一性色| 高清在线不卡一区二区 视频| 五月丁香激情啪啪| 啊啊啊轻点在线观看| 国产成人99久久亚洲综合| 五月天综合| 久久久久久99999国产精品| 小日子操bb在线看| 麻豆一区二区三区精品| 日本色色视频网站| 色九九九综合| 乱欲一区二区| 91天天爽| 久久久久婷婷| 亚洲综合首页| 大香蕉在线视频重口味毛片在线| 丁香九月 婷婷| 亚洲自拍一区夜夜操| 国产主播福利| 成人片视频| 天天激情综合站| 国产精品久久久蜜臀| 17c嫩草51久久91嫩草| 亚洲中文字幕有码视频一区二区三区| 日韩性爱小视频| 日韩欧亚太美不卡| 人妻啪| 好舒服视频| 啪啪啪精品视频| 拍拍拍拍大尺度黄色三级片拍拍拍拍拍照 | 骚货 中文字幕 av| 操操碰| 久久夜夜| 欧美日韩国产电影| 91精品人妻电影| 中文字幕欧美日本乱码一线二线| 91干熟女| 国产农村妇女精品| 啊啊啊好舒服好爽啊啊啊视频| 1级黄色夫妻对换性交免费看| 97这里只精品| 曰韩av中文字幕专区| 99re视频在线播放青草| 91骚妇| 白嫩国模丰满一二三区| 神马麻豆福利院| 成人综合网 欧美| 先锋色眉乱伦资源| 欧美美女视频| 中文熟女五十乱码在线| 嗯……啊…嗯嗯…啊…好舒服| 国产精品原创巨作?v网站| 裸体美女久久久| 97碰在线视频| 激情小说图片亚洲首页| av橘色网站| 九九天堂| 国产亲戚伦亲在线| 免费精品国偷自产在线在线| 夜夜春夜夜操| 午夜精品久久久99| 中日高清无码操逼视频| 男女啪啪啪18禁网站| 久啪| www鬼畜国产男人的天堂| 尤物黄色在线观看网站| 九九九热| 青青草原香蕉日本Ap| av情色影音| 日本欧美国内在线| h4610国产人妻| 亚欧洲日韩国产精品| 97欧美精品综合| 六月丁香五月婷婷| 日本一级二级三级网站| 98人妻精品一区二区色欲| 欧美专区17页| 亚洲自拍一区夜夜操| 曰韩精品九九无码| 国产 日韩 另类 视频一区爱| 日本中文熟女视频| 99re视频在线播放青草| 无码人妻系列少妇| 国产青青美女玩逼视频| 蜜桃久久久久久久| 开心激情站| 簧片免费看视频| 日韩黄片视频试看| 午夜福利免费福利视频| 天天综合网91入口| 日本操逼视频免费| 日韩电影天堂视频一区二区| 五月婷婷激情网| 97在线精品观看视频| 91九九九逼| 午夜精品人妻二区三区| 三级特黄60分钟播放| 69超碰综合| 日韩成人人妻网站| 免费操逼视频下载| 91无摭挡| 插欧洲美女欧美精品| 欧色性第一页| av天堂精品久久| 操九九九九九九| 9久热这里只有精品| 中文字幕精品区先锋资源| 中出789在线视频| 亚洲欧美国产va在线播放频| 不卡九肏| 久久久精品中文字幕爱豆| 欧洲Au麻豆| 亚洲色狠| 精品小视频在线| 国产午夜福利专区综合| 天天干人妻| 色乱二区| 蜜臀久久久99久久久久 | 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 国产精品99久久久www| 久操影视| 成人情色一区二区| 欧美成年人性爱视频免费观看| 亚洲不卡不卡中文字幕不卡 | 亚洲黄网在哪免费看| 亚洲91射| 97人妻色| 日本色色视频网站| 人妻色情天天操| 国产亚洲色婷婷久久99精品91| 亚洲欧美碰碰| 亚洲射综合网| 91狼人| 91日产桃蜜| 9/A片| 中国AAAAAA黄色片| 97爱啪| 大香蕉人妻| 一区二区三| 啊啊啊好舒服好爽啊啊啊视频| 国产精品人人爽人人做可爱福利| 97超级色碰碰| 国产污视频麻豆传媒一区二区 | 91女优在线观看 | 精品人妻一区二区免费蜜桃| 色一色综合网| aaa亚无码专区| 亚洲男人综合网| 亚洲精品视频在线播放| 色哟哟综合| 欧美成人国产精品| 荡小穴在线观看| 亚洲第一黄色av网站| 一卡二卡三卡| 日韩久久艹| 亚洲一区中文字幕一区| 国产精品熟女九色九色蜜臀| 欧美碰碰综合色| 青青草啪啪网| 99综合视频一体| 亚瑟国产精品久久无码| 揉揉日日日日| 久久超碰av在线| 超碰亚洲欧美日韩无| 93人人操人人| 国产精品成人AV片免费看网站| 午夜毛片高清免费不卡| 69人妻人人揉人人躁人人精品| 黄色一级视| 国产欧美在线观看免费观看| 三四中文字幕| 国产97在线播放| 亚洲AV不卡在线观看尤物| 私色综合网| 91色婷婷综合久久中文字幕二区| 久久九九国产精品| 亚洲综合一区二区| 操逼免费视频无码国产| 夜夜操青青草| 精品丝袜无码一区二区三APP| 亚洲熟女诱惑| 日日不卡av| 亚欧洲一区二区视频| 人人污日韩一区二区| 少妇一线天久久久久久| 另类在线| 亚洲精品视频在线| 亚洲中文字幕网| 极品尤物女神在线观看| 精品欧美А∨无码黑人大荫蒂| 啪啪视频免费在线观看| 色色毛片| 强奸乱伦AV一天堂网| 久久系列| 91美女视频在线观看| 久九九九九九九九热| 后入日本1234| 成人精品久久| 色悠悠伊人网五月天| 日韩欧美麻豆| 欧美日综合| 欧美96在线|欧| 五月天人妻综合| 久久久成人免费av电影| 久久久三区二区一区| 久久久9 9 9精品| 亚洲欧美综合网站| 欧美第五页| 久久婷婷苹果| 91亚洲情色| 亚洲色图图片| 国产亚洲日韩欧| 国产成人午夜视频网址| 国产网红精品| 91久久婷婷| 人妻熟女字幕一区二区| 亚洲国产一区二区三区在线| 少妇500双飞99| 足交视频老司机| 国产欧洲精品亚洲午夜拍精品| 四虎影视永久在线观看精品免费网站| 91N综合网| 亚洲精品97| 亚洲乱色熟女一区| 五月婷婷爱六月丁香色| Av色五月| 五月天欧美色图| 男人天堂2019| 少妇啪啪自拍| 婷婷啪啪| 一区| 97天天| 中文字幕黄片在线| 久久五月丁香| 日韩噜噜69| 国产尤物在线三区| av在线播放国产一区| 人人插人人搞人人操| 十八禁网站在线| 亚洲男人天堂2013| 五十路熟女人妻一区二区在线观看| 成人自拍三级在线观看| 99在线精品观看99| 欧美国产有色电影| 搡老女人老91二区| 久久精品国产亚洲AV片多多| 旡码电影特区| 97中文热色| 人妻 中文 日韩| www鬼畜国产男人的天堂| 黑人干亚洲| 草草草视频在线免费看| 67914亚洲精品| 色哟哟1区2区| 国模不卡| 亚洲永久永久永久永久一级一级一级精品 | 91精品国久久久久久无码| 96久久久久久久| 日韩人妻一二三区视频| 任我爽视频在线观看| 蜜臀AV一区二区三区| 丁香九月 婷婷| 亚洲精品久| 男人的天堂视频精品乱在线| 免费毛片在线播放| 综合网亚洲1| 911av网站免费观看| 人人妻人人操人人乐| 中出91视频| 亚洲古典另类欧美在线| 亚洲精品 欧美精品| 欧美日韩大香蕉| 久久久爆乳翘臀一线天伦理视频| 久久99干一本高清| 久久久com| 18禁久久| 92人人操人人| 东北女人性交| www.99视频| 色婷婷日韩精品一区二区三区| 性开放中文AV高清无码免费看| 久久欧洲| 少妇一区二区三区高速| 91黑丝美女| 飘花国产午夜精品不卡| 久久人妇| 亚洲超碰AV| 亚洲国产亚洲天堂| 欧美久久伊人| 少妇大屁屁| 狠狠干狠狠干| 91春色| 热天堂一区二区| 国产内射爽爽大片| 99热 按摩 日韩| 无码逼| 夜夜夜夜爽| 久久一区二区三区入口| 久久久久久久91| 黄色网址久久精品欧美喷水| 涩综合导航| 亚洲性猛交| 97国产高清视频在线观看| 热久久无毒不卡| 色婷婷小说| 国产女大学生AV| 熟女中出视频| 激情久久久| 人妻精品一区二区| 欧美内射少妇| 在线观看黄色电话| 男人综合网| 1区2区3区中文字幕日韩| 一级黄色视频网| 97在线播放| 亚洲精品久久久久久久久豆丁网| 情趣丝袜无码操逼视频| 久肏视频字幕| 区一在线观看| 亚洲黄色网址视频| 国产农村妇女精品| 大香蕉伊然在亚洲91| 婷婷尹人大香蕉免费| 日本性爱视频一级| 久久久涩| 国产女同性恋视频| 狠狠穞A片一區二區三區| 秋霞Av理论一级在线| 精品无码一区二区人妻久久蜜桃| 婷婷日韩一区二区三区中文字幕在线| 久操凹凸视频| 97干在线| 亚春色色| 人人噜夜夜操| 亚 欧 美 综合| 51一区二区三区| dy888午夜老子影视达达兔| 中文久久96| 国产女上位好爽在线| 天堂中文资源在线bt| 丁香色狠狠色综合久久小说| 后入合集| 国产精品在线一区二区| 玖玖爱一区在线| 翘臀vidoes| 色9999日韩国产| 免费无码国产精品v片在线观看| 天天cao在线| 精品综合久久久久久97| 国产精品视频播放| 在线视频一区二区传媒| 熟女丰满人妻一区| 婷婷丁香六月| 操一区| 亚洲一区二区精品福利| 国产一级不卡在线观看| 久久欲| 国产乱伦视频污| 97在线免费看视频| 欧美色另类| 99色热| 熟女91网| 99热线麻豆| 男女香蕉一区二区| 久久久久久裸体| 91 亚洲情侣偷拍 久久| 丰满精品人妻少妇久久字幕| 大香蕉伊在线久草麻豆天堂故事| 中文字幕亚洲欧美在线不卡| 福利偷拍视频-中文字幕2019国语完整视频大全-S91AV | 久久九七| 欧美午夜视频| 成人在线午夜视频一区| 97干综合网| 日日骚精品视频| 夜夜 中文视频rt| 欧美亚洲se91| 综合九九| 国产国产亚洲一二三久久| 88在线一区二区三区| 日韩综合第八区国产精品| 91青青| 中文字幕三四五区| 亚洲最新Av| 欧美激情性久久久久久| 在线A日本| 不卡啪啪视频| 色综合91| 少妇与黑人高潮在线| 综合网久久| 国产精品一级二级在线| 欧美日综合| 极品色| 亚洲色欲天天天堂色欲网女| 国人欧美精品一区二区| 亚洲人人操| 国产乱婷婷精品二区三区| 精品国产72| 欧美亚洲清纯| 91色综合| 欧美亚洲尤物久久| 99久热| 青青草视频久久久久| 久久久久921| 精…码一二三区| 午夜视频久久久久一区| 国产18精品亚洲精品| 亚洲美乱| 死我十八禁| 亚洲色图欧美一区二区不卡| 国产黄片在线免费观看| 亚洲色天堂日韩中| 欧美传媒一区| 日韩亚洲欧美中文字幕| 激情视屏国产乱伦强奸| 欧美另类色图片| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊 | av网站在线看| 色综合尤物| 中文字幕乱碼在线| 国产精品农村妇女| av网页一区二区三区| 男人天堂2012| 国产熟女高潮一区二区三区| 三级日韩一区二区三区| 天天色粽合合合合合合合| 欧美在线55555| 久久超碰97| 亚洲欧美国产其他二区| 97视频620| 天天综合欧美| 91精品国产高清久久久久久,亚洲成人| 久久久久国产亚洲一区欧美色图日韩| 欧美图片色五月天| 久久成人午夜精品影院| 超碰激情808| 人妻丝袜一区二区三区在线| 日韩av在线免费网站| 久久97资源 网| 97在线视频免费观看| 欧美啪啪女女| www.成人无码| 在线中文字幕极品av| 啊啊啊97视频| 澳门黄片一香蕉视频| 嗯嗯啊中文字幕| 国产91 丝袜在线播放| 日韩丝袜二区| 国产精品国产| 在线v中文字幕一区二区三区| 亚洲区限制级| 性爱免费视频成人| 亚洲色图国产另类| 无码外流操逼视频| 欧美日本天堂| 天天操天天干一区二区| 五十路熟女工口| 操操操五月天婷婷丁香影院| 很黄很污的免费网站| 天天看天天日天天操| 91国产精品熟女| 天美传媒精品一区二区| 97资源超碰| 精品视频在线观看精品| 欧美天天综| 午夜视频久久久久一区| 国产精品视频| 激情综合二| 台湾佬中文娱乐网久久久久久久久久com | 色婷婷丁香五月| 熟妇女伦乱视频| 熟女啪啪视频| 无码人妻一区二区三区色欲aⅴ | 日本欧美一区二区三区视频麻豆| 东京成人一区| 亚洲成人久久一区二区| 国产自啪精品视频网站黑丝| 日韩性爱网址| 夜夜精品视频| 蜜臀AV成人精品蜜臀| 黄色网址在线免费观看| 日本一卡二区在线| 夜夜爽爽爽| 亚洲日韩视频二区| 天天天操天天天爱| 亚洲男人bt天堂| 超碰精品日韩欧美国产| 国产成人精品午夜福利| 激情小说五月天| 啪啪视频免费在线观看| 亚州日韩97| 超碰人妻在线| 18禁无码永久免费无限制| 屁股久久久久久久久| 九九色综合| 国产精品4p在线观看| 亚洲人码13| 欧美另类色图片| 免费人成在线观看网站品爱网| 超碰色美女| 蜜桃精品一区二区三区ww| 亚洲精品尤物yw在线影院| 成人资源中文字幕在线观看| 91人妻视频在线| 国产白嫩漂亮KTV在线| 欧色网址| 色天堂在线观看| 日韩欧美女优电影| 国产小黄片在线免费观看| 91精品老女人| 台湾佬中文娱乐网久久久久久久久久com | 91欧洲入口| 欧美性爱一内片一区二区三区| 亚洲 欧美 手机在线观看| 欧美色网| 东京男人天堂| 国产精品天干天干综合网麻豆| 欧美色图天堂在线| 精品国产www久久| 一级性爱视频免费观看| 91天美免费| 99re在线视频国产| 亚洲网自拍| 920日本午夜免费| 久久久无码av精| 无遮挡又黄又刺激的视频| 天天久久久久久| 日本孕妇孕交| 成人热久久精品| 久操高青| 97超碰国产亚洲精品资源| 欧美网站免费| 操高情无码| 亚洲阿v天堂无码z2018| 国产乱伦视频污| 大奶的诱惑| 日本大香蕉综合网红本杳社区| 久久久91福利姬| 精国久久一区二区三区98| 偷拍超碰| 妇女视频网站| 亚洲综合影片| 玖玖爱综合| 丰满少妇人妻久久久久久| 91美女丝袜诱惑视频| 久99久视频| 97综合在线| 色婷婷av在线观看| 丁香五月AV| 婷婷九月| 麻豆国产尤物AV| 麻豆久久久一区二区| 欧美色五月| 久久99热这里只频精品6学生| 色播五月婷婷| 亚洲91极品| 东北夫妻性偷拍| 国产九九久久久精品| AV一二区| 久久久久ab| 欧美综合网1| 国内外毛片在线观看| 国产超碰97| 亚洲 欧美 第一页| 98久久| 亚洲欧洲av影音| 黄片qw| 国产亚洲精品农村妇女| 日韩探花精品在线视频| 成人免费不卡在线视频| 桃花色涩综合影院| 69超碰综合| 熟妇熟女一区二三区| 亚洲成人福利电影免费| aaa亚无码专区| 美女高潮视频91| 精品 码产区一区二-1080P高清在线www-B029AV | 在线一道啪| 日韩中文字幕二区| 欧美美女自慰一区二区三区| 97爱欧美| 韩国嫰模上门援交视频| 狠狠爱夜夜| 天天看精品动漫视频一区| 手机在线中文字幕国产| 欧美性爱伊人| 旡码电影特区| 麻豆天美在线喷水AV| 97在线公开视频| 牛牛AV人人夜夜澡人人爽| 淫荡少妇免费| 日韩一级二级| 天天舔天天日天天射| 撸无码不卡免费视频| 一区二区三区免费视频入口| 国产理论视频在线播放| 色五月激情网| 日韩欧亚中文在线| 日日摸日日碰夜夜爽视频| 日本精品网站在线中文| 五月丁香影视| 在线观看视频91| 91少妇人妻| 国产色精品午夜大片| 天天影视综合网欧美精品| 啊啊啊啊好疼视频| www.av家庭乱伦| 国产成人无码久久精品| 91中文精品日韩欧美在线| 亚洲黄色电影| 亚洲精品影视老司机| 97视频观看| 色97欧美| av网页一区二区三区| 精品网站9999| 青娱乐黄色录像| 操高情无码| 麻豆天美传媒在线视频天堂| 78精品| 亚洲女毛多水多21P| 春色校园综合网| 欧美性爱一区二区三区| 欧美日韩国产中文精品字幕自在自线| 嗯嗯啊啊操死我| 欧美日韩狠狠爱| 老司机射| 久久久久久久久久久久九| 人人搞人人插人人操| 五月天激情小说| 97精品人妻一二三四| 国产专区第一页| AV天堂男人的天堂| 国产无码精品久久久久久| 99激情| 黑人精品欧美一区二区蜜桃| xxx0国产在线播放| 欧美国产一区二区三区麻豆传媒| 综合久久久久久久久91| 日韩情色视频| 97久久超碰| 色蜜AV| 屁股久久久久久久久久| 99re视频在线观看这里只有精品| 精品少妇一区二区| 久久东京国产精品视频| 人妻另类| 狼人久草| 青草一区二区| 深夜啪啪啪视频免费| 少妇淫妇久久久久久久| 青青草日韩无码| 2017天天操| 女色视频社区| а√天堂资源官网在线资源| 中文有码第五页| 国产又黄又粗的视频| 自拍二页| 亚洲高清无码在线桃色| 蜜臀无码一区二区| 久久东京国产精品视频| 欧美大的香蕉有线电视视频| 人人天天欧洲| 国产肏逼网站| 日韩精品电影| www…国产操逼| 9久久久久久| 97色在线观看| 黄色人人| 一摸二插三插| 色色色综合| 黄色免费网| 超碰97在线色男人??| 操逼网站地址| 久久精品国产亚洲AV先锋| 亚洲精品欧美专业| 精品一区二区综合熟妇| 欧美性高潮在线| 韩国女主播青草福利视频| 91亚洲色人| 淫穴高潮色图| 偷拍伦理视频| 日本欧美韩国国产在线| 91男人综合| 成人影 天天操 亚洲| 丰满人妻一区二区三区四区| 99少妇| 亚洲欧美另类少妇精品| 另类小色呦| 97爱爱| 99日免费视频中文字幕| 久久香蕉国产传媒一区剧情天美| 国产Av超碰| 欧美综合色图片| 熟女在线视频| 国产精品99久久久www| 91视频精品| 夜夜高潮夜夜爽国产伦精品| 久久e6只有精品| 果冻国产精品麻豆成人av| 老熟妇乱轮| 欧美肥臀在线| 四虎国产成人精品免费一女五男| www.91色| 自拍偷拍 高清无码| 国产精品福利视频| 97超碰欧美手机在线| 精品人妻夜夜草| 色色色99| 中文字幕亚洲热播人妻| 欧美影院一区二区三区| 91男人综合| 欧美亚洲美少妇一区二区| 久久一二三四五六七八九区区区 | 五月久久HDAV| 亚洲精品国产精品乱码不99| 国产精品爱欲| 久久专区| 久久久久久久91| 99精品在线| 免费超碰97久久| 亚洲熟妇熟在线电影视频| 久久久久成人蜜桃精品| 偷看洗澡一二三区美女| 免费在线黄片视频| 欧美日韩性爱电影在线| 成人线上超碰| 懂色Av一区二区三区| 久草毛片| 啊啊啊好疼| 自拍亚洲综合| 天堂射| 玖玖爱一区在线| 日少妇亚洲版| 999久久久久久久精| 国产精品老熟女一区二区| 一起草av| 欧美日韩国产在线| 五月天开心网| 婷婷丁香六月| 99这里有精品视频| 99热最新| 丁香五月影院| 婷婷五月天AV| 婷婷综合| 首页亚洲国产高跟丝袜诱惑视频| 色吧综合网| 色色色综合网| 发朗少妇买婬全视频中文| 人妻少妇久久久| 久久人妻丝袜一区二区三| 日韩高潮一区| 97色伦欧美| 久久这里都是精品| 麻豆区99999| 超碰99热中文字幕| 亚av顶级裸体一区二区三区四区五区| 亚洲激情色片| 天天射夜夜| 天天爽入口| 天天天肏屄肏屄肏屄欧美欧美| 校园激情狠狠四射| 欧美色图20p| 欧美片第一页| 国产成年女人免费视频播放a| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 黑人粗大V S日韩女优视频| 久久精品女同亚洲女同13| 国产精品午夜福利| 亚州综合色| 免费一级性爱久久| 嫩草影院在线观看精品| 99ri精品| 无码91| 中文字幕人乱码中文字的预防方法 | 999久久久免费精品国产牛牛| 久久久久久久久久久免费精品 | 骚熟女AV网| 2017天天拍大香蕉| 亚洲黄色视频在线观看视频| 亚洲欧美综合区自拍另类| 我要看免费韩日黄片| 91久久精品国产| 在线一区| 夜夜欢天天干| 2020中文在线一区二区三区| 丁香五月激情综合国产| 美日韩一卡二卡三卡免费人妻精品| 人人澡综合涩| 少妇大屁屁| 韩日色费| 国产伦精品一区二区三区在线观| 国产高清1234区| 欧美亚洲se91| 欧美亚洲首页| 欧美午夜视频免费观看| 超碰免费在线| 日韩无码AB| 男人的天堂一区| 被男人添B超爽视频| 日本三级大片| 九区国产| 国产深喉视频一区二区| 日韩乱伦影音先锋| 97国产色综合| 久久激情视频| 日本性爱欧美性爱| 又大又白奶子| 97欧美久久久久久久| 国产无码久久高清| 操91| 国产后入清纯| 国产福利一区二| 久9热| 九九av| 精品国产91内射久久| AV 少妇 人妻 偷拍| 日日干夜夜欢| 影音先锋乱伦资源| 91超碰人人| 久久久久女教师免费一区 | 亚洲色图欧美色图制服诱惑| 放黄片放3级黄片没穿衣服| 亚洲最大无码中文字幕网站| 五十路二区在线| 最新无码国产| 大香蕉操久久| 肥佬影院91| 色牛牛AV| 97天天在线| 日本一级婬片试看三分钟| 中文字幕在线观看第二页| 欧美 亚洲| 丁香色婷婷| 色欧美色交综合| 成年人性爱日韩| 亚洲精品1区| www亚洲免费| 国产精品色哟哟| 思思久热在线精品66| 大奶啊啊好爽| 91丝袜视频在线观看| 丁香五月天啪啪| 亚州,欧美在线| 亚洲国产午夜真人一级片中文字幕精品黄网站| 蜜桃不卡一区二区| 五月天婷婷在线看| 亚州色站 日韩电影| 精品人妻中文字幕高清| 日韩美女久久一区二区三区| 久操视频在线观看| 老鸭窝亚洲毛片| 少妇久久久久久| 九九久久久久久爱| 国产拍偷精品网站| 午夜天堂精品久久| 国产成人99久久亚洲综合| 蜜臀99999| 操逼免费视频无码国产| 国产1727欧美| 欧美性爱一级操| 97爱爱官网| 五月丁香网站| 超碰97人妻在线| 一区中文字幕二区日韩| 国产精品ⅴ无码大片在线看.| 人妻 欧美 中文| 国产网站在线播放| 亚欧操逼片在线观看| 99热精品在线在线| 欧美色偷偷| av午夜玫瑰| 无码操逼网| 干b网| 国产欧美伊人| 色在线综合| 日韩97视频| 亚洲国产第一页综合视频| 欧美综合网| 欧美成人综合| 日韩去日本高清在| 天天肏视频| 大香蕉在线视频重口味毛片在线| 亚洲最大成人a毛毛片| 色噜噜人妻av中文字幕| 久热色情精品| 51一区二区三区| 久久黄人人爽视频| 东北女人| 色婷视频| 午夜福利1区2区3区| 精品二区三四区五电影 | 激情文学小说一区二区 | 性色A∨91| 男人的天堂VA在线| 色五月大香蕉| 天天谢天天干| 97视频播放| 午夜精品久久久久| 97人人干| av在线不卡一区二区三区| 殴美性天天| 久久伦理视频久久大香蕉视频| 丁香五月社区| 欧美操逼熟女| 久久久少妇| 国产日韩中文字幕欧美| 刺激性视频黄页| 影音先锋国产精品| 一区二区三区亚洲| 91欧美综合| 人妻少妇久久| 国产美女91视频| 先锋精品av色鲁| 成人5码视频| 操操操五月天婷婷丁香影院| 久久日韩肥臀| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 六九九九| 亚洲超碰AV| 美国精品国产精品| 狠狠91| 巨乳特殊服务按摩| 亚洲 无码 有码 中文字幕| 爽爽爽免费视频| 999在线电影香蕉| 中日高清无码操逼视频| 18禁中文字幕| 97超碰磁| 懂色Av| 色妇综合网| 人妻少妇无码| 国产麻豆一区二三区| 丝袜视频一区二区在线播放国产中文| 狠狠中文字幕| 狠狠穞A片一區二區三區| 国产树林里野战在线看| 日本不卡高清视频| 五月天久久综合网| 国产成人亚洲精品无码最新在线| 2017天天拍大香蕉| 欧美欧美少妇| 欧美精品系列| 日本久久久久久久久久| 97爱啪| 天天躁夜夜躁狠狠躁AV| 欧美在线色| 五月天加勒比啪| 国产久久一区二区| 亚洲AV不卡在线观看尤物| 91夜夜蜜桃臀1区2区3区| 亚洲美欧999| 综合网欧| 青青草手机在线免费观看| 久久亚洲天天做| 欧美熟妇操操视频| 日本东京热大香蕉a片| 中出20p| 91 国产丝袜在线放观看| 久久手机好看网站| 亚洲情色五月天| 性色avv| 日韩AV一区二区三区三州三州| 国产不卡精品91| 红桃视频高潮| 黄色不卡视频| 日本高清加勒比| 国产精品色| 欧美在线电影| 熟女人妻一区二区三区免费看| 屁股久久久久久久久久| 蜜臀99久久精品久久久懂爱| A 天堂| 操逼天美3区| 懂色AV蜜臀无码精品APP| 中文字幕一区日韩精|