Проверьте, сколько раз пост был назван - PullRequest
0 голосов
/ 09 марта 2019

Исходя из моего кода ниже, этот код в моей программе вызывался несколько раз, и я хочу знать, как мы можем отследить, сколько раз было вызвано сообщение post, получить этот счетчик и вернуть один ответ, возвращающий Response("You received 5(the total count def post was called) questionaire.", status=status.HTTP_200_OK). Вместо того, чтобы возвращать ответ каждый раз, когда вызывается def сообщение. Можем ли мы использовать счетчик, чтобы определить, сколько раз он был вызван?

код

 def post(self, request):
    data = request.data
    print(data)
    questionaires_ins = QuestionaireModel.objects.get(random_code=data["random_code"])
    questionaires_ser = QuestionaireSerializer(questionaires_ins)
    questionaires_ser = questionaires_ser.data

    for applicant in data["users"]:
        user_ins = User.objects.get(id=applicant["basic_info"]["user_id"])
        user_ser = UserSerializer(user_ins)
 .......
        email_ins = Email()
        email_ins.share_questionaire_link(data_to_send)

    return Response("You received a questionaire.", status=status.HTTP_200_OK)

Ответы [ 2 ]

0 голосов
/ 09 марта 2019

Если вы не хотите определять глобальную переменную наподобие того, что было сказано @Aeossa, вы можете определить декоратор следующим образом:

def call_counter(func):
    def helper(*args, **kwargs):
        helper.calls += 1
        return func(*args, **kwargs)
    helper.calls = 0
    helper.__name__= func.__name__
    return helper

и использовать его вне своей функции следующим образом:

@call_counter
def post(self, request):
            data = request.data
            print(data)
            questionaires_ins = QuestionaireModel.objects.get(random_code=data["random_code"])
            questionaires_ser = QuestionaireSerializer(questionaires_ins)
            questionaires_ser = questionaires_ser.data

            for applicant in data["users"]:
                user_ins = User.objects.get(id=applicant["basic_info"]["user_id"])
                user_ser = UserSerializer(user_ins)
         .......
                email_ins = Email()
                email_ins.share_questionaire_link(data_to_send)

            return Response("You received a questionaire.", status=status.HTTP_200_OK)

после этого каждый раз, когда вы вызываете функцию post, вы можете получить доступ к числу звонков через calls.например:

post(SomeRequest)
post(AnotherRequest)
print (post.calls)

# returns 2

для получения дополнительной информации, пожалуйста, прочитайте эту ссылку: https://www.python -course.eu / python3_count_function_calls.php

0 голосов
/ 09 марта 2019

Я думаю, что вы можете сделать это так:

count = 0
def myFunction(args):
    #Code
    global count
    count += 1
    return f'This function was called {count} times'

Редактировать: Вот как вы бы это реализовали в своем коде:

count = 0
def post(self, request):
    data = request.data
    print(data)
    questionaires_ins = QuestionaireModel.objects.get(random_code=data["random_code"])
    questionaires_ser = QuestionaireSerializer(questionaires_ins)
    questionaires_ser = questionaires_ser.data

    for applicant in data["users"]:
        user_ins = User.objects.get(id=applicant["basic_info"]["user_id"])
        user_ser = UserSerializer(user_ins)


        .......
        email_ins = Email()
        email_ins.share_questionaire_link(data_to_send)

        global count
        count += 1

        return Response(f"You received {count} questionaire.", status=status.HTTP_200_OK)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...