#python #flask #rabbitmq
#python #flask #rabbitmq
Вопрос:
Теперь я обновил этот пост фактическим сценарием, который я пытаюсь решить. Я использую Flask
для создания RESTful api с flask-restful
плагином и pika
библиотекой для работы RabbitMQ
. Например, этот фрагмент кода иллюстрирует запрос RPC на авторизацию с использованием информации о разрешении пользователя и токене предъявителя.
def request_authz(self, metadata):
"""
For an RPC request, the RCP client sends a message with two
properties (i.e. `reply_to` and `correlation_id`) set to its
callback queue
"""
self.response = None
self.correlation_id = str(uuid.uuid4())
props = pika.BasicProperties(reply_to=self.callback_queue,
correlation_id=self.correlation_id)
self.channel.basic_publish(exchange=AMQP_EXCHANGE,
routing_key=BINDING_STATISTICS,
body=json.loads(s=metadata),
properties=props)
while self.response is None:
self.conn_broker.process_data_events()
return self.response
И этот фрагмент кода иллюстрирует POST
конечную точку API для доступа к ресурсам после утверждения авторизации, хотя она еще не реализована. Это metadata
должны быть параметры, полученные из этого request
.
def post(self):
items = info(args=request.get_json()['params'])
return {'data': items}
Я хочу убедиться, что все api должны быть авторизованы через request_authz
. Другими словами, все api должны быть response
возвращены, request_authz
что указывает, авторизован он или нет. Как это сделать по-питоновски (например, с помощью декоратора)?
Комментарии:
1. Вы можете использовать
if value > 0
, или есть какая-то причина, по которой вы пытаетесь избежать этого? Если вам нужна отдельная функция, сократите код доreturn value > 0
. Другая область упрощения заключается в том, чтоfunc1
иfunc2
, похоже, делают то же самое, только с разными операторами печати. Есть о чем подумать.
Ответ №1:
Вы могли бы сообщить print
s одной функции:
def util(value):
if value > 0:
return True
else:
return False
def check_value(value, value_type):
if util(value):
print('%s is %s' % (value_type, str(value)))
else:
print('%s must be positive' % value_type)
def func1(value):
check_value(value, 'perimeter')
def func2(value):
check_value(value, 'area')
Более того, util
функция может быть сведена к:
def util(value):
return value > 0
Комментарии:
1. Извините, я обновил этот пост для фактического сценария. Но я надеюсь, что на этот раз я задам свой вопрос :).
Ответ №2:
Функция util может быть сведена к
def util (value):
return value > 0
Возврат будет таким же. В оригинале вы говорите
if value > 0:#If condition is true return True, if not return False
return True
else:
return False
Проще просто вернуть результат сопоставления