zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    python函数完整语法和分类
    python数据类型int、float、str、list、dict、set定义及常用方法汇总
    python语言之流程控制
    python用户交互、基本数据类型、运算符
    BZOJ 3925: [Zjoi2015] 地震后的幻想乡(概率DP)
    BZOJ 3566 概率充电器(树形概率DP)
    BZOJ 1778: [Usaco2010 Hol]Dotp 驱逐猪猡 (高斯消元)
    BZOJ 3589 动态树 (树链剖分+线段树)
    BZOJ 3672[NOI2014]购票(树链剖分+线段树维护凸包+斜率优化) + BZOJ 2402 陶陶的难题II (树链剖分+线段树维护凸包+分数规划+斜率优化)
    BZOJ 4013/Luogu P3240 [HNOI2015] 实验比较 (树形DP)
  • 原文地址:https://www.cnblogs.com/lilinyuan5474/p/15568849.html
Copyright © 2011-2022 走看看