Python+Flask框架項目Demo入門
本例子用到了 Flask+藍圖+Flask-Login+SQLAlchemy+WTForms+PyMySQL相關架構
Flask Web框架介紹
Flask是微型web框架,框架本身十分精簡,微型並不代表其功能弱,核心代碼基於Werkzeug, Jinja 2 這兩個庫,它以插件形式的進行功能擴展,且插件易於安裝與使用,並且可以自行開發擴展插件
與其他web框架類似,flask中請求(request),路由(route),響應(response)構成其完整的一個基本http流程。
flask流行的主要原因:
- 有非常齊全的官方文檔,上手非常方便
- 有非常好的拓展機制和第三方的拓展環境,工作中常見的軟件都有對應的拓展,自己動手實現拓展也很容易
- 微型框架的形式給了開發者更大的選擇空間
藍圖介紹
在Flask項目中可以用Blueprint(藍圖)實現模塊化的應用,使用藍圖可以讓應用層次更清晰,開發者更容易去維護和開發項目。藍圖將作用於相同的URL前綴的請求地址,將具有相同前綴的請求都放在一個模塊中,這樣查找問題,一看路由就很快的可以找到對應的視圖,並解決問題了。
藍圖提供模板過濾器、靜態文件、模板和其它功能
Flask擴展庫
Flask-Login庫
Flask-Login 通過 user session,提供登錄的常見任務,比如登入 (logging in)、登出 (logging out) 和當前用戶 (current user)
login_user() 函數:實現用戶的登入,一般在登入的視圖函數中調用
logout_user() 函數:實現登出功能
current_user 屬性:獲取當前用戶
對於使用者來說,如果需要頁面是授權用戶纔可見,在相應視圖函數前加上 @login_required 裝飾器進行聲明即可,@login_required 裝飾器對於未登錄用戶訪問,默認處理是重定向到 LoginManager.login_view 所指定的視圖
Flask-Script庫
提供向Flask插入外部腳本的功能,包括運行一個開發用的服務器,一個定製的Python shell,設置數據庫的腳本,cronjobs,及其他運行在web應用之外的命令行任務;使得腳本和系統分開;
Flask Script和Flask本身的工作方式類似,只需定義和添加從命令行中被Manager實例調用的命令;
WTForms表單
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是一個很強大的關係型數據庫框架,支持多種數據庫後臺。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項目代碼地址: 示例項目地址
項目運行效果截圖