flask-restful接口
同flask一样,flask-restful同样支持返回任一迭代器,它将会被转换成一个包含原始 Flask 响应对象的响应:
class ArticleApi(Resource):def get(self):return {"hello":"world"},201,{"course":"python"}
在此基础上还可以做一个灵活的拓展,假设我们根据发来的请求对数据库进行了检索,并将结果赋给名为student
的变量。如果搜索结果即最后的student
为空,则状态码为404,否则为200。比较pythonic的写法为:
return {'student': student}, 200 if student is not None else 404
flask-restful为我们提供了一个方法去验证请求参数:reqparse
from flask_restful import reqparse
class ArticleApi(Resource):def get(self):parse = reqparse.RequestParser()parse.add_argument("title_id",type=int,help="title参数的值只能是int类型!")# add_argument第一个参数代表请求的参数名称,type表示限定请求的参数类型,实际做的是将参数进行强制转换,如果可以就证明参数类型正确,help表示出错后的提示信息。args = parse.parse_args(strict=True) # parse_args会接收reqparse验证后的参数,以字典形式返回,strict=True表示限定参数只能是add_argument中添加的参数,否则返回400错误。print(args)return {"hello":"world"}
此时我们请求http://127.0.0.1:5000/v1/article/?title_id=abc:
当我们请求http://127.0.0.1:5000/v1/article/?title_id=1&id=1:
对于一个视图函数,可以指定好一些字段用于返回。在使用ORM模型或者自定义模型时,他会自动获取模型当中的相应字段,生成json数据返回给客户端,我们需要导入flask_restful.marshl_with装饰器,并且需要写一个字典来指定需要返回的字段,以及该字段的数据类型:
article = Article.query.all()列表、
定义时
'article ': fields.List(fields.Nested(article _fields)),
article = Article.query.first() 对象
from flask_restful import fields,marshal_with
resource_fields = {"id":fields.Integer,"title":fields.String(default=None,attribute=None),# 在返回字段时有时候没有值,我们可以使用default来设置一个默认值,例:default="默认标题"# 如果我们在返回字段时想要以"headline"作为标题名返回给用户,但数据库中对应的字段名是"title",这时候我们可以使用attribute配置这种映射,例:"headline":fields.String(attribute="title")"author_id":fields.String,"author":fields.Nested({ # Nested可以进行嵌套字段"username":fields.String,"phone":fields.String}),"tag":fields.List(fields.Nested({"id":fields.Integer,"name":fields.String}))}
class ArticleApi(Resource):@marshal_with(resource_fields)def get(self):article = Article.query.first()return article # 返回article时,flask_restful会自动读取arctile模型上的id,title、author_id、tag以及author属性,组成一个json字符串返回给客户端。# 查找字段时,会使用article.id,article.title,article.author_id,article.author.username,article.author.phone,article.tag.id,article.tag.name进行查找
我们还可以通过继承fields.Row来自定义字段类型:
# 自定义字段将输出的小写字母全部变为大写
class UpperString(fields.Raw):def format(self, value):return value.upper()
resource_fields = {"value":UpperString
}
class ArticleApi(Resource):@marshal_with(resource_fields)def get(self):return {"value":"abc"}
api.add_resource(ArticleApi,"/article/",endpoint="article")
flask-restful返回Json格式的数据,但有时候我们要渲染html模版,返回html格式的数据,可以使用representation()装饰器来实现:
@api.representation('text/html')
def output_html(data, code, headers=None):"""输出函数有三个参数,data,code,以及 headers,data 是你从你的资源方法返回的对象,code 是预计的 HTTP 状态码,headers 是设置在响应中任意的 HTTP 头。你的输出函数应该返回一个 Flask 响应对象。"""print(data)response = make_response(data)return response
此时就可以返回html页面了。
flask-restful还有一些中高级用法,具体可参考:http://www.pythondoc.com/Flask-RESTful/index.html。
flask-restful接口相关推荐
- flask restful 模板
flask restful 模板 文章目录 flask restful 模板 官方文档 视频 restful模板 原生restful模板(推荐) 建议使用原生,restful封装接口,只能传输json ...
- python框架 mysql数据库_在Python的框架中为MySQL实现restful接口的教程
最近在做游戏服务分层的时候,一直想把mysql的访问独立成一个单独的服务DBGate,原因如下: 请求收拢到DBGate,可以使DBGate变为无状态的,方便横向扩展 当请求量或者存储量变大时,mys ...
- python编写restful接口_Python开发之路系列:RESTful 接口开发
这篇文章我们来看看在Flask里是如何进行RESTful接口开发的 按照我个人的理解,RESTful的核心价值再与它的规范性. RESTful接口是面向资源的, 而不是面向动作. 比如一个查书的接口, ...
- python实现restful接口_使用python为mysql实现restful接口
最近在做游戏服务分层的时候,一直想把mysql的访问独立成一个单独的服务DBGate,原因如下: 请求收拢到DBGate,可以使DBGate变为无状态的,方便横向扩展 当请求量或者存储量变大时,mys ...
- vue项目构建实战基础知识:SPA理解/RESTful接口介绍/static目录配置/axios封装/打包时map文件去除...
一.SPA 不是指水疗.是 single page web application 的缩写.中文翻译为 单页应用程序 或 单页Web应用,更多解释请自行搜索. 所有的前端人员都应该明白我们的页面的 u ...
- 接口是什么意思_程序员天天用却不懂得冷知识,这两句口诀,让你理解RESTful接口...
在我们前后端交互过程中,我们经常提到一个英文单词RESTful,那么什么是RESTful接口呢? REST,全称Resource Representational State Transfer,翻译成 ...
- Spring Cloud Feign Clients 无需 Controller自动暴露Restful接口
前言 在开发SpringCloud应用中,Feign作为声明式调用的事实标准极大的简化了Rest远程调用,提供了类本地化的调用方式.服务提供方的接口暴露方式是通过Controller暴露Restful ...
- 关于Go语言在服务端做Restful接口和socket通信
转载自: http://xiaorui.cc/2014/10/25/%e5%85%b3%e4%ba%8ego%e8%af%ad%e8%a8%80%e5%9c%a8%e6%9c%8d%e5%8a%a1% ...
- Python-基于flask的接口框架
Python-基于flask的接口框架 Flask是一个Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务.本文参考自Flask官方文档,大部分代码引用自官 ...
- spark-jobserver介绍: 提供了一个 RESTful 接口来提交和管理 spark 的 jobs、jars 和 job contexts
spark-jobserver Spark-jobserver 提供了一个 RESTful 接口来提交和管理 spark 的 jobs.jars 和 job contexts.这个项目包含了完整的 S ...
最新文章
- 动态展开所有_库存与市场需求之间如何“动态”共舞?库存计划动态模型构建分享...
- iOS开发网络篇—多线程断点下载
- Oracle: SQL组合不同字段作为一个查询条件
- 深度学习搞CV?图像数据不足咋办?看这里!
- 牛客网【每日一题】3月25日 tokitsukaze and Soldier
- 《软件工程导论》课后习题答案
- [专栏精选]TextMeshPro插件
- 简明java_简明 Java 错误处理机制
- 存储图片到数据库中的一个异常信息
- 必看干货!五个步骤帮您成功实施IT SLA
- 超详细的MySQL完全卸载教程
- 学生网页设计作业源码 HTML+CSS 网上书店网站设计与实现
- 一个留美女博士的七年
- Iass、Pass、Sass三种云服务有什么区别?
- 微信小程序开发资源汇总
- excel公式识别html,POI/Excel/HTML单元格公式问题
- 关键字查询 import keyword
- QQ心跳包格式分析 监听局域网QQ号代码
- SpringBoot 启动报错 No property found for type !
- 如何关闭苹果手机自动扣费_iPhone自动扣费怎么取消?App Store、微信、支付宝关闭自动扣费教程...
热门文章
- 如何给FLV文件加字幕
- AVS 分像素运动估计优化算法
- 解决:which: no java in (/root/chengxu/maven/apache-maven-3.5.2/bin:/usr/local/sbin:/usr/local/bin:/usr
- JS 中 Map 与 JSON 转换
- [云框架]KONG API Gateway v1.5 -框架说明、快速部署、插件开发
- localStorage存、取数组
- cocoapods-安装
- 【同行说技术】教你玩转iOS的5篇技术干货
- 泛型算法(二十三)之排列算法
- [leetcod] Clone Graph