Flask处理响应内容

1、需求

        如何在不同的场景里返回不同的响应信息?

2、返回模板

使用render_template方法渲染模板并返回

例如,新建一个模板index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
我的模板html内容
<br/>{{ my_str }}
<br/>{{ my_int }}
</body>
</html>

后端视图

from flask import render_template

@app.route('/')
def index():
    mstr = 'Hello 黑马程序员'
    mint = 10
    return render_template('index.html', my_str=mstr, my_int=mint)

示例代码:

from flask import Flask, render_template

app = Flask(__name__)


@app.route('/')
def index():
    mstr = 'Hello world'
    mint = 10
    return render_template('index.html', my_str=mstr, my_int=mint)


if __name__ == '__main__':
    app.run()

运行效果:

 

示例代码2:【对上面代码稍做改变】

from flask import Flask, render_template

app = Flask(__name__)


@app.route('/')
def index():
    # mstr = 'Hello world'
    # mint = 10
    data = dict(
        my_str='Hello world',
        my_int=10
    )
    # return render_template('index.html', my_str=mstr, my_int=mint)
    return render_template('index.html', **data)


if __name__ == '__main__':
    app.run()

运行结果: 

3、重定向

示例代码:

from flask import Flask, redirect

app = Flask(__name__)


@app.route('/demo2')
def demo2():
    return redirect('http://www.baidu.com')


if __name__ == '__main__':
    app.run()

运行结果:

详见博文: Flask框架中的页面跳转和重定向(url_for,redirect)_redirect flask_IT之一小佬的博客-CSDN博客

4、返回字符串

示例代码:

from flask import Flask, jsonify

app = Flask(__name__)


@app.route('/return_str')
def return_str():
    return "return_str"


if __name__ == '__main__':
    app.run(debug=True)

运行结果:

5、返回JSON

注意:在早期的版本中,flask框架不能直接返回json字典数据,需要引入jsonify方法。在目前的高版本中,flask框架可以直接返回json字典数据,不用再次使用jsonify方法了,用不用jsonify方法返回的效果都是一样的。

示例代码1

from flask import Flask, jsonify

app = Flask(__name__)


@app.route('/json_dict')
def json_dict():
    json_dict = {
        "user_id": 10,
        "user_name": "laowang"
    }
    return json_dict


@app.route('/jsonify_dict')
def jsonify_dict():
    json_dict = {
        "user_id": 10,
        "user_name": "laowang"
    }
    return jsonify(json_dict)


if __name__ == '__main__':
    app.run(debug=True)

 运行结果:

示例代码2:

from flask import Flask, jsonify

app = Flask(__name__)

app.config['JSON_AS_ASCII'] = False


@app.route('/demo4')
def demo3():
    json_dict = {
        "user_id": 10,
        "user_name_cn": "老王",
        "user_name_en": "laowang"
    }
    return jsonify(json_dict)


if __name__ == '__main__':
    app.run(debug=True)

运行结果:

注意

        目前有的浏览器配置或插件会直接将ascii编码转为中文! 

6、自定义状态码和响应头

6.1 元祖方式

        可以返回一个元组,元组中必须至少包含一个项目,且项目应当由(response, status) 、 (response, headers) 或者 (response, status, headers) 组成。

status 值会覆盖状态代码, headers 可以是一个列表或字典,作为额外的消息标头值。

示例代码: 

from flask import Flask

app = Flask(__name__)


@app.route('/return_tuple1')
def return_tuple1():
    # TypeError: The view function did not return a valid response tuple.
    # The tuple must have the form (body, status, headers), (body, status), or (body, headers).
    return '状态码为 666',


@app.route('/return_tuple2')
def return_tuple2():
    return '状态码为 666', 666


@app.route('/return_tuple3')
def return_tuple3():
    return '状态码为 666', 666, {'name': 'dgw'}


@app.route('/return_tuple4')
def return_tuple4():
    return '状态码为 666', 666, [('name', 'dgw')]


@app.route('/return_tuple5')
def return_tuple5():
    return '状态码为 666', 666, [('name', 'dgw'), ('age', 26)]


@app.route('/return_tuple6')
def return_tuple6():
    return '状态码为 666', 666, {'name': 'dgw', 'age': 27}


@app.route('/return_tuple7')
def return_tuple7():
    # TypeError: The view function did not return a valid response. 
    # The return type must be a string, dict, tuple, Response instance, or WSGI callable, but it was a int.
    return 6666, 666


if __name__ == '__main__':
    app.run(debug=True)

运行结果: 

6.2 Response方式

示例代码:

from flask import Flask, Response

app = Flask(__name__)


@app.route('/return_response')
def return_response():
    return Response("return_response")


if __name__ == '__main__':
    app.run(debug=True)

运行结果:

6.3 make_response方式

示例代码: 

from flask import Flask, make_response

app = Flask(__name__)


@app.route('/demo5')
def demo5():
    resp = make_response('make response测试')
    resp.headers['Itcast'] = 'Python'
    resp.status = '406 not found'
    return resp


if __name__ == '__main__':
    app.run()

运行结果: 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值