本例子用到了 Flask+藍圖+Flask-Login+SQLAlchemy+WTForms+PyMySQL相關架構html
Flask是微型web框架,框架自己十分精簡,微型並不表明其功能弱,核心代碼基於Werkzeug, Jinja 2 這兩個庫,它以插件形式的進行功能擴展,且插件易於安裝與使用,而且能夠自行開發擴展插件python
與其餘web框架相似,flask中請求(request),路由(route),響應(response)構成其完整的一個基本http流程。git
flask流行的主要緣由:github
在Flask項目中能夠用Blueprint(藍圖)實現模塊化的應用,使用藍圖可讓應用層次更清晰,開發者更容易去維護和開發項目。藍圖將做用於相同的URL前綴的請求地址,將具備相同前綴的請求都放在一個模塊中,這樣查找問題,一看路由就很快的能夠找到對應的視圖,並解決問題了。web
藍圖提供模板過濾器、靜態文件、模板和其它功能sql
Flask-Login 經過 user session,提供登陸的常見任務,好比登入 (logging in)、登出 (logging out) 和當前用戶 (current user)shell
login_user() 函數:實現用戶的登入,通常在登入的視圖函數中調用數據庫
logout_user() 函數:實現登出功能flask
current_user 屬性:獲取當前用戶
對於使用者來講,若是須要頁面是受權用戶纔可見,在相應視圖函數前加上 @login_required 裝飾器進行聲明便可,@login_required 裝飾器對於未登陸用戶訪問,默認處理是重定向到 LoginManager.login_view 所指定的視圖服務器
提供向Flask插入外部腳本的功能,包括運行一個開發用的服務器,一個定製的Python shell,設置數據庫的腳本,cronjobs,及其餘運行在web應用以外的命令行任務;使得腳本和系統分開;
Flask Script和Flask自己的工做方式相似,只需定義和添加從命令行中被Manager實例調用的命令;
WTForms是一個支持多個web框架的form組件,主要用於對用戶請求數據進行驗證。
簡單代碼例子:
class Myvalidators(object): '''自定義驗證規則''' def __init__(self,message): self.message = message def __call__(self, form, field): print(field.data,"用戶輸入的信息") if field.data == "haiyan": return None raise validators.ValidationError(self.message) class LoginForm(Form): '''Form''' name = simple.StringField( label="用戶名", widget=widgets.TextInput(), validators=[ Myvalidators(message="用戶名必須是haiyan"),#也能夠自定義正則 validators.DataRequired(message="用戶名不能爲空"), validators.Length(max=8,min=3,message="用戶名長度必須大於%(max)d且小於%(min)d") ], render_kw={"class":"form-control"} #設置屬性 ) pwd = simple.PasswordField( label="密碼", validators=[ validators.DataRequired(message="密碼不能爲空"), validators.Length(max=8,min=3,message="密碼長度必須大於%(max)d且小於%(min)d"), validators.Regexp(regex="\d+",message="密碼必須是數字"), ], widget=widgets.PasswordInput(), render_kw={"class":"form-control"} ) @app.route('/login',methods=["GET","POST"]) def login(): if request.method =="GET": form = LoginForm() return render_template("login.html",form=form) else: form = LoginForm(formdata=request.form) if form.validate(): print("用戶提交的數據用過格式驗證,值爲:%s"%form.data) return "登陸成功" else: print(form.errors,"錯誤信息") return render_template("login.html",form=form)
login.html
<body> <form action="" method="post" novalidate> <p>{{ form.name.label }} {{ form.name }} {{ form.name.errors.0 }}</p> <p>{{ form.pwd.label }} {{ form.pwd }} {{ form.pwd.errors.0 }}</p> <input type="submit" value="提交"> <!--用戶名:<input type="text">--> <!--密碼:<input type="password">--> <!--<input type="submit" value="提交">--> </form> </body>
SQLAlchemy是一個很強大的關係型數據庫框架,支持多種數據庫後臺。SQLAlchemy提供了高層ORM,也提供了使用數據庫原生SQL的低層功能。
ORM:將對對象的操做轉換爲原生SQL
優勢
易用性,能夠有效減小重複SQL
性能損耗少
設計靈活,能夠輕鬆實現複雜查詢
移植性好
示例代碼
from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() class Student(db.Model): s_id = db.Column(db.Integer, primary_key=True, autoincrement=True) s_name = db.Column(db.String(16), unique=True) s_age = db.Column(db.Integer, default=1) __tablename__ = "student"
其中:
Integer表示建立的s_id字段的類型爲整形,
primary_key表示是否爲主鍵
String表示該字段爲字符串
unique表示該字段惟一
default表示默認值
autoincrement表示是否自增
github項目代碼地址: 示例項目地址
項目運行效果截圖