Python之Flask框架項目Demo入門

Python+Flask框架項目Demo入門

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

Flask Web框架介紹

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

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

flask流行的主要緣由:github

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

藍圖介紹

  在Flask項目中能夠用Blueprint(藍圖)實現模塊化的應用,使用藍圖可讓應用層次更清晰,開發者更容易去維護和開發項目。藍圖將做用於相同的URL前綴的請求地址,將具備相同前綴的請求都放在一個模塊中,這樣查找問題,一看路由就很快的能夠找到對應的視圖,並解決問題了。web

  藍圖提供模板過濾器、靜態文件、模板和其它功能sql

Flask擴展庫

Flask-Login庫

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

 

項目運行效果截圖

相關文章
相關標籤/搜索