Python 使用flaskrestful的两个变量URL

Python 使用flaskrestful的两个变量URL,python,flask,url-routing,flask-restful,Python,Flask,Url Routing,Flask Restful,这似乎会出现很多问题,但我找不到关于它的任何文档 我正在编写一个api,我希望URL如下所示: '/api/v1.0/restaurant/Name&Address' resto_fields = { 'id': fields.Integer, 'name': fields.String, 'street_address': fields.String, 'address_locality': fields.String, 'address_re

这似乎会出现很多问题,但我找不到关于它的任何文档

我正在编写一个api,我希望URL如下所示:

'/api/v1.0/restaurant/Name&Address'
resto_fields = {
    'id': fields.Integer,
    'name': fields.String,
    'street_address': fields.String,
    'address_locality': fields.String,
    'address_region': fields.String,
    ‘score’: fields.Float,
    'phone_number': fields.String,
    'uri': fields.Url('restaurant')
    }

def get(self, name, address):
    restaurant = session.query(Restaurant).filter_by(name=name).filter_by(address=address)

    # restaurant must have an 'address' field
    restaurant['address'] = ' '.join[restaurant['street_address'], restaurant['address_locality']]
    resto = {'restaurant': marshal(restaurant, resto_fields)}

    return resto
使用Flask restful,我将url定义为

'/api/v1.0/restaurant/<name>&<address>'

这并不理想,但它让事情运转起来

在使用resto_字段进行编组期间,flask restful试图为资源创建uri时出现了问题

当url仅将名称作为变量时,这不是问题,但是,一旦url需要名称和地址,就会引发BuildError

为了解决这个问题,我删除了

'uri': fields.Url('restaurant')
从restos_字段,并在封送资源后构造uri,并在返回资源之前将其添加到封送的资源中

    resto = {'restaurant': marshal(restaurant, resto_fields)}

    resto['restaurant']['uri'] = '/api/v1.0/restaurant/{0}&{1}'.format(name, address)
    return resto

如果有人有一种更优雅的方法来完成这项工作,我会很想听听。

这并不理想,但它能让事情顺利进行

在使用resto_字段进行编组期间,flask restful试图为资源创建uri时出现了问题

当url仅将名称作为变量时,这不是问题,但是,一旦url需要名称和地址,就会引发BuildError

为了解决这个问题,我删除了

'uri': fields.Url('restaurant')
从restos_字段,并在封送资源后构造uri,并在返回资源之前将其添加到封送的资源中

    resto = {'restaurant': marshal(restaurant, resto_fields)}

    resto['restaurant']['uri'] = '/api/v1.0/restaurant/{0}&{1}'.format(name, address)
    return resto

如果有人有一种更优雅的方法来完成这项工作,我会很想听听。

这并不理想,但它能让事情顺利进行

在使用resto_字段进行编组期间,flask restful试图为资源创建uri时出现了问题

当url仅将名称作为变量时,这不是问题,但是,一旦url需要名称和地址,就会引发BuildError

为了解决这个问题,我删除了

'uri': fields.Url('restaurant')
从restos_字段,并在封送资源后构造uri,并在返回资源之前将其添加到封送的资源中

    resto = {'restaurant': marshal(restaurant, resto_fields)}

    resto['restaurant']['uri'] = '/api/v1.0/restaurant/{0}&{1}'.format(name, address)
    return resto

如果有人有一种更优雅的方法来完成这项工作,我会很想听听。

这并不理想,但它能让事情顺利进行

在使用resto_字段进行编组期间,flask restful试图为资源创建uri时出现了问题

当url仅将名称作为变量时,这不是问题,但是,一旦url需要名称和地址,就会引发BuildError

为了解决这个问题,我删除了

'uri': fields.Url('restaurant')
从restos_字段,并在封送资源后构造uri,并在返回资源之前将其添加到封送的资源中

    resto = {'restaurant': marshal(restaurant, resto_fields)}

    resto['restaurant']['uri'] = '/api/v1.0/restaurant/{0}&{1}'.format(name, address)
    return resto

如果有人有一种更优雅的方法来完成这项工作,我会很想听听。

这与
&
符号无关,也与使用多个URL参数无关

您只能在端点中使用
resto_字段
输出字段映射中的条目;您的
resto_字段中没有
地址
条目
映射,但是您的
餐厅
端点需要它来构建URL


地址
字段添加到输出字段,或使用路由中的一个现有字段。

这与
符号无关,也与使用多个URL参数无关

您只能在端点中使用
resto_字段
输出字段映射中的条目;您的
resto_字段中没有
地址
条目
映射,但是您的
餐厅
端点需要它来构建URL


地址
字段添加到输出字段,或使用路由中的一个现有字段。

这与
符号无关,也与使用多个URL参数无关

您只能在端点中使用
resto_字段
输出字段映射中的条目;您的
resto_字段中没有
地址
条目
映射,但是您的
餐厅
端点需要它来构建URL


地址
字段添加到输出字段,或使用路由中的一个现有字段。

这与
符号无关,也与使用多个URL参数无关

您只能在端点中使用
resto_字段
输出字段映射中的条目;您的
resto_字段中没有
地址
条目
映射,但是您的
餐厅
端点需要它来构建URL


在输出字段中添加一个
地址
字段,或使用路由中的一个现有字段。

我花了一段时间才弄明白,所以得到了正确的答案

@Martijn的答案对于这个案例并不完全正确

正确的是:您必须在数据字典中(而不是在输出字段中)具有
get
方法所需的属性

因此,您的代码应该如下所示:

'/api/v1.0/restaurant/Name&Address'
resto_fields = {
    'id': fields.Integer,
    'name': fields.String,
    'street_address': fields.String,
    'address_locality': fields.String,
    'address_region': fields.String,
    ‘score’: fields.Float,
    'phone_number': fields.String,
    'uri': fields.Url('restaurant')
    }

def get(self, name, address):
    restaurant = session.query(Restaurant).filter_by(name=name).filter_by(address=address)

    # restaurant must have an 'address' field
    restaurant['address'] = ' '.join[restaurant['street_address'], restaurant['address_locality']]
    resto = {'restaurant': marshal(restaurant, resto_fields)}

    return resto

地址
不会是生成的响应的一部分

我花了一段时间才弄明白,所以一个正确的答案

@Martijn的答案对于这个案例并不完全正确

正确的是:您必须在数据字典中(而不是在输出字段中)具有
get
方法所需的属性

因此,您的代码应该如下所示:

'/api/v1.0/restaurant/Name&Address'
resto_fields = {
    'id': fields.Integer,
    'name': fields.String,
    'street_address': fields.String,
    'address_locality': fields.String,
    'address_region': fields.String,
    ‘score’: fields.Float,
    'phone_number': fields.String,
    'uri': fields.Url('restaurant')
    }

def get(self, name, address):
    restaurant = session.query(Restaurant).filter_by(name=name).filter_by(address=address)

    # restaurant must have an 'address' field
    restaurant['address'] = ' '.join[restaurant['street_address'], restaurant['address_locality']]
    resto = {'restaurant': marshal(restaurant, resto_fields)}

    return resto

地址
不会是生成的响应的一部分

我花了一段时间才弄明白,所以一个正确的答案

@Martijn的答案对于这个案例并不完全正确

正确的是:您必须在数据字典中(而不是在输出字段中)具有
get
方法所需的属性

因此,您的代码应该如下所示:

'/api/v1.0/restaurant/Name&Address'
resto_fields = {
    'id': fields.Integer,
    'name': fields.String,
    'street_address': fields.String,
    'address_locality': fields.String,
    'address_region': fields.String,
    ‘score’: fields.Float,
    'phone_number': fields.String,
    'uri': fields.Url('restaurant')
    }

def get(self, name, address):
    restaurant = session.query(Restaurant).filter_by(name=name).filter_by(address=address)

    # restaurant must have an 'address' field
    restaurant['address'] = ' '.join[restaurant['street_address'], restaurant['address_locality']]
    resto = {'restaurant': marshal(restaurant, resto_fields)}

    return resto

地址
不会是生成的响应的一部分

我花了一段时间才弄明白,所以一个正确的答案

@Martijn的答案对于这个案例并不完全正确

正确的是:您必须具备所需的属性