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()
基于请求上下文管理机制
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"" return Markup(s) ? ? @app.route("/a") def home2(): #校验户登录状态 #校验session中有没有 user key if session.get('user'): inp = Markup("") 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)