Python之Flask框架項目Demo入門

Python+Flask框架項目Demo入門

  本例子用到了 Flask+藍圖+Flask-Login+SQLAlchemy+WTForms+PyMySQL相關架構

Flask Web框架介紹

  Flask是微型web框架,框架本身十分精簡,微型並不代表其功能弱,核心代碼基於Werkzeug, Jinja 2 這兩個庫,它以插件形式的進行功能擴展,且插件易於安裝與使用,並且可以自行開發擴展插件

與其他web框架類似,flask中請求(request),路由(route),響應(response)構成其完整的一個基本http流程。

flask流行的主要原因:

  1. 有非常齊全的官方文檔,上手非常方便
  2. 有非常好的拓展機制和第三方的拓展環境,工作中常見的軟件都有對應的拓展,自己動手實現拓展也很容易
  3. 微型框架的形式給了開發者更大的選擇空間

藍圖介紹

  在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項目代碼地址: 示例項目地址

 

項目運行效果截圖

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章