2. Flask 请求数据获取与相应

请求数据获取与相应

请添加图片描述

1.1 请求数据及其获取
  • 回忆 http 协议

请添加图片描述

  • 请求参数位置

    • 请求行
    • 请求头
    • 请求体
  • 请求参数列表 (request)

    序号参数或信息解释
    1固定参数URL的组成部分, 不可缺失
    2查询字符串: args根据需求, get
    3表单数据: form提交form表单是传递的数据 post
    4文件上传: files用户向服务器上传的文件 post
    5请求头: headers请求头中携带的请求信息
    6请求方法: method请求所使用的的请求方法
    7URL地址: url请求的URL地址
    8get_json()获取json数据
  • 固定参数与转换器

    • 自定义转换器
    class MyCover(BaseConverter):
        def __init__(self, *args, **kwargs):
            super().__init__( *args, **kwargs)
             print(args[0])
             print(**kwargs)
             self.regx = args[0]
      regx = r"^1[3-9]\d{9}$"
    
    
    app.url_map.converters['mycover'] = MyCover
    
    • 固定参数(放在url的参数)
  @app.route("/mycover/<age>")
    def index(age):
      print(type(age))

        int(age)
        return "王xx,今年{}岁".format(age)
  • 请求参数(放在请求头或者请求体中的参数)
  # get 请求中
  request.args.get("key")
  # post 请求
  request.form.get("key")
  # 接收json数据
  request.get_json()
  • 内置转换器

    @app.route('/index/<int:user_id>',methods=['GET'])
    def index(user_id):
        print(user_id)
        return 'hello world'
    
    字段默认值
    string(默认值)接收没有任何斜杠的文本
    int接收整型
    float接收浮点型
    path接收string,但是也接收斜线
    uuid接收 uuid 的字符串
  • 自定义转换器

    from flask import Flask, request
    from werkzeug.routing import BaseConverter
    
    app = Flask(__name__)
    
    class MyCover(BaseConverter):
        def __init__(self,parm1,*args):
            super().__init__(parm1)
            self.regex = args[0]
            
    app.url_map.converters['re'] = MyCover
    
    @app.route('/<re("[\w]+"):name>')
    def showinfo(name):
        print(name)
        return '这是自定义的转换器应用'
    
    if __name__ == '__main__':
        app.run(debug=True)
    
   http://127.0.0.1:5000/13511062387
  • 文件上传

    • 获取文件对象

      file_obj = request.files.get('key')

    • 文件对象的属性

      file_obj.filename: 上传文件的文件名
      file_obj.name: 上传文件指定的 key
      file_obj.save('path'): 文件对象保存方法
      
    • 完整代码

      # 格式化时间
      def fmt_time():
          return datetime.datetime.now().strftime("%Y%m%d%H%M%S")
      # 获取后缀名
      def ext_name(filename):
          return "."+filename.split(".")[-1]
      
      # 文件上传
      @app.route('/upload',methods=['POST'])
      def upload():
          # 接收前端传来的参数
          file_storage = request.files.get("key")
          # 获取文件名称
          filename = file_storage.filename
          # 给文件重命名  2021033114018563254896.png
          refilename = fmt_time() + ext_name(filename)
          # 保存数据,指定目标地址
          file_storage.save(dst=refilename)
          # 返回
      	return "upload success"
      
1.2 响应数据之新手三件套(熟悉)
  • 字符串响应形式

    # 字符串
    直接使用return关键字返回一个字符串: return 'hello flask'
    
  • 模板响应形式

    render_template('页面路径')
    
  • 重定向响应形式 临时重定向(302)

    redirect("远程地址")
    
  • 使用 endpoint 值重定向

    redirect(url_for('idx'))
    
1.3 响应json数据与元组数据
  • json数据响应

    返回json数据需要借助flask提供的jsonify来实现

    jsonify({})
    
  • 元组返回形式

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

    return ('要返回的字符串', 6969, {'author': 'jeremy'})
    
1.4 make_response自定义响应
  • make_response()

    flask可以返回make_response自定义的响应, make_response()内部需要传递返回的字符串, 其创建的对象还有headers属性用于设置响应头, status属性用于设置状态码

  • 完整代码

    @app.route('/index', endpoint='idx')
    def index():
        # 响应字符串
        resp = make_response('自定义的响应字符串')
        # 响应头键值对
        resp.headers['author'] = 'jeremy'
        # 状态码与状态码提示信息
        resp.status = '6969 a post'
        # 注意: 响应头键值对与状态码提示信息均为英文, 否则抛异常
        return resp
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

(initial)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值