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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/456287.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如约而至 Nexus 6 的 Android 7.1.1 已经上线

经过近一个月的等待,Google 已正式为 Nexus 6 推送 Android 7.1.1 更新,本次更新版本号为 N6F26Q,可以点击这里下载完整系统镜像或者下载 OTA 升级包。 相比其他 Nexus 和 Pixel 设备,Nexus 6 已经发布了超过两年之久,…

关于jedis2.4以上版本的连接池配置,及工具类

jedis.propertise 注意以前版本的maxAcitve和maxWait有所改变,JVM根据系统环境变量ServerType中的值 取不同的配置,实现多环境(测试环境、生产环境)集成。 redis.pool.maxTotalredis.pool.maxActive.${ServerType} redis.pool.max…

关于response格式转换

调用图灵机器人api实例: class RobotHandler(WebSocketHandler):def open(self):# print("WebSocket opened",self.request.remote_ip)robot_set.add(self)# 获取websocket的发过来的信息def on_message(self, message):urlhttp://openapi.tuling123.com/…

微软老兵 Antoine LeBlond 将正式离职

Antoine LeBlond (安东勒布朗)是微软众高管之一,他在微软工作将近25年之久,然而他将在下周一,也就是他在微软的第9000天正式离职. 在发给微软众同事的邮件中,勒布朗表示他希望"探索微软之外的世界". 勒布朗在微软Office部门度过了他在微软的前20年时光,并与前微软高管…

转载——java synchronized详解

文章来源:http://www.cnblogs.com/GnagWang/archive/2011/02/27/1966606.html转载于:https://www.cnblogs.com/insist8089/p/6515885.html

Django中的F对象和Q对象

F对象 可以获取到自己的属性值实现自己的属性自己的属性关联的复杂条件支持运算 Q对象 Q对象实际上是对条件的一个封装封装后支持逻辑运算与或非 &|~ 支持嵌套 例子 from django.db.models import Max, Avg, F, Q from django.http import HttpResponse from django.s…

总链接

字符集修改、Linux时间同步、调整文件描述符http://11815879.blog.51cto.com/11805879/1915276正则表达式:http://11815879.blog.51cto.com/11805879/1919777 文件系统inode与blockhttp://11815879.blog.51cto.com/11805879/1917068 文件类型与软硬链接:…

Django模型关系

模型关系 1:1 一对一 (一个身份证对应一个驾照) 是使用外键唯一约束实现的对应最多只能有一个我们通常会在从表中声明关系 主表,从表 主表数据删除,从表数据级联删除从表数据删除,主表不受影响谁声明关系&#xff0c…

Android常用开源项目

Android常用开源项目 Android 2014-05-23 16:39:43 发布您的评价: 4.3 收藏 24收藏Android开源项目第一篇——个性化控件(View)篇包括ListView、ActionBar、Menu、ViewPager、Gallery、GridView、ImageView、ProgressBar、TextView、其他Android开源项目第二篇——工具库…

Django中数据知识点归纳

Django对象的增删改查 我们为了对django对象的增删改查进行总结,先在model.py文件中创建类便于举例 定义学生: class Students(models.Model):snamemodels.CharField(max_length20)sgendermodels.BooleanField(defaultTrue)sagemodels.IntegerField()…

面 试 细 节 一 点 通

面谈的礼节是社会新人及求职者踏人社会工作前最重要且最需学习的课题,因为这关系到是否能顺利踏入社会且寻找到一份合适满意的工作。 一个社会新人除了应注意的面试礼节外,在开始进行面谈之前及面谈结束之后,还有不少必须注意的礼仪。 面谈时…

宽带与流量的关系

流量,一般指的是每秒钟流经某设备的数据的多少。也就是Byte/Second( 字节每秒)。 比方说1M,这个概念的单位叫bPS(bit Per Second)比特每秒。而事实上经常用另外一个词来代替描述,也就是带宽。 而带宽和流量的换算关系是: 1 By…

PHP函数处理方法总结

call_user_func_array (PHP 4 > 4.0.4, PHP 5, PHP 7) call_user_func_array — 调用回调函数,并把一个数组参数作为回调函数的参数 说明 mixed call_user_func_array ( callable $callback , array $param_arr ) 把第一个参数作为回调函数(callback&…

Django删除多对多表关系 :

删除多对多表关系 : # 删除子表与母表关联关系,让小虎不喜欢任何颜色 # 写法1: child_obj Child.objects.get(name"apollo") colors_obj Colors.objects.all() child_obj.favor child_obj.save() # 写法2: child_obj Child.objects.get(name"apo…

git push/pull时总需要输入用户名密码的解决方案

在提交项目代码或者拉代码的时候,git会让你输入用户名密码,解决方案:(我们公司用的是gitlab)执行git config --global credential.helper store命令然后git push origin your-branch会让你输入用户名和密码&#xff0c…

Django源代码写DetailView与ListView

基于类的通用视图 - 展平索引 通用显示视图 以下两个通用的基于类的视图旨在显示数据。在许多项目中,它们通常是最常用的视图。 一、DetailView django.views.generic.detail.DetailView 在执行此视图时,self.object将包含视图正在操作的对象。 此视图…

开源商务智能软件Pentaho

1 简介Pentaho是世界上最流行的开源商务智能软件,以工作流为核心的,强调面向解决方案而非工具组件的,基于java平台的商业智能(Business Intelligence,BI)套件BI,之所以说是套件是因为它包括一个web server平台和几个工具软件:报表…

chrome用type=file获取图片路径并转base64字符串

1 html页面 <div class"col-sm-2" style"height: 200px;margin-top: 14px;"> <input id"photo" name" " type"file" value"选择图片" ng-model"photoUrl"> <input type"button&qu…

Python - Django - 中间件 process_exception

process_exception(self, request, exception) 函数有两个参数&#xff0c;exception 是视图函数异常产生的 Exception 对象 process_exception 函数的执行顺序是按照 settings.py 中设置的中间件的顺序的倒序执行 process_exception 函数只在视图函数中出现异常的时候才执行…

NTV Media Server G3性能测试

Hello&#xff01;大家好&#xff0c;我是资深测试工程师Jackie&#xff0c;今天我来和大家一起对云视睿博的高性能流媒体服务器NTV Media Server G3做一次性能测试。今天测试有一个小目标&#xff0c;那就是验证在一台普通的PC机上&#xff0c;NTV Media Server G3的并发能力是…