1. 程式人生 > 其它 >Flask框架第四篇.Flask 中的 請求Request和session

Flask框架第四篇.Flask 中的 請求Request和session

1.Flask 中的 請求 Request

# request.method 獲取請求方式 
# request.form 獲取FormData中的資料 也就是所謂的Form標籤 to_dict()
# request.args 獲取URL中的資料 to_dict()
​
request.json    請求中 Content-Type:application/json 請求體中的資料 被序列化到 request.json 中 以字典的形式存放
request.data    請求中 Content-Type 中不包含 Form 或 FormData 保留請求體中的原始資料 b""
request.files   獲取Form中的檔案
​
request.path    請求路徑 路由地址
request.url     訪問請求的完整路徑包括 url引數
request.host    主機位 
127.0.0.1:5000 request.cookies 字典獲取瀏覽器請求時帶上的Cookie ​ # request.values 獲取 url 和 FormData 中的資料 敏感地帶(少用) from flask import Flask,request,render_template ​ app = Flask(__name__) ​ ​ @app.route("/login",methods=["GET","POST"]) def login(): #優先判斷請求方式 # 如果是 GET 請求 返回登入頁面 if request.method == "GET":
return render_template("login.html") # 如果是 POST 請求 獲取使用者名稱密碼 校驗 else: # 405 請求方式不被允許 my_file = request.files.get("my_file") filename = my_file.filename # 獲取原始檔名 file_path = os.path.join("avatar",filename) my_file.save(file_path) print(request.form.to_dict()) #
form - FormData if request.form.get("username") == "YWB": return "Login OK!"return "Login 不OK!"if __name__ == '__main__': app.run()

2.Flask 中的session(交由客戶端保管機制)

基於請求上下文管理機制

from flask import Flask, render_template, Markup, request, session, redirect
​
app = Flask(__name__)
​
# app.config["DEBUG"] = True
app.debug = True
app.secret_key = "*$%^^GGTFFFBHMHR%tfmfrjjNFfUFUF"
​
​
def war(func):
    def inner(*args,**kwargs):
        if session.get("user"):
            ret = func(*args,**kwargs)
            return ret
        else:
            return redirect("/login2")
    return inner
​
​
@app.route("/")
@war         #war(home) --> inner == home
#先要進過一次校驗,才能執行或者不執行檢視函式
def home():
    #校驗使用者登入session
    #如果session.get('user')存在,登陸成功,跳轉頁面
    return render_template("stu.html",stu=STUDENT,stu_list=STUDENT_LIST,stu_dict=STUDENT_DICT)
    # 如果不存在,返回登入
​
@app.template_global()
def ab(a,b):
    return a+b
​
@app.template_global()
def my_input(na,ty):
    s = f"<input type='submit' value='後端返回的按鈕'>"
    return Markup(s)
​
​
@app.route("/a")
def home2():
    #校驗戶登入狀態
    #校驗session中有沒有 user key
    if session.get('user'):
        inp = Markup("<input type='submit' value='後端返回的按鈕'>")
        return render_template("a.html", btn=inp)
    #校驗失敗,跳轉login
    else:
        return redirect("/login2")
    
​
@app.route("/login2",methods=["GET","POST"])
def login2():
    # 如果是Get請求
    if request.method == "GET":
        print(session.get("user"))
        #交由客戶端保管機制
        # {"user":"123"}
        # Flask理念 -- 一切從簡,為伺服器減輕壓力
return render_template("login2.html")
    else:
        user_info = request.form.to_dict()
        session["user"] = user_info.get("username")
        print(user_info)
        print(session.get('user'))
        return "login ok"if __name__ == "__main__":
    app.run("0.0.0.0",9527)