Я пытаюсь найти шаблон для возврата разных HttpResponse
на основе проверок в моей функции Python Azure, инициируемой HTTP.
Пример:
import azure.functions as func
def main(req: func.HttpRequest) -> func.HttpResponse:
logging.info('####### HTTPS trigger processing an event... #######')
def get_request_headers():
thing_id = req.headers.get("thing-id")
req_host_ip = req.headers.get("X-FORWARDED-FOR")
return thing_id, req_host_ip
def check_thing_id_hdr(thing_id):
if (
thing_id != None
and thing_id.isnumeric() == True
and len(thing_id) == 20
):
return True
else:
# DO I RETURN THE HTTPRESPONSE HERE?
return func.HttpResponse(
'Thing ID header is malformed',
status_code = 404
)
def check_req_host_ip_hdr(req_host_ip):
if (
req_host_ip.split(':')[0] != None
):
return True
else:
# DO I RETURN THE HTTPRESPONSE HERE?
return func.HttpResponse(
'Host IP header is malformed',
status_code = 404
)
request_headers = get_request_headers()
if (check_thing_id_hdr(request_headers[0]) == True:
check_req_host_ip_hdr(request_headers[1])
else:
logging.error('####### Thing ID header failed check. #######')
# OR DO I DEFINE THE HTTPRESPONSE HERE?
func.HttpResponse(
'Thing ID header is malformed',
status_code = 404
)
# OR DO I SOMEHOW DEFINE THE CUSTOM RESPONSE HERE?
return func.HttpResponse(
'Custom Message HERE',
status_code = Custom Status Code HERE
)
Я пробовал вышеуказанные шаблоны вместе с обертыванием всех внутренних функций большим try:
-except:
, но ни один из них не возвращает пользовательское сообщение.
Пожалуйста, порекомендуйте.
Код ниже, что вы хотите?
import logging
import azure.functions as func
def main(req: func.HttpRequest) -> func.HttpResponse:
#For example, use the param as the condition.
condition = req.params.get('condition')
if condition == "success":
return func.HttpResponse(
"Success.",
status_code=200
)
elif condition == "not_success":
return func.HttpResponse(
"Not success.",
status_code=400
)
else:
return func.HttpResponse(
"No condition.",
status_code=404
)
Спасибо вам обоим. Я не знал об этом примере в документах.
В моем function.json
есть часто встречающиеся линии "type": "http", "direction": "out", "name": "$return"
. Однако мой код return func.HttpResponse(status_code=409)
всегда будет возвращать HTTP/200. Выдает ли приведенный выше код Python правильные коды состояния HTTP при вызове функции Azure?
Ой! Есть разница между int(HTTPStatus.CONFLICT)
и HTTPStatus.CONFLICT
.
Сделайте это в функции
main()
. В вашем коде выше это будет ваш третий комментарий. В Справочнике по python для лазурных функций есть простой пример, похожий на то, что вы пытаетесь сделать... Проверьте входящий запрос и соответствующим образом создайте различные исходящие ответы. Начните с этого примера.