【Flask框架04-2】Flask框架之处理响应


需求

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

1 返回模板

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

例如,新建一个HTML模板 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 render_template

@app.route('/index')
def index():
    data = dict(
        my_int = 123,
        my_str = 'itcast'
    )
    return render_template('index.html',**data)

2 重定向

flask中 redirect()函数进行重定向[二次请求]

from flask import redirect

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

3 返回JSON

区别:jsonify 与 json.dumps()

​ json.dumps():仅仅是将数据转换Json格式返回,并未将响应报文里面的响应头【content-Type:application/json】

​ jsonify:转换成json格式字符串并且设置了响应头【Content-Type:application/json】

from flask import jsonify

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

4 自定义状态码和响应头

1) 元组方式

可以返回一个元组,这样的元组必须是 (response, status, headers) 的形式,且至少包含一个元素。 status 值会覆盖状态代码, headers 可以是一个列表或字典,作为额外的消息标头值。

@app.route('/demo4')
def demo4():
    # return '状态码为 666', 666
    # return '状态码为 666', 666, [('Itcast', 'Python')]
    return '状态码为 666', 666, {'Itcast': 'Python'}

2) make_response方式

from flask import make_response

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

5 代码示例

from flask import Flask,render_template,jsonify,make_response
from werkzeug.routing import BaseConverter

app = Flask(__name__)


# 普通传参
@app.route('/')
def home():
    mint = 123
    mstring = 'itcast'
    return render_template('index.html',my_str = mstring,my_int = mint)


# 字典进行传参
@app.route('/demo2')
def index():
    data = dict(
        my_int = 123,
        my_str = 'itcast'
    )
    return render_template('index.html',**data)


# 返回Json格式数据
@app.route('/demo3')
def demo3():
    json_dict = {
        "user_id": 10,
        "user_name": "laowang"
    }
    return jsonify(json_dict)


# 返回元组
# 可以返回一个元组,这样的元组必须是 (response, status, headers) 的形式,且至少包含一个元素。
@app.route('/demo4')
def demo4():
    # return '状态码为 666', 666
    # return '状态码为 666', 666, [('Itcast', 'Python')]
    return '状态码为 666', 666, {'Itcast': 'Python'}


@app.route('/demo5')
def demo5():
    resp = make_response('make response测试')
    resp.headers["Itcast"] = "Python"
    resp.status = "404 not found"
    return resp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值