Пользовательское промежуточное программное обеспечение Django выполняется дважды

#python #django

#python #django

Вопрос:

Я пишу промежуточное программное обеспечение для отслеживания активности пользователя, записывая его в файл; посещенные им страницы, нажатые кнопки и так далее, и тому подобное. Чтобы протестировать мое промежуточное программное обеспечение, я пока просто записываю сообщение в файл. Но по какой-то причине сообщение записывается в файл дважды. И я нахожусь на django 1.11

Вот мое промежуточное программное обеспечение:

 from django.http import HttpResponse
import datetime


class TodoappMiddleware(object):
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        f = open("--my file path--", 'a')
        date_and_time = datetime.datetime.now()
        f.write('n')
        f.write(str(date_and_time))
        f.write('tMiddleware successfully executedn')
        f.close()

        response = self.get_response(request)

        return response
  

РЕДАКТИРОВАТЬ: Узнал, что перенаправление заставляет промежуточное программное обеспечение выполняться дважды.
Вот мои взгляды, которые используют HttpResponseRedirect

 def login_user(request):
    if request.method == 'POST':
        login_form = Login(request.POST)
        if login_form.is_valid():
            email = login_form.cleaned_data['email']
            password = login_form.cleaned_data['password']
            User.objects.get(email=email)
            user = authenticate(email=email, password=password)
            if user is not None:
                if user.is_active:
                    login(request, user)
                    return HttpResponseRedirect(reverse('dashboard'))
                else:
                    return HttpResponse("<h2>Waiting for admin to authenticate you</h2>")
        else:
            return render(request, 'registration/login.html', {'errors': login_form.errors})

    return render(request, 'registration/login.html', {'form': Login()})


@login_required
def logout_user(request):
    logout(request)
    return redirect('login_user')
  

Какие изменения мне нужно внести, чтобы промежуточное программное обеспечение выполнялось только один раз?

Комментарии:

1. какая часть страницы выполняется дважды? Это все f.writes или только одно?

2. Все. До и после запроса.

3. Одной из причин может быть то, что ваше промежуточное программное обеспечение указано дважды. Пожалуйста, опубликуйте MIDDLEWARE настройку. Другое могло бы быть, если бы вы использовали перенаправления, чтобы каждый запрос заканчивался как два запроса.

4. Да, вы правы, я использую HttpResponseRedirect для перенаправления пользователя на панель управления его учетной записью после успешного входа в систему. Итак, как это можно обойти сейчас?

5. Ну, что ты хочешь сделать? Большинство фреймворков ведения журнала действительно рассматривали бы их как два отдельных запроса. Или вы не могли регистрировать перенаправления, или вы могли выбрать одно из различных других правил. Пожалуйста, отредактируйте вопрос, добавив эту новую информацию о перенаправлениях и о том, каково ваше желаемое поведение.