文章目录
一、如何使用Postman
学会使用Postman软件,作为后台测试数据使用,代码是不是出错,在Postman中send后看IDEA中是否报错。
- POST->输入url->body->form-data->输入Key、value->send。在Body中显示结果。
- 注意:get请求参数在request.args里面,在post中输入是要在路径url中传入键值。
- post请求参数在request.form里面
以POST请求:
@app.route("/min", methods=['Post'])
def index_post():
args = request.form
return "Post" + str(min(int(args['x']), int(args['y'])))
以GET请求:
@app.route("/min", methods=['Get'])
def index_get():
args = request.args
return "Get" + str(min(int(args['x']), int(args['y'])))
二、请求方式:POST、GET
1、关于request:
- 客户端发送参数,云端计算返回结果给客户端
- 访问方式为 http://IP:PORT/Router。eg 127.0.0.1:5000/index?city=shenzhen&country=china
- request包含所有请求信息:请求头、请求体、请求参数。
- request 中包含了前端发送过来的所有请求数据
- 导入 from flask import request
- 请求头参数中user-agent用来表示用户用的是什么浏览器。
- 被访问的是服务端,去访问的是客户端
2、关于Get请求
- Get请求传递多个参数:地址?参数名=参数值&…参数可以多传,但是需要的必须存在。
- Get请求如何传递单个参数:地址?参数名=参数值
3、关于POST请求
- post请求数据存在请求体中
4、如何在浏览器中查看request
- 浏览器访问url,按F12,看Query String Parameters中参数输入。
- Network中Headers-> Request Method为Get
- Status code 为200,含义见下表。
三、request中的form、agrs的使用方法
from flask import Flask, request
app = Flask(__name__)
# 127.0.0.1:5000/index?city=shenzhen&country=china ?后的为查询字符串
@app.route("/index", methods=['GET', "POST"])
def index():
# 通过request.form可以直接提取请求体中的表单格式的数据,是一个类字典对象
# 通过get只能拿到同名参数的第一个
name = request.form.get("name")
age = request.form.get("age")
city = request.args.get("city")
name_list = request.form.getlist("name") # 获取相同键名的值的方法
# args获取url路径(查询字符串)中的数据,form、data是提取请求体里面的数据,所以postman中输入city key值不会打印出值为NONE
# http://127.0.0.1:5000/index?city=shenzhen 在路径中输入
# print("request.data: %s" % request.data)
# return "name = %s, age = %s, city = %s" % (name, age, city)
return f"name = {name}, age = {age}, city = {city}, name = {name_list}"
# 注意前边加f
if __name__ == '__main__':
app.run(debug=True)
四、两种方式访问
if request.method == "GET":
pass
elif request.method == "POST":
pass
五、上传文件
Flask中可以直接用这句上传文件
file_obj.save("./demo1.png")
from flask import Flask, request
app = Flask(__name__)
@app.route("/upload", methods=["POST"])
def upload():
"""
接收前端传过来的文件
:return:
"""
file_obj = request.files.get("pic")
if file_obj is None:
# 表示没有发送文件
return "未上传文件"
# 第一种方法
# 将文件保存到本地
# 1、创建一个文件
f = open("./demo.jpg", "wb")
# 2、向文件写内容
data = file_obj.read()
f.write(data)
# 3.关闭文件
f.close()
return "上传成功"
# 第二种方法:
# # 直接使用上传的文件对象保存
# file_obj.save("./demo1.png")
# return "上传成功"
if __name__ == '__main__':
app.run(debug=True)
六、上下文管理器with()
# coding:utf-8
with open("./1.txt", "wb") as f:
f.write("hello flask")
# coding:utf-8
class Foo(object):
def __enter__(self):
"""
进入with语句的时候被with调用
:return:
"""
print("enter called")
def __exit__(self, exc_type, exc_val, exc_tb):
"""
离开with语句的时候被with调用
:param exc_type:
:param exc_val:
:param exc_tb:
:return:
"""
print("exit called")
print("exc_type:%s" % exc_type)
print("exc_val:%s" % exc_val)
print("exc_tb:%s" % exc_tb)
with Foo() as foo:
print("hello python")
a = 1/0
print("hello end")
with自动调用Flask中的__enter__函数,关闭的时候自动调用__exit__函数。
eg:with调用Foo类中的__enter__函数打印enter called,打印print语句hello python ,执行a = 1/0语句,发生异常,调用__exit__函数,打印exit called,处理异常。