Flask实操问题:如何通过直接输入URL调用自定义Resource类的对应方法
解决方案
核心原因说明
- 浏览器地址栏输入URL默认发送的是 GET请求,你代码里的
put方法是对应HTTP的PUT请求方法,默认不会被触发 - 你当前用的Flask-RESTful框架的
Resource类是根据请求方法匹配类内的同名函数,不是根据URL路径里的关键词匹配 - 你写的URL格式错误,端口需要跟在IP后用冒号分隔,正确格式前缀为
http://127.0.0.1:5000/
方案1:直接适配你要的URL访问逻辑(仅本地测试用)
直接新增一条路由规则,解析URL路径里的所有参数,调用创建逻辑即可,代码示例:
from flask import abort from flask_restful import marshal # 新增路由,匹配你要的路径格式 @app.route('/video/put/<int:video_id>/<name>/<int:views>/<int:likes>') def create_video_from_url(video_id, name, views, likes): # 复用你原有put方法的校验逻辑 exist_video = VideoModel.query.filter_by(id=video_id).first() if exist_video: abort(409, message="Video id taken...") new_video = VideoModel(id=video_id, name=name, views=views, likes=likes) db.session.add(new_video) db.session.commit() # 用你已定义的resource_fields序列化返回结果 return marshal(new_video, resource_fields), 201
注意:该方案将写操作封装为GET请求,不符合RESTful规范,GET请求理论上应为幂等操作(多次调用结果一致),该写法仅适合本地测试使用,禁止用于生产环境,容易被浏览器预加载、爬虫误触发造成脏数据。
方案2:遵循原有RESTful设计的测试方法
如果你不想修改原有代码逻辑,直接测试现有PUT接口,不要用浏览器地址栏直接访问,改用接口测试工具:
- 下载Postman/ApiPost等工具,新建请求,请求方法选择
PUT,地址填http://127.0.0.1:5000/video/1,在请求体里填写name、views、likes三个参数后发送即可 - 也可以直接用curl命令发送请求:
curl -X PUT -d "name=Test&views=80&likes=2" http://127.0.0.1:5000/video/1
内容的提问来源于stack exchange,提问作者João Victor Nascimento
相关产品推荐
相关产品推荐

