• 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)
  • 相关阅读:
    纯CSS实现的很酷的卡通肖像和眨眼动效
    RMQ(区间求最值)
    CentOS---网络配置具体解释
    breakpoints &amp;&amp; lldb &#160;&amp;&amp; chisel 的使用
    c语言单链表实现
    hdu1595 find the longest of the shortest(Dijkstra)
    POJ 3254 Corn Fields 状态压缩
    我多希望我学编程时,有人教我这些事!
    tts和字符集的关系--要求源和目的端的数据库字符集必须一样,国家字符集必须一样。
    [读后感]编程能力与编程年龄
  • 原文地址:https://www.cnblogs.com/lilinyuan5474/p/15568849.html
Copyright © 2020-2023  润新知