• 七十九: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

  • 相关阅读:
    整理ASP.NET MVC 5各种错误请求[401,403,404,500]的拦截及自定义页面处理实例
    Sql Server 创建表添加说明
    c# 去除字符串中重复字符
    WebStorm中常用的快捷键及使用技巧
    git bash中的快捷键
    git bash here 的 ~/.bashrc 配置文件。和 vue/cli 3. 0 的 .vuerc文件(preset )
    右键菜单添加打开CMD选项
    Vue中使用Vue.component定义两个全局组件,用单标签应用组件时,只显示一个组件的问题和 $emit的使用。
    vue和stylus在subline中显示高亮
    stylus入门教程,在webstorm中配置stylus
  • 原文地址:https://www.cnblogs.com/zhongyehai/p/11877462.html
Copyright © 2020-2023  润新知