Устранение неполадок 5 секунд задержки в отправке формы

Я создал очень простую форму для регистрации пользователей, требуя, чтобы они вводили свою электронную почту, имя пользователя и пароль. С момента нажатия кнопки "Отправить" до момента, когда форма фактически отправляется, задержка составляет ~5 секунд. Как я могу понять, что здесь происходит? Вот что я пробовал до сих пор:

Django Debug Toolbar - Профилирование:

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

Javascript

Я прикрепил некоторые индикаторы выполнения Javascript, используя NProgress. Интересно отметить, что индикатор выполнения запускается только после 5-секундной задержки. Вот HTML (класс orange-bt только форматирует):

<form class="register-form" method="POST" action="/register/">
    {% csrf_token %}
    {{ form.as_p }}
    <input class="progress-bar orange-bt" type="submit" value="Register">
</form>

И немного Javascript внизу:

<script>
    $(".progress-bar").click(function() { NProgress.start(); });
</script>

views.py

Я вставил несколько строк печати в консоль при устранении неполадок, и кажется, что задержка происходит прямо перед строкой if request.method == 'POST'. Все действия в операторе POST if выполняются достаточно быстро после 5-секундной задержки, но я не могу понять, что задерживает их выполнение в течение этих 5-ти секунд. Это сводит меня с ума!

@render_with('users/register.html')
def register(request, user_id=None):
    """
        Register page that tracks referal
        handle post request for registering new users via normal registration
    """

    if not request.user.is_anonymous():
        return HttpResponseRedirect('/dashboard/')

    #Storing invited_by in user session if they were invited to register
    if user_id:
        user = get_object_or_404(User, pk=user_id)
        request.session['invited_by'] = user.pk
    else:
        user = None

    settings = WeHealthSetting.objects.all().last()

    if request.method == 'POST':
        form = RegisterForm(request.POST)
        if form.is_valid():
            # Handling POST data
            username = form.cleaned_data['username']
            email = form.cleaned_data['email']
            password = form.cleaned_data['password']

            # Assign form data to the User model
            user = User()
            user.username = username
            user.email = email
            user.set_password(password)
            user.registration_type = 1
            user.is_active = True

            #Save the user
            user.save()

            #Subscribe to mailchimp
            subscribe_to_mailchimp('336395d8de', user.email)

            #Login user
            user = authenticate(username=username, password=password)
            if user:
                if user.is_active:
                    login(request, user)

            #Send welcome email
            url = '/register/%d/' % (request.user.pk)
            send_email('initial_email','Invite from WeHealth', request.user.email,
                         ['initial_email'],
                         [  
                            dict(name='url', content=str(url))
                         ]
             )

            #Direct to Dashboard
            return HttpResponseRedirect('/dashboard/')

        else:
            return dict(invited_by=user, form=form, settings=settings)
    else:
        form = RegisterForm()

    return dict(invited_by=user, form=RegisterForm, settings=settings)

forms.py

Вот формы. Может ли процесс проверки быть причиной задержки?

class RegisterForm(forms.Form):
    username = forms.CharField(required=True,  widget=forms.TextInput(attrs={'class':'form-input', 'placeholder': 'Username (for your profile)', 'autocomplete':'off'}))
    email = forms.EmailField(required=True,  widget=forms.EmailInput(attrs={'class':'form-input', 'placeholder': 'Email (will not show on profile)'}))
    password = forms.CharField(widget=forms.PasswordInput(attrs={'class':'form-input', 'placeholder': 'Password'}), required=True)

    def clean_username(self):
        username = self.cleaned_data["username"]
        try:
            user = User.objects.get(username__iexact=username)
        except User.DoesNotExist:
            if is_valid_username(username):
                return username
            else:
                raise forms.ValidationError("Invalid username")
        raise forms.ValidationError("Username in use")

    def clean_email(self):
        email = self.cleaned_data['email']
        try:
            user = User.objects.get(email=email)
        except User.DoesNotExist:
            return email
        raise forms.ValidationError("Email in use")

ОБНОВИТЬ

Я сузил проблему до этого валидатора Javascript, который я использую. Это нормально для валидатора, чтобы занять 5 секунд, чтобы сделать свою работу? Это индикатор того, что я как-то неправильно его использую? Есть ли лучшие альтернативы?

0 ответов

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