python - 如何在 UI 中显示 Django ValidationError

标签 python django validationerror

每当密码和密码确认不相同时,我对如何在注册页面中显示 ValidationError 感到困惑,而不是将我发送到显示 ValueError 和其他内容的页面。但是,当我到达管理员时,它肯定显示了 ValidationError。有什么帮助吗?这是我的代码

表单.py

from django.core.exceptions import ValidationError
from django.core.validators import RegexValidator

`来自 django.core 导入验证器

class AccountForm(UserCreationForm):
 email = forms.EmailField(required=True)

class Meta:
    model = User
    fields = ("username", "email", "password1", "password2")

    # def save(self, commit=True):
    #   user = super(AccountForm, self).save(commit=False)
    #   user.email = self.cleaned_data["email"]
    #   if commit:
    #       user.save()
    #   return user



    def clean_password2(self):
        password1 = self.cleaned_data.get("password1")
        password2 = self.cleaned_data.get("password2")

        if not password2:
            raise forms.ValidationError(
            self.error_messages['Must   input Password Confirmation'],
                code='Password_Confirmation_empty')
        if password1 != password2:
            raise forms.ValidationError(
              self.error_messages['Passwords do not match.'],
                code='password_mismatch')

      password_validation.validate_password(
     self.cleaned_data.get('password2'), self.instance)
        return password2

    def save(self, commit=True):
        user = super(AccountForm,self).save(commit=False)
        user.email = self.cleaned_data["email"]
        user.set_password(self.cleaned_data["password1"])

        if commit:
            user.save()
        return user

View .py

      from django.contrib.auth.forms import UserCreationForm
      from django.contrib.auth.models import *
      from django.contrib          import messages
      from django.core import validators

     def signup(request):

if request.method == 'POST':    
    form = AccountForm(request.POST)    
    # form = UserCreationForm(request.POST)
    if form.is_valid:
        username = request.POST.get("username")
        email = request.POST.get("email")
        password1 = request.POST.get("password1")
        password2 = request.POST.get("password2")

        # form.clean_password2()
        form.save()

    return HttpResponseRedirect('/login/')
else:
    form = AccountForm()
    # form = UserCreationForm()

return render(request, 'accounts/signup.html', {'form':form})

注册.html

        {% extends "base_accounts.html" %}
        {% load staticfiles %}

         {% block content %}
         <div class="row">
         <div class="col-md-6 col-md-offset-3 text-center">
             <h2>JCREL INVENTORY</h2>
                      </div>
                         </div>
                  <div class="row">
                       <div class="col-md-6 col-md-offset-3">
                   <div class="panel panel-default">
                   <div class="panel-heading">Register</div>
                      <div class="panel-body">
      <form action="/signup/" class="form" method="POST">
        {% csrf_token %}
        {% if form.errors %}
            {% for field in form %}
              {{field.ValidationError}}
            {% endfor %}
          {% endif %}

          <!-- {{ form.as_p }} -->

        <div class="form-group">
          <label>Username</label>
          <input name="username" type="text" 
               class="form-control" required autofocus>
        </div>
        <div class="form-group">
          <label>Email</label>
          <input name="email" type="text" 
            class="form-control" required autofocus>
        </div>
        <div class="form-group">
          <label>Password</label>
        <!-- {{ form.ValidationError }} -->
          <input name="password1" 
             type="password" id="inputPassword" 
               class="form-control" required>
        </div>
        <div class="form-group">
          <label>Confirm Password</label>
        <!-- {{ form.ValidationError }} -->
          <input name="password2" type="password" 
           id="inputPassword" class="form-control" required>
        </div>
        <!-- {{form}} -->
        <div class="form-group">
          <input type="submit" 
        class="form-control btn btn-primary btn-block" 
             value="Sign Up" />
          <input type="hidden" name="next" value="{{ next }}" />
        </div>
        <div class="form-group">
          <hr>
          <p>Already have an account?</p>
          <a href="/login" class="btn btn-default btn-block">Login</a>
        </div>
      </form>
                </div>
                  </div>

             </div>
         </div>

{%末端嵌段含量%}

最佳答案

每当表单中出现错误时,您都可以通过 name_of_the_form.errors 访问错误列表(在 View 中)(在您的情况下,它将是 form.errors )。然后,您可以迭代此列表并打印出 message 属性(例如 error.message)

关于python - 如何在 UI 中显示 Django ValidationError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33855308/

相关文章:

python - Python中类名后面括号之间的区域叫什么名字?

python - 如何捕获 Try/Catch Block Python 中的所有异常?

Python:未读取命令行参数?

django - Azurewebsite django URL 重写另一个应用程序

python - 在 Django 模板中替代 {% if request.user.is_active %}

html - Codeigniter - 显示数组字段的个别错误消息

c# - 使用 System.Reflection 时验证异常时出错

python - 如何覆盖 python 库的函数?

python - 如何设置一个带有一个参数和字母数字字符串的 url?

php - 如何在 Zend Framework 2 中向表单添加错误消息?