Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在DefaultUserCreationForm-django中的模板中显示错误消息_Python_Django_Django Forms - Fatal编程技术网

Python 在DefaultUserCreationForm-django中的模板中显示错误消息

Python 在DefaultUserCreationForm-django中的模板中显示错误消息,python,django,django-forms,Python,Django,Django Forms,我在HTML页面中显示错误消息时遇到问题。我使用Django的默认UserCreationForm作为注册页面。它有两个密码字段-一个是原件,另一个是确认密码。当用户输入不同的密码时,我得到/signup/而我希望在HTML页面中显示错误消息,说明密码不匹配。我已经浏览了文档,并在代码中添加了一些相关的行,我不知道哪里出了问题 以下是我的视图.py: def adduser(request): if request.method == 'POST': form = Use

我在HTML页面中显示错误消息时遇到问题。我使用Django的默认UserCreationForm作为注册页面。它有两个密码字段-一个是原件,另一个是确认密码。当用户输入不同的密码时,我得到/signup/而我希望在HTML页面中显示错误消息,说明密码不匹配。我已经浏览了文档,并在代码中添加了一些相关的行,我不知道哪里出了问题

以下是我的视图.py:

def adduser(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        print(request.POST)

        if(form.is_valid):
            try:
                user = employees.objects.get(emp_id=request.POST['username'] )
            except employees.DoesNotExist:
                user = None

            print(user)
            if( user != None ):
                if request.POST['username'] in  employees.objects.values_list('manager_id__emp_id',flat=True):
                    g = Group.objects.get(name='Managers')
                    newuser = form.save()
                    newuser.groups.add(g)
                else:
                    g = Group.objects.get(name='Employees')
                    newuser = form.save()
                    newuser.groups.add(g)

                return render(request,'login.html',{'form': form})
            else:
                form = UserCreationForm()
                return render(request,'signup.html', {'form': form, 'msg': 'Enter valid employee id'})
    else:
        form = UserCreationForm()

        return render(request,'signup.html', {'form': form})
这是我的signup.html:

<body>
    <div class="container">
        <div class="page-header">
            <h1>Sign-up Here</h1>      
        </div>
        {% block body %}


        <form method="post">
          {% csrf_token %}
          <font color="orange" size="5px"><p> * Enter your Employee id, as username * </p></font>
          {{ form.as_p }}
          <font  color="red"> {{ msg }} </font><br>
          <font  color="red"> {{ form.password1.errors }} </font><br>
          <font  color="red"> {{ form.password2.errors }} </font><br>

          <br>
          <button class="btn btn-success" type="submit"> Go! </button>
        </form>

        {% endblock %}    

    </div>
</body>

在这里注册
{%block body%}
{%csrf_令牌%}
*输入您的员工id,作为用户名*

{{form.as_p}} {{msg}}
{{form.password1.errors}}
{{form.password2.errors}}

走! {%endblock%}
问题出在这一行:

if(form.is_valid):
这不是测试表单验证的正确方法, 而是使用:

if form.is_valid():
另外,您不需要多次声明表单,它可以一次性完成。 像这样:

def adduser(request):
    form = UserCreationForm(request.POST or None)
    if request.method == 'POST':
        print(request.POST)
        if form.is_valid():
            try:
                user = employees.objects.get(emp_id=request.POST['username'] )
            except employees.DoesNotExist:
                user = None

            print(user)
            if( user != None ):
                if request.POST['username'] in  employees.objects.values_list('manager_id__emp_id',flat=True):
                    g = Group.objects.get(name='Managers')
                    newuser = form.save()
                    newuser.groups.add(g)
                else:
                    g = Group.objects.get(name='Employees')
                    newuser = form.save()
                    newuser.groups.add(g)

                return render(request,'login.html',{'form': form})
            else:
                form = UserCreationForm()
                return render(request,'signup.html', {'form': form, 'msg': 'Enter valid employee id'})
    return render(request,'signup.html', {'form': form})
{% if form.errors %}
    {% for field in form %}
        {% for error in field.errors %}
            <div class="alert alert-danger">
                <strong>{{ error|escape }}</strong>
            </div>
        {% endfor %}
    {% endfor %}
    {% for error in form.non_field_errors %}
        <div class="alert alert-danger">
            <strong>{{ error|escape }}</strong>
        </div>
    {% endfor %}
{% endif %}
并且可能存在不同类型的错误,场错误和非场错误,因此使用如下方法:

def adduser(request):
    form = UserCreationForm(request.POST or None)
    if request.method == 'POST':
        print(request.POST)
        if form.is_valid():
            try:
                user = employees.objects.get(emp_id=request.POST['username'] )
            except employees.DoesNotExist:
                user = None

            print(user)
            if( user != None ):
                if request.POST['username'] in  employees.objects.values_list('manager_id__emp_id',flat=True):
                    g = Group.objects.get(name='Managers')
                    newuser = form.save()
                    newuser.groups.add(g)
                else:
                    g = Group.objects.get(name='Employees')
                    newuser = form.save()
                    newuser.groups.add(g)

                return render(request,'login.html',{'form': form})
            else:
                form = UserCreationForm()
                return render(request,'signup.html', {'form': form, 'msg': 'Enter valid employee id'})
    return render(request,'signup.html', {'form': form})
{% if form.errors %}
    {% for field in form %}
        {% for error in field.errors %}
            <div class="alert alert-danger">
                <strong>{{ error|escape }}</strong>
            </div>
        {% endfor %}
    {% endfor %}
    {% for error in form.non_field_errors %}
        <div class="alert alert-danger">
            <strong>{{ error|escape }}</strong>
        </div>
    {% endfor %}
{% endif %}
{%if form.errors%}
{%形式的字段为%}
{%字段中有错误。错误%}
{{error | escape}}
{%endfor%}
{%endfor%}
{%表示表单中的错误。非\u字段\u错误%}
{{error | escape}}
{%endfor%}
{%endif%}

什么是表单操作?您的代码中还有一些问题/更正可以更正。@Vicmathur,因为它是一个内置表单,这不是必需的,而且它在不采取操作的情况下运行完全正常。@Prakhartravedi是这样吗?你能指出它们吗?