zoukankan      html  css  js  c++  java
  • Python之Flask框架二

    今天接着上一篇继续写一篇关于flask的随笔。

    本文大纲:

    1、获取请求参数

    2、一个函数处理多个请求方式

    3、重定向

    4、错误响应

    5、全局错误处理

    6、返回json格式数据

    7、自定义返回内容状态码

    一、request获取请求参数

    复制代码
    复制代码
    from flask import Flask, request
    
    app = Flask(__name__)
    
    
    @app.route("/")
    def index():
        a = request
        #get请求
        get_data = request.args
        #form 表单
        form_data = request.form
        #json header{application/json}
        json_data = request.json
        #file
        file_data = request.files
        #同时获取args和form
        data = request.value
        method = request.method
        return a
    
    
    if __name__ == '__main__':
        app.run(debug=True)
    复制代码
    复制代码

    二、一个函数处理多个请求方式

    只需要在app.route()中定义method访问方式,并且在函数中进行相应的处理即可

    @app.route("/all_projects", methods=["GET", "POST"])
    def all_projects():
        if request.method == "GET":
            return "get"
        elif request.method == "POST":
            return "post"

    三、redirect重定向

    redirect()中传入一个参数就可以实现重定向,那就是传入url,在实际操作中我们一般会使用url_for这个方法,传入端点即可。

    端点:Url和视图函数的绑定关系,默认路由的名称,也就是这个路径绑定的函数名,可以在app.route()中传入endpoint关键字参数进行自定义端点名称。

    复制代码
    复制代码
    from flask import Flask,redirect, url_for
    app = Flask(__name__)

    @app.route("/") def index(): if request.args.get("username") is None: return redirect("/login") return redirect(url_for('login')) return "hello"

    @app.route("/login")
    def login():
    return "login"
    复制代码
    复制代码
    #后面加参数,请求的时候会自动带上这个参数
    return redirect(url_for('login', username="baijiahei"))

    四、错误响应abort()

    在一些我们可以预知的错误请求时,可以手动给出异常响应,使用时在abort()传入响应码即可,逻辑运行到这里会自动中断,在abort()中自定义了很多错误响应只需要传入响应码,就可以直接使用

    @app.route("/")
    def index():
        if request.args.get("username") is None:
            abort(401))
        return "hello"

    五、全局错误处理

    有一些我们不可预知的错误,比如404,500(服务器正在维护)等情况,我们需要对用户给出友好提示,需要做全局错误处理

    @app.errorhandler(500)
    def server_error(error):
        return render_template("error_500.html")

    使用app.errorhandler() 传入响应状态码,当出现这个错误时,会执行下方函数,在函数中我们需要一个参数来接受错误信息。

    注意:当我们定义了@app.errorhandler()之后,使用abort()时传入的响应码如果已经被定义了,则会调用,而不会继续使用abort()内置方法

    六、返回json类型数据

    这里使用了flask中的jsonify

    当我们使用了jsonify时,返回的 Content-Type: application/json,使用方法很简单传入一个json格式的数据即可

    复制代码
    复制代码
    from flask import Flask, jsonify
    
    import json
    
    app = Flask(__name__)
    
    
    @app.route("/login")
    def login():
        return jsonify(json.dumps({"code": "1"}))
    复制代码
    复制代码

    七、自定义返回内容状态码

    复制代码
    复制代码
    from flask import Flask, make_response, jsonify
    
    app = Flask(__name__)
    
    
    @app.route("/")
    def index():
        # 构造一个响应头信息  返回值, 响应码, 响应头信息{},放在字典中 状态码或者响应头可以单个不加
        # return json.dumps({"username": "白加黑"}), 201, {"content-type": "application/json"}
        # make_response 第二种形式       r  response()
        # r = make_response(json.dumps({"username": "白加黑"}), {"content-type": "application/json"})
        # r.status = "203"
        # r.content_type = "text/plain"
        # r.headers =
        # r.content_type =
        # r.mimetype =
        r = jsonify({"username": "白加黑"})
        # 修改状态码
        r.status = "202"
        return r
  • 相关阅读:
    UVa 1151 Buy or Build【最小生成树】
    UVa 216 Getting in Line【枚举排列】
    UVa 729 The Hamming Distance Problem【枚举排列】
    HDU 5214 Movie【贪心】
    HDU 5223 GCD
    POJ 1144 Network【割顶】
    UVa 11025 The broken pedometer【枚举子集】
    HDU 2515 Yanghee 的算术【找规律】
    Java基本语法
    Java环境变量,jdk和jre的区别,面向对象语言编程
  • 原文地址:https://www.cnblogs.com/congyiwei/p/13047425.html
Copyright © 2011-2022 走看看