Flask框架的请求与响应

Flask框架的请求与响应

Flask的请求

  • flask的请求数据通过 request 对象来获取
  • 常用属性:
    在这里插入图片描述
    代码示例:
from flask import Flask, request
from werkzeug.datastructures import FileStorage

app = Flask(__name__)


@app.route('/', methods=['get', 'post'])
def index():
    # 获取请求的基础数据
    # print(request.url)  # 请求的URL
    # print(request.method)  # 本次请求的请求方式
    # print(request.headers)  # 获取请求头信息  类字典对象

    # print(request.headers['Host'])
    # print(request.headers.get('Host'))  # 建议使用get方法, 键不存在不报错

    # 请求传递数据 1> URL路径 -> 路由变量  2> 查询字符串 get  3> 请求体  post  4> 请求头 -> request.headers

    # 获取查询字符串 -> request.args  xx?name=zs&age=20  类字典对象
    # print(request.args.get('name'))
    # print(request.args.get('age'))

    # 请求体:   键值对(表单)   文本(json/xml)  文件(图片/音频)

    # 获取post键值对 -> request.form  类字典对象
    # print(request.form.get('username'))

    # 获取post文本数据 -> request.data / request.json
    # print(request.data)  # 返回bytes类型
    # print(request.json.get('age'))  # request.json直接将json字符串转为字典

    # 获取post文件 -> request.files  类字典对象
    file = request.files.get("avatar")  # type: FileStorage
    # print(type(file))  # 返回 FileStorage文件对象
    # 将文件保存到本地
    file.save('123.jpg')

    # 获取文件的二进制数据
    # img_bytes = file.read()
    # print(img_bytes)

    return "index"


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

Flask的响应

1.访问静态资源

  • 将静态资源放入到 项目的 static 文件夹中
  • 通过内置的静态资源的访问路由, URL路径格式为 /static/,例如 static目录放入文件 123.jpg, 则访问URL为 http://127.0.0.1:5000/static/123.jpg

Flask对象的初始化参数 也可以 修改静态资源的存储和访问路径

示例代码:

from flask import Flask

app = Flask(__name__,  # 导入名称, flask会根据该参数查询静态文件的存储路径
            # 官方建议直接使用__name__, 表示从当前目录中查询静态文件存储路径
            static_folder="static1",  # 设置静态文件的存储目录
            static_url_path='/res/img',  # 设置静态文件的URL访问路径 如 127.0.0.1:5000/res/img/123.jpg
            )

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

2.设置响应数据

Flask中设置响应数据主要有两种方式:

  • 设置多个返回值
  • 自定义响应对象

2.1 三个返回值
Flask中 视图函数的返回值可以设置三个, 分别对应响应体, 响应状态码, 响应头

from flask import Flask

app = Flask(__name__)

@app.route('/demo1')
def demo1():
    # 返回值:  响应体, 响应状态码, 响应头
    return 'demo1', 400, {'A': 40}

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

2.2 自定义响应对象

  • 视图函数返回的 str / bytes 类型数据会被包装为 Response 响应对象, 也可以 创建响应对象来 自定义响应头 等信息
from flask import Flask, make_response, Response

app = Flask(__name__)

# 自定义响应对象
@app.route('/demo2')
def demo2():
    # 视图函数的返回值可以为str/bytes类型, 并且flask内部会将其包装为Response响应对象
    # return 'hello flask'

    # 创建响应对象     设置响应头时,需要手动创建响应对象
    response = make_response('hello flask')  # type: Response
    # 设置响应头
    response.headers['B'] = 10
    return response

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

3.返回JSON

  • 如果接口需要返回 JSON 数据,在 Flask 中可以直接使用 jsonify() 生成一个 JSON 的响应
  • 不推荐使用 json.dumps() 直接返回,因为返回的数据要符合 HTTP 协议规范,如果是 JSON 需要指定 content-type:application/json
from flask import Flask, make_response, Response, jsonify

app = Flask(__name__)

@app.route('/demo3')
def demo3():

    dict1 = {'name': 'zs', 'age': 20}
    # 字典转json字符串
    # return json.dumps(dict1)

    # 可以将字典转json字符串, 并且设置响应头的content-type为application/json
    # return jsonify(dict1)
    return jsonify(name='zs', age=20)  # 也支持关键字实参的形式

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

4.重定向

  • flask中通过 redirect() 实现重定向功能
from flask import Flask, redirect

app = Flask(__name__)

@app.route('/demo4')
def demo4():
    # 重定向到指定网站
    # return redirect('http://www.baidu.com')
    # 重定向到自己的路由   只需要URL资源段
    return redirect('/demo3')

if __name__ == '__main__':
    app.run(debug=True)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值