同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接口相关推荐

  1. flask restful 模板

    flask restful 模板 文章目录 flask restful 模板 官方文档 视频 restful模板 原生restful模板(推荐) 建议使用原生,restful封装接口,只能传输json ...

  2. python框架 mysql数据库_在Python的框架中为MySQL实现restful接口的教程

    最近在做游戏服务分层的时候,一直想把mysql的访问独立成一个单独的服务DBGate,原因如下: 请求收拢到DBGate,可以使DBGate变为无状态的,方便横向扩展 当请求量或者存储量变大时,mys ...

  3. python编写restful接口_Python开发之路系列:RESTful 接口开发

    这篇文章我们来看看在Flask里是如何进行RESTful接口开发的 按照我个人的理解,RESTful的核心价值再与它的规范性. RESTful接口是面向资源的, 而不是面向动作. 比如一个查书的接口, ...

  4. python实现restful接口_使用python为mysql实现restful接口

    最近在做游戏服务分层的时候,一直想把mysql的访问独立成一个单独的服务DBGate,原因如下: 请求收拢到DBGate,可以使DBGate变为无状态的,方便横向扩展 当请求量或者存储量变大时,mys ...

  5. vue项目构建实战基础知识:SPA理解/RESTful接口介绍/static目录配置/axios封装/打包时map文件去除...

    一.SPA 不是指水疗.是 single page web application 的缩写.中文翻译为 单页应用程序 或 单页Web应用,更多解释请自行搜索. 所有的前端人员都应该明白我们的页面的 u ...

  6. 接口是什么意思_程序员天天用却不懂得冷知识,这两句口诀,让你理解RESTful接口...

    在我们前后端交互过程中,我们经常提到一个英文单词RESTful,那么什么是RESTful接口呢? REST,全称Resource Representational State Transfer,翻译成 ...

  7. Spring Cloud Feign Clients 无需 Controller自动暴露Restful接口

    前言 在开发SpringCloud应用中,Feign作为声明式调用的事实标准极大的简化了Rest远程调用,提供了类本地化的调用方式.服务提供方的接口暴露方式是通过Controller暴露Restful ...

  8. 关于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% ...

  9. Python-基于flask的接口框架

    Python-基于flask的接口框架 ​Flask是一个Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务.本文参考自Flask官方文档,大部分代码引用自官 ...

  10. spark-jobserver介绍: 提供了一个 RESTful 接口来提交和管理 spark 的 jobs、jars 和 job contexts

    spark-jobserver Spark-jobserver 提供了一个 RESTful 接口来提交和管理 spark 的 jobs.jars 和 job contexts.这个项目包含了完整的 S ...

最新文章

  1. 动态展开所有_库存与市场需求之间如何“动态”共舞?库存计划动态模型构建分享...
  2. iOS开发网络篇—多线程断点下载
  3. Oracle: SQL组合不同字段作为一个查询条件
  4. 深度学习搞CV?图像数据不足咋办?看这里!
  5. 牛客网【每日一题】3月25日 tokitsukaze and Soldier
  6. 《软件工程导论》课后习题答案
  7. [专栏精选]TextMeshPro插件
  8. 简明java_简明 Java 错误处理机制
  9. 存储图片到数据库中的一个异常信息
  10. 必看干货!五个步骤帮您成功实施IT SLA
  11. 超详细的MySQL完全卸载教程
  12. 学生网页设计作业源码 HTML+CSS 网上书店网站设计与实现
  13. 一个留美女博士的七年
  14. Iass、Pass、Sass三种云服务有什么区别?
  15. 微信小程序开发资源汇总
  16. excel公式识别html,POI/Excel/HTML单元格公式问题
  17. 关键字查询 import keyword
  18. QQ心跳包格式分析 监听局域网QQ号代码
  19. SpringBoot 启动报错 No property found for type !
  20. 如何关闭苹果手机自动扣费_iPhone自动扣费怎么取消?App Store、微信、支付宝关闭自动扣费教程...

热门文章

  1. 如何给FLV文件加字幕
  2. AVS 分像素运动估计优化算法
  3. 解决:which: no java in (/root/chengxu/maven/apache-maven-3.5.2/bin:/usr/local/sbin:/usr/local/bin:/usr
  4. JS 中 Map 与 JSON 转换
  5. [云框架]KONG API Gateway v1.5 -框架说明、快速部署、插件开发
  6. localStorage存、取数组
  7. cocoapods-安装
  8. 【同行说技术】教你玩转iOS的5篇技术干货
  9. 泛型算法(二十三)之排列算法
  10. [leetcod] Clone Graph