写点什么

Flask 框架 - 请求与响应

  • 2023-08-02
    北京
  • 本文字数:1466 字

    阅读完需:约 5 分钟

请求方法

from flask import Flask
app = Flask(__name__)

@app.route("/cases", methods=["get"])def get_case(): return {"code": 0, "msg": "get success"}

# post请求不能直接通过url访问,可以使用postman或者requests库操作@app.route("/case", methods=["post"])def post_case(): return {"code": 0, "msg": "post success"}

if __name__ == '__main__': app.run()
复制代码

处理请求数据

注意:是 request 对象(不是 requests)



  • json 可以处理一些 post 请求的数据


from flask import Flask, request
from log_utils import logger
app = Flask(__name__)

# get@app.route("/login/", methods=["get"])def hogwarts(): logger.info(f"请求参数为{request.args}") result = request.args a = result.get('a') b = result.get('b') print(a, b) return {"code": 0, "msg": "get success"}

# post请求的json数据@app.route("/regist", methods=["post"])def post_regist(): logger.info(f"请求参数为{request.json}") return {"code": 0, "msg": "post success"}

# form表单@app.route("/put", methods=["put"])def put_regist(): name = request.form.get('name') p = request.form.get('password') email = request.form.get('email') logger.info(f"请求参数为{request.form}") logger.info(f"name:{name},password:{p},email:{email}") return {"code": 0, "msg": "post success"}

# 文件上传@app.route("/file", methods=["post"])def post_file(): obj = request.files.get("file") logger.info(obj) filename = obj.filename logger.info(f"文件名为:{filename}") # 将接口接收的文件保存在本地 obj.save("./1.txt") return {"code": 0, "msg": "post success"}

if __name__ == '__main__': app.run()
复制代码


由于 postman 对文件上传有一些 bug,所以写了测试代码上传文件:


import requests

def test_file(): url = "http://127.0.0.1:5000/file" file = { "file": open("C:/Users/Administrator/Desktop/1.txt", 'rb') } r = requests.post(url=url, files=file) assert r.status_code == 200
复制代码

处理响应信息

  • 返回的响应类型:

  • 文本:直接 return

  • 元组

  • json

  • html

  • 额外数据


返回元组有三种情况:


  • (response,status)

  • (response,headers)

  • (response,status,headers)


@app.route("/tuple")def tuple_result():    return "hogwarts", 200, {"test": "demo"}
复制代码


<br>


返回 json:


  • 直接返回 dict 会转换成 json

  • 使用 jsonify()方法,通过参数传入键值对


@app.route("/dict")def json_result():    return {'status': 0}

@app.route("/json")def json_re(): return jsonify({'status': 0}) # 也可以通过参数指定 # return jsonify(status=1,name="joker")
复制代码


<br>


返回 html--render_template(文件名称.html)


使用模板渲染技术


注意:html 文件必须在同级名为 templates 的目录下


@app.route("/html")def html_demo():    return render_template("demo.html")
复制代码


<br>


设置额外数据--make_response():


  • 设置 cookie

  • 设置响应头信息等


@app.route("/")def index():    # 设置返回页面模板    res = make_response(render_template('demo.html'))    # 设置cookie    res.set_cookie('username', 'password')    # 设置请求头    res.headers['hogwarts'] = 'joker'    return res
复制代码


获取更多技术资料,请点击!

用户头像

社区:ceshiren.com 微信:ceshiren2021 2019-10-23 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料,实时更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬。

评论

发布
暂无评论
Flask框架-请求与响应_霍格沃兹测试开发学社_InfoQ写作社区