如何在Flask Restful中为嵌套输出字段添加URL字段

0 投票
1 回答
1920 浏览
提问于 2025-04-28 10:21

我在使用 [Flask-RESTful][1] 时,遇到了生成嵌套输出字段中的 API 端点 URL 的困难。

我发现 fields.Url('my_endpoint', absolute=True) 只会在顶层的 URL 字段中生成 URL,而不会在嵌套的字段中生成。这样会导致出现 werkzeug.routing.BuildError 错误 - [错误日志链接][1]https://gist.github.com/anonymous/6251c67089871d0e4516

比如,这里是我的 URL 字段:

role_fields = {
    'name': fields.String(attribute='title'),
    'id': fields.Integer(attribute='id'),
    'uri': fields.Url('user_endpoint', absolute=True)
}


user_fields = {
    'id': fields.Integer,
    'username': fields.String,
    'email': fields.String,
    'full_name': fields.String(attribute='real_name'),
    'website': fields.String(default=None),
    'bio': fields.String(default=None),
    'created_date': fields.DateTime,
    'modified_date': fields.DateTime,
    'uri': fields.Url('user_endpoint', absolute=True),
    'role': fields.Nested(role_fields),
}
暂无标签

1 个回答

1

问题是 fields.Url 需要一个必填的端点参数,在这个情况下就是 username

这个 username 参数可以在返回的 user 对象中的 user_fields 里找到,但 role 对象 user.role 并不包含 username 这个属性。

所以我在返回之前,把 username 属性赋值给了 user.role 对象。

user = get_user(username) #Get user object from db
user.role.username = user.username
return user

撰写回答