python - 如何使用 Flask 提供 HTML 和 JSON 内容?

标签 python json templates flask api-design

我想设置一个具有 GUI 和 API 组件的 Flask 应用程序。这是一个检索组列表的简单示例:

def get_groups():
    groups = db.session.query(SgmGroup.group_name).order_by(SgmGroup.group_name).all()
    return [group.group_name for group in groups]

@app.route('/list')
def group_list():
    groups_list = get_groups()
    return render_template('groups.html', groups=groups_list)

到目前为止一切顺利 - 这将为用户提供一个 HTML 用户列表,可能采用表格或其他一些不错的 GUI 格式。

但我还想为 API 请求提供 JSON 内容:

@app.route('/api/list')
def api_group_list():
    groups_list = get_groups()
    return jsonify({'groups': group_list})

这可行 - 但这是个好主意吗?我有两个问题:

1) 当我有两种不同类型的内容时,这是使用 Flask 的合适方法吗?为网络浏览器创建一个 /endpoint URL (HTML),并为处理 API 请求 (JSON) 创建一个相同的 /api/endpoint URL?

2)或者我应该将这两个端点组合成一个函数?这看起来更简洁,但如何确定用户访问了哪个端点?即下面的伪代码可以做到吗?

@app.route('/list')
@app.route('/api/list')
def group_list():
    groups_list = get_groups()

    if <user arrived here via the /list endpoint>:
        return render_template('groups.html', groups=groups_list)

    elif <user arrived here via the /api/list endpoint>:
        return jsonify({'groups': group_list})

最佳答案

回答你的第二个问题:

from flask import request

@app.route('/')
@app.route('/json')
def index():
    if request.path == '/json':
        return {}
    return render_template('index.html')

文档引用是 here .

关于python - 如何使用 Flask 提供 HTML 和 JSON 内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36577979/

相关文章:

python - blender : AttributeError: '_RestrictContext' object has no attribute 'scene'

java - 在 python 中将 java System.currentTimeMillis() 转换为日期

python - Django 模板三元运算符

python - QTableView 选择更改时出错

python - 属性错误 : 'numpy.float64' object has no attribute 'log10'

javascript - 如何从 JSON 数据创建 Highcharts 系列以供使用

javascript - REST - Rails API 前端

iphone - AFNetworking - 如何发出 POST 请求

c++ - 如何在同一个模板函数上专门化多个类型?

c++ - 相当于 int 的 typedef