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""
    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)