Flask学习_06_处理响应

处理响应

flask的请求信息都在request

from flask import Flask, request
request.method  提交的方法
request.args  get请求提及的数据  类似字典类型
request.form   post请求提交的数据  类似字典类型
request.values  post和get提交的数据总和  类似字段类型
request.cookies  客户端所带的cookie
request.headers  请求头
request.path     不带域名,请求路径
request.full_path  不带域名,带参数的请求路径
request.script_root  
request.url           带域名带参数的请求路径
request.base_url      带域名请求路径
request.url_root      域名
request.host_url      域名
request.host          127.0.0.1:500
request.files

响应相关信息

四种响应方式

from flask import Flask, request, render_template, redirect, jsonify
 
return "字符串"
return render_template('html模板路径',**{})
return redirect('/index.html')
return jsonify({'k1':'v1'})
  • 返回 JSON

  • 重定向

    url_for

  • 返回模板

  • 自定义状态码

返回JSON

在使用 Flask 写一个接口时候需要给客户端返回 JSON 数据,在 Flask 中可以直接使用 jsonify 生成一个 JSON 的响应

# 返回JSON
@app.route('/demo4')
def demo4():
    json_dict = {
        "user_id": 10,
        "user_name": "laowang"
    }
    return jsonify(json_dict)

不推荐使用 json.dumps 转成 JSON 字符串直接返回,因为返回的数据要符合 HTTP 协议规范,如果是 JSON 需要指定 content-type:application/json

重定向(redirect)

  • 重定向到 黑马 官网
# 重定向
@app.route('/demo5')
def demo5():
    return redirect('http://www.itheima.com')
  • 重定向到自己写的视图函数
    • 可以直接填写自己 url 路径
    • 也可以使用 url_for 生成指定视图函数所对应的 url
@app.route('/demo1')
def demo1():
    return 'demo1'

# 重定向
@app.route('/demo5')
def demo5():
    return redirect(url_for('demo1'))
  • 重定向到带有参数的视图函数
    • 在 url_for 函数中传入参数
# 路由传递参数
@app.route('/user/<int:user_id>')
def user_info(user_id):
    return 'hello %d' % user_id

# 重定向
@app.route('/demo5')
def demo5():
    # 使用 url_for 生成指定视图函数所对应的 url
    return redirect(url_for('user_info', user_id=100))

返回模板(render_template)

使用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)

自定义状态码和响应头

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方式
@app.route('/demo5')
def demo5():
    resp = make_response('make response测试')
        resp.headers[“Itcast”] = “Python”
        resp.status =404 not found”
    return resp
自定义响应使用步骤
  • 1 导入make_response
  • 2 response=make_response(4剑客)
  • 3 操作response
  • 4 return response
from flask import Flask
from flask import render_template
from flask import make_response
 
@app.route('/login.html', methods=['GET', "POST"])
def login():
    # 实例化响应对象,可以将四剑客传入,
    response = make_response(render_template('login.html'))
    # response是flask.wrappers.Response类型
    response.delete_cookie('key')  # 删除客户端的cookie
    response.set_cookie('key', 'value')  # 在响应对象中添加cookie
    response.headers['X-Something'] = 'A value'  # 在响应对象中设置响应头
    return response
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值