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()
函数的完整攻略,希望对你有所帮助。