Flask框架第四篇.Flask 中的 請求Request和session
阿新 • • 發佈:2021-11-17
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()
基於請求上下文管理機制
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)