即使在注册过程中发生错误,注册页面也始终会重定向到登录页面

时间:2019-06-25 20:03:39

标签: django django-models django-forms django-templates django-views

我正在为用户注册页面。除了引入的表格有错误之外,该过程还可以正常工作。按下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 个答案:

答案 0 :(得分:1)

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页的原因。

答案 1 :(得分:0)

您应将{{ error }}放入for循环中,如下所示:

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

这里是relevant section from the docs

答案 2 :(得分:0)

最后一个渲染返回必须与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})
相关问题