Python 使用flaskrestful的两个变量URL
这似乎会出现很多问题,但我找不到关于它的任何文档 我正在编写一个api,我希望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/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的答案对于这个案例并不完全正确
正确的是:您必须具备所需的属性