Django是一款成熟的web开发框架,其内置了表单验证机制,方便我们实现表单数据的验证。下面就来详细讲解Django实现表单验证的完整攻略。
1. 创建表单类
首先,我们需要创建一个表单类,在models.py中定义表单字段,例如:
from django import forms
class LoginForm(forms.Form):
username = forms.CharField(max_length=20)
password = forms.CharField(max_length=20)
在这个表单类中,我们定义了两个字段,一个是username用来接收用户名;一个是password用来接收密码。可以看到,我们使用Django提供的CharField来定义这两个字段,并设置了最大长度为20。
2. 渲染表单
接下来,在views.py中,我们需要将表单类实例化,并将实例化后的表单对象传入到login.html中渲染:
from django.shortcuts import render
from .forms import LoginForm
def login(request):
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
# do something
pass
else:
form = LoginForm()
return render(request, 'login.html', {'form': form})
在这个视图函数中,我们首先判断请求方式是否为POST,如果是POST请求,则将请求数据传入表单对象中,形成一个绑定的表单对象。接着使用is_valid()
方法验证表单数据是否合法。
如果数据合法,则可以在if form.is_valid():
后执行表单的保存操作,如果数据不合法,则会自动显示错误信息,这也是Django内置表单验证机制的最大优点之一。
如果请求方式不是POST,则说明这是第一次访问该页面,我们需要创建一个空表单对象传给模板。
同时,在模板中也需要进行对应渲染:
<form method="post">
{% csrf_token %}
{{ form.username }}<br>
{{ form.username.errors }}<br>
{{ form.password }}<br>
{{ form.password.errors }}<br>
<input type="submit" value="Submit">
</form>
在模板中,我们使用{{ form.字段名 }}
的方式渲染表单,同时也可以使用{{ form.字段名.errors }}
来渲染表单验证失败时的错误信息。
示例1:判断是否为空
下面我们来演示一下如何对表单数据进行判断,假设我们需要对username和password进行非空判断,只有当都不为空时才允许提交。
实现方法如下:
class LoginForm(forms.Form):
username = forms.CharField(max_length=20)
password = forms.CharField(max_length=20)
def clean(self):
cleaned_data = super().clean()
username = cleaned_data.get('username')
password = cleaned_data.get('password')
if not username or not password:
raise forms.ValidationError('请填写必填项')
在这个表单类中,我们重写了clean()
方法,通过super()
方法获取到表单数据的字典,并通过get()
方法获取到对应的数据。接着判断这两个字段是否都不为空,如果有空,则抛出forms.ValidationError()
异常,并传入错误信息。这个异常将会自动在表单中进行渲染。
示例2:判断唯一性
如果我们需要对表单中的某个字段进行唯一性验证,该怎么实现?
例如,我们需要对username字段进行唯一性验证:
from django.core.exceptions import ObjectDoesNotExist
class LoginForm(forms.Form):
username = forms.CharField(max_length=20)
password = forms.CharField(max_length=20)
def clean_username(self):
username = self.cleaned_data['username']
try:
user = User.objects.get(username=username)
raise forms.ValidationError('用户名已经存在')
except ObjectDoesNotExist:
pass
return username
在这个表单类中,我们定义了一个clean_username()
方法,该方法会在验证username字段时调用。在该方法中,我们首先使用self.cleaned_data['username']
的方式获取到username字段的值。
然后使用try...except...
结构查询数据库中是否已经存在该用户名,如果存在,则抛出forms.ValidationError()
异常,并传入错误信息。如果不存在,则不进行任何操作。
最后,一定要记得返回username的值,以便在后续的操作中进行使用。
通过以上两个示例的讲解,相信你已经了解了Django如何实现表单验证的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django实现表单验证 - Python技术站