七十九:flask.Restful之flask-Restful蓝图与渲染模板
1、flask-Restful与蓝图结合使用
如果要在蓝图中使用flask-Restful,那么在创建Api对象的时候,就不应该使用app,而是蓝图,如果有多个蓝图,则需在每一个蓝图里面创建一个Api对象


from flask import Blueprint
from flask_restful import Api, Resource, fields, marshal_with from models import Article article_bp = Blueprint('article', __name__, url_prefix='/article')
api = Api(article_bp) class ArticleView(Resource):
# 定义要返回的数据结构
resource_fields = {
'title': fields.String, # article.title
'content': fields.String,
'author': fields.Nested({ # article.author
'username': fields.String, # article.author.username
'email': fields.String # article.author.email
}),
'tags': fields.List( # article.tags的list
fields.Nested({ # article.tags[n]
'id': fields.Integer, # # article.tags[n].id
'name': fields.String # # article.tags[n].name
})
)
} @marshal_with(resource_fields)
def get(self, article_id):
article = Article.query.get(article_id)
return article api.add_resource(ArticleView, '/<article_id>/', endpoint='article')

from flask import Flask
import config
from exts import db
from article import article_bp app = Flask(__name__)
app.config.from_object(config)
db.init_app(app)
app.register_blueprint(article_bp) if __name__ == '__main__':
app.run(debug=True)

2、使用flask-Restful渲染模板
由于flask-Restful的返回content-type默认是application/json,所以如果在flask-Restful的视图中想要返回html代码,或者是模板,那么就需要使用api.representation这个装饰器来声明content-type,并且定义一个函数,在这个函数中,应该对html代码进行一个封装,再返回
未使用api.representation装饰器声明content-type

class ListView(Resource):
def get(self):
return {'username': 'ListView.username'} api.add_resource(ListView, '/list/', endpoint='list')


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>这是list.html</h2>
</body>
</html>

class ListView(Resource):
def get(self):
return render_template('list.html') api.add_resource(ListView, '/list/', endpoint='list')

使用api.representation装饰器声明content-type

@api.representation('text/html') # 当要返回的数据类型是这里定义的content-type的时候,会执行这里的函数
def output_html(data, code, headers):
""" 在representation装饰的函数中,必须放回一个Response对象 """
resp = Response(data)
return resp

七十九:flask.Restful之flask-Restful蓝图与渲染模板的更多相关文章
- 第三百七十九节,Django+Xadmin打造上线标准的在线教育平台—xadmin的安装
第三百七十九节,Django+Xadmin打造上线标准的在线教育平台—xadmin的安装 xadmin介绍 xadmin是基于Django的admin开发的更完善的后台管理系统,页面基于Bootstr ...
- “全栈2019”Java第七十九章:类中可以嵌套接口吗?
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- (七十九)c#Winform自定义控件-导航菜单
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...
- 七十九:flask.Restful之flask-Restful标准化返回参数示例
接上一篇的代码和数据 对于复杂结构的数据如果只是定义单一结构的话返回的数据就没意义了,此时定义的数据结构需精确到所有数据的每一个字段有时候要返回的数据结构中,会有比较复杂的数据结构,证实后可以使用一些 ...
- 第七十九,CSS3背景渐变效果
CSS3背景渐变效果 学习要点: 1.线性渐变 2.径向渐变 本章主要探讨HTML5中CSS3背景渐变功能,主要有两种渐变方式:线性渐变和径向 (放射性)渐变. 一.线性渐变 linear-gradi ...
- salesforce零基础学习(七十九)简单排序浅谈 篇一
我们在程序中经常需要对数据列表进行排序,有时候使用SOQL的order by 不一定能完全符合需求,需要对数据进行排序,排序可以有多种方式,不同的方式针对不同的场景.篇一只是简单的描述一下选择排序,插 ...
- (七十九)MapKit的基本使用
MapKit是苹果公司开发的用于显示地图和实现定位.导航的地图框架. MapKit View可以通过storyboard.xib创建,也可以通过代码直接创建. 需要注意的是,通过storyboard和 ...
- Java开发笔记(七十九)利用反射技术操作私有属性
早在介绍多态的时候,曾经提到公鸡实例的性别属性可能被篡改为雌性,不过面向对象的三大特性包含了封装.继承和多态,只要把性别属性设置为private私有级别,也不提供setSex这样的性别修改方法,那么性 ...
- 第七十九课 最短路径(Floyd)
程序如下: #ifndef GRAPH_H #define GRAPH_H #include "Object.h" #include "SharedPointer.h&q ...
随机推荐
- action mailbox
Action Mailer Basics和Action Mailbox Basics:邮件系统. https://edgeguides.rubyonrails.org/action_mailbox_b ...
- Solr——Java应用
Solr有一个客户端SolrJ 创建一个Java Project 引入Jar包 添加test类 package com.solr.test; import java.io.IOException; i ...
- python OS模块 对操作系统接口调用
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径os.chdir("dirname") 改变当前脚本工作目录:相当于shell下cdos.curdir ...
- timestamp和datetime
datetime数据类型在MySQL之前占8个字节,5.6之后占5个字节,datetime的范围1000-01-01 00:00:00------9999-12-31 23:59:59,格式采用YYY ...
- select * from a,b探讨
select * from a,b探讨 今天看同事代码里使用了select * from a,b where a.id=b.id,而我平时都是使用select * from a inner join ...
- PyHook3----键盘鼠标操作
需要安装 pywin32 安装pyHook 下载网址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml 注意选择的pyHook版本一定要和python对 ...
- Python的f.seek(offset, whence)函数
file.seek()方法标准格式是:seek(offset,whence=0)offset:开始的偏移量,也就是代表需要移动偏移的字节数whence:给offset参数一个定义,表示要从哪个位置开始 ...
- jenkins汉化
插件: Localization: Chinese (Simplified) locale plugin(或者是这个版本不一样,名字不一样) 可以直接安装这个插件,然后走最后一步设置即可. 由于安装失 ...
- 在java下面配置xml导致idea编译失败
1.今天遇到一个问题在java配置dao.xml的时候导致,idea编译失败 然后把pom.xml上面的 <build> <resources> <resource> ...
- BFS解决九宫重排问题
问题 1426: [蓝桥杯][历届试题]九宫重排 时间限制: 1Sec 内存限制: 128MB 提交: 215 解决: 47 题目描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个 ...