后端开发 - 请求与响应
请求方法
常用配置方法
请求 |
说明 |
GET |
获取服务器资源 |
POST |
新增服务器资源 |
PUT |
更新服务器资源(客户端提供改变后的完整资源) |
DELETE |
删除服务器资源 |
接口设计
- 查询:get
- 新增:post
- 修改:put
- 删除:delete
get请求格式
# get 请求
@app.router("/testcase",methods=["get"])
def select_case():
return {"code": 0,"msg":"get success"}
- methods 是一个列表,可以添加多种请求方式,post,put等
post请求格式
# post 请求
@app.router("/testcase",methods=["post"])
def post_case():
return {"code": 0, ",sg":"post seccess"}
put请求格式
# put 请求
@app.router("/testcase",methods=["put"])
def put_case():
return {"code": 0, "msg":"put seccess"}
delete请求格式
# delete 请求
@app.router("/testcase",methods=["delete"])
def delete_case():
return {"code": 0, "msg":"delete seccess"}
处理请求数据
属性/方法 |
说明 |
args |
记录请求中的查询参数 |
json |
记录请求中的json数据 |
files |
记录请求上传的文件 |
form |
记录请求中的表单数据 |
method |
记录请求使用的HTTP方法 |
url |
记录请求的URL地址 |
host |
记录请求的域名 |
headers |
记录请求的头信息 |
get 请求参数
- 场景:
- 解决办法
- request.args
- 导入的是 Flask里的request,不是requests
- 示例代码
from flask import Flask, request
app = Flask(__name__)
@app.router("/login",methods=["get"])
def login():
result = request.args
a = result.get("a")
b = result.get("b")
return {"code": 0, "msg":"get seccess"}
# 请求地址:http://****/login?a=1&b=2&c=3
json 请求
@app.router("/regist",methods=["post")
def post_regist():
return {"code": 0, "msg":"post seccess"}
# 请求时有json数据传入
表单请求
- 场景:
- 比如:测试人网站的登录接口,需要用户名和密码,前端会提交一个form表单给后台
- 解决办法
- 示例代码
# 比如注册接口,需要 用户名、密码、确定密码、邮箱等
@app.router("/regists",methods={"put"})
def put_regists():
name = request.form.get("name")
password = request.form.get("password")
password_confirm = request.form.get("password_confirm")
email = request
.for,.get("email")
logger.info(request.form)
logger.info(f"注册用户:name:{name},password:{password}, password_confirm:{password_confiorm},email:{email}")
return {"code": 0, "msg":"put seccess"}
文件请求
- 场景:
- 页面上有个更新头像的功能,或者上传一个excel文件的功能,允许我们提交一个图片,或者文件到后端服务器
- 解决办法
- request.files.get(‘file’)获取文件对象
- filename 获取文件对象的文件名
- save()方法 保存文件到指定路径下
- 示例代码
@app.router("/file/",methods=["file"])
def file_file():
# 获取上传的文件对象
fileobj = request.files.get("file")
# 获取上传文件对象的文件名
filename = fileobj.filename
# 将上传文件重新保存到指定路径
fileobj.save("./logo1.png")
- file路径后边要有斜杠 “/xxxx/”
- 测试用例
import requests
def test_file():
url = "http://127.0.0.1:5000/file_file
file = {'file': open("/users/juanxu/Downloads/logo.jpg","rb")}
r = requests.post(url, files=file)
assert r.status_code == 200
# 发送该文件请求此上传文件接口
处理响应信息
文本类型处理
@app.router("/text")
def get_text():
return "返回文本"
元组
- 返回元组
- (response,status)
- (response,headers)
- (response,status,headers)
- 响应状态码默认为200
@app.router("/tuple")
def tuple_res():
return "你好呀", 200, {"hogwarts":"ad"}
json
- 直接返回 dict会转换为json
- 使用jsonify()方法,通过参数传入键值对
# 返回json
@app.router("/json")
def get_json():
# jsonify({"status": 0})
return jsonify(status=1, name="ad", age=2)
# 返回字典
@app.router("/dict")
def get_dict():
return {"status": 0}
html
- 使用模板渲染技术
- html 文件必须在统计的templates目录下
from Flask import render_template
@app.router("/html")
def get_html():
# 调用render_template方法,传入 html 文件的名称
# 注意html 文件必须在 templates目录下
return render_template('demo.html')
# <!--
# html 文件必须在templates目录下
# /application.py
# /templates
# /hello.html
# -->
# <html<>
# <body>
# <h1>霍格沃兹开发学社</h1>
# </body>
# </html>
额外数据
import flask.make_response
@app/router("/")
def index():
resp = make_response(render_template('demo.html'))
# 设置 cookie
resp.set_cookie('username', 'the username')
# 设置响应头信息
resp.headers["hogwarts"]="ad2
return resp
服务配置
监听的主机
- 设置 host参数
- 127.0.0.1 只能本机访问,默认值
- 0.0.0.0 服务发布到局域网
app.run(host="0.0.0.0")
监听的端口
app.run(host="0.0.0.0", port=5000)
Debug 模式
- 设置 debug=True(开发模式),默认值是 production(生产模式)
app.run(host="0.0.0.0", port=5000, debug=True)