Как передать разные ответы HttpResponse в функции Python Azure?

Я пытаюсь найти шаблон для возврата разных 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:, но ни один из них не возвращает пользовательское сообщение.

Пожалуйста, порекомендуйте.

Сделайте это в функции main(). В вашем коде выше это будет ваш третий комментарий. В Справочнике по python для лазурных функций есть простой пример, похожий на то, что вы пытаетесь сделать... Проверьте входящий запрос и соответствующим образом создайте различные исходящие ответы. Начните с этого примера.

Troy Witthoeft 15.12.2020 04:54
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
253
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Код ниже, что вы хотите?

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
        )

Спасибо вам обоим. Я не знал об этом примере в документах.

ericOnline 15.12.2020 17:34

В моем function.json есть часто встречающиеся линии "type": "http", "direction": "out", "name": "$return". Однако мой код return func.HttpResponse(status_code=409) всегда будет возвращать HTTP/200. Выдает ли приведенный выше код Python правильные коды состояния HTTP при вызове функции Azure?

Jari Turkia 30.08.2022 10:42

Ой! Есть разница между int(HTTPStatus.CONFLICT) и HTTPStatus.CONFLICT.

Jari Turkia 30.08.2022 11:11

Другие вопросы по теме