详解Django的 is_valid() 函数:判断表单是否验证成功

  • Post category:Python

Django的is_valid()函数是用来验证表单数据的函数,它的作用是检查表单数据是否合法。通过is_valid()函数可以检查表单数据是否符合字段定义的类型、长度、数据格式等要求,并将验证结果存放在errors属性中。如果表单数据不合法,可以通过errors属性获取详细的错误信息。

使用方法:
1. 在视图函数中获取表单数据并实例化表单对象;
2. 使用is_valid()方法验证表单数据;
3. 如果表单数据合法,保存数据并跳转到目标页面;如果表单数据不合法,返回错误信息。

下面我们通过两个实例来进一步说明。

实例1:用户注册表单
前端页面代码:

<form method="post" action="/register/">
{% csrf_token %}
<label for="username">用户名:</label>
<input type="text" name="username" id="username">
<label for="password">密码:</label>
<input type="password" name="password" id="password">
<label for="confirm_password">确认密码:</label>
<input type="password" name="confirm_password" id="confirm_password">
<input type="submit" value="注册">
</form>

后端视图函数代码:

from django.shortcuts import render
from django.contrib.auth.models import User
from .forms import RegisterForm

def register(request):
    if request.method == "POST":
        form = RegisterForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            user = User.objects.create_user(username=username, password=password)
            return render(request, 'register_success.html')
    else:
       form = RegisterForm()
    return render(request, 'register.html', {'form': form})

表单定义代码:

from django import forms
from django.contrib.auth.models import User

class RegisterForm(forms.Form):
    username = forms.CharField(max_length=50)
    password = forms.CharField(max_length=20, widget=forms.PasswordInput)
    confirm_password = forms.CharField(max_length=20, widget=forms.PasswordInput)

    def clean(self):
        cleaned_data = super().clean()
        password = cleaned_data.get('password')
        confirm_password = cleaned_data.get('confirm_password')
        if password and confirm_password and password != confirm_password:
            raise forms.ValidationError('两次输入的密码不一致!')
        username = cleaned_data.get('username')
        if User.objects.filter(username=username).exists():
            raise forms.ValidationError('该用户名已被注册!')

在这个例子中,我们定义了一个注册表单,包含用户名、密码、确认密码三个字段。我们通过is_valid()函数检查表单数据是否合法,如果不合法,我们将错误信息返回给前端页面。如果合法,我们通过create_user()方法创建用户,然后跳转到注册成功页面。

实例2:图书管理表单
前端页面代码:

<form method="post" action="/book/">
{% csrf_token %}
<label for="name">图书名称:</label>
<input type="text" name="name" id="name">
<label for="author">作者:</label>
<input type="text" name="author" id="author">
<label for="price">价格:</label>
<input type="number" name="price" id="price">
<textarea name="description" id="description"></textarea>
<input type="submit" value="提交">
</form>

后端视图函数代码:

from django.shortcuts import render
from .models import Book
from .forms import BookForm

def add_book(request):
    if request.method == "POST":
        form = BookForm(request.POST)
        if form.is_valid():
            name = form.cleaned_data['name']
            author = form.cleaned_data['author']
            price = form.cleaned_data['price']
            description = form.cleaned_data['description']
            book = Book(name=name, author=author, price=price, description=description)
            book.save()
            return render(request, 'add_book_success.html')
    else:
        form = BookForm()
    return render(request, 'add_book.html', {'form': form})

表单定义代码:

from django import forms
from .models import Book

class BookForm(forms.ModelForm):
    class Meta:
        model = Book
        fields = ['name', 'author', 'price', 'description']

在这个例子中,我们定义了一个图书管理表单,包含图书名称、作者、价格、描述四个字段。我们通过is_valid()函数检查表单数据是否合法,如果合法,我们通过save()方法保存数据到数据库,然后跳转到添加成功页面。

以上就是使用is_valid()函数的完整攻略,希望对你有所帮助。