Страница регистрации всегда перенаправляется на страницу входа, даже если при регистрации возникают ошибки - PullRequest
0 голосов
/ 25 июня 2019

Я работаю над страницей регистрации для пользователей.Он работает нормально, за исключением процесса, когда есть ошибки в представленной форме.После нажатия кнопки signup страница перенаправляется на login с уведомлением username or password mismatch.Это уведомление, введенное мной на странице login, если есть какие-либо ошибки.

внутри views.py

def signup(request):
    if request.method=='POST':
        form =SignupForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('login')
        else:
            error=form.errors
            return render(request,'registration/signup.html',{'error':error})

            #return redirect('signup',{'error':error})
    else:
        form = SignupForm()
        return render(request,'registration/signup.html',{'form':form})

мой шаблон для signup.html:

{% extends 'blog/base.html' %}
{% block content %}
  <h2>Sign up</h2>
  <form method="post" action="{% url 'login' %}">
    {% csrf_token %}
    {% if form.errors %}
        <h1>Error {{error}}</h1>
        {{ error }}
    {% endif %}
    {{ form.as_p }}
      <button type="submit">Sign up</button>
  </form>
{% endblock %}

path('signup/',views.signup,name='signup') path('accounts/login/',LoginView.as_view(), name='login')

форма длярегистрация:

class SignupForm(UserCreationForm):
    first_name=forms.CharField(label="First Name",widget=forms.TextInput(attrs={'placeholder': 'First Name'}))
    last_name=forms.CharField(label='Last Name')

    #Removes the help_texts
    def __init__(self, *args, **kwargs):
        super(SignupForm, self).__init__(*args, **kwargs)
        self.fields['password1'].help_text = None


    class Meta:
        model=User
        fields=('first_name','last_name','username','email','password1','password2')

Почему это происходит?Как я могу отобразить ту же страницу регистрации для пользователя с дополнительной информацией об отображении ошибок.как **some_error** happened. Please fill out the form again.И почему эта страница перенаправляется на страницу входа в каждом случае и почему на странице входа отображаются ошибки, когда предполагается, что ошибки отображаются на той же странице?

Ответы [ 3 ]

1 голос
/ 27 июня 2019
def signup(request):
    if request.method=='POST':
        form =SignupForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('login')


    else:
        form = SignupForm()
    return render(request,'registration/signup.html',{'form':form})

Просто сделай это как финал return(return(your main template)). Он будет просто загружать форму каждый раз, несмотря ни на что. ПРИМЕЧАНИЕ - Удалить action="{% url%}. Это причина, по которой вы просто заходите на страницу login каждый раз.

0 голосов
/ 25 июня 2019

Последний результат рендеринга должен соответствовать выражению if;у тебя слишком много вкладок.Сделайте это так:

def signup(request):
        form = SignupForm()
        if request.method=='POST':
            form =SignupForm(request.POST)
            if form.is_valid():
                form.save()
                return redirect('login')
            else:
                error=form.errors
                return render(request,'registration/signup.html',{'error':error})

        return render(request,'registration/signup.html',{'form':form})
0 голосов
/ 25 июня 2019

Вы должны поместить {{ error }} в цикл for, например:

{% if form.errors %}
  {% for error in form.errors %}
    <h1>Error {{error}}</h1>
    {{ error }}
  {% endfor %}
{% endif %}

Вот соответствующий раздел из документов

...