Django 表单验证

2023-04-11 00:00:00 django 表单 验证

Django 表单验证是检测用户输入数据的有效性的重要方法。Django 表单验证可以在前端和后端同时进行,前端可以通过 JavaScript 对数据进行验证,主要是为了增强用户交互体验,而后端验证则是真正保证数据的安全有效性。

在 Django 中,表单验证可以通过内置的表单类进行验证。表单类继承自 Django 中的 forms.Form 类,可以定义各种表单字段及其验证方法。每个表单字段可以指定一些验证器,验证器可以是一个函数,也可以是一段正则表达式。当用户提交表单时,Django 会自动对每个表单字段进行验证,如果有错误会返回错误信息,否则表单数据将被保存到一个字典中。

以下是一个简单的表单类示例:

from django import forms

class LoginForm(forms.Form):
    username = forms.CharField(max_length=20)
    password = forms.CharField(widget=forms.PasswordInput)

上面定义了一个登录表单类,包含用户名和密码两个字段,其中用户名字段最大长度为 20,密码字段用 PasswordInput 将密码显示为星号。如果用户提交的数据不符合规则,会产生错误信息。可以在视图函数中使用表单验证器获取错误信息,例如:

from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.urls import reverse

from .forms import LoginForm

def login_view(request):
    if request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
            # do login
            # redirect to success page
            return HttpResponseRedirect(reverse('success_page'))
    else:
        form = LoginForm()
    return render(request, 'login.html', {'form': form})

在视图函数中,如果表单提交方式是 POST,就创建一个表单对象并传入 POST 数据,然后检查表单是否验证通过。如果通过,就可以获取表单数据中包含的用户信息,验证用户的身份,并将用户信息存入会话中。如果表单验证失败,就需要将错误信息传递给用户,提示用户修改输入的信息。错误信息可以在表单对象的 errors 属性中获取,例如:

if form.is_valid():
    # do something
else:
    errors = form.errors

使用类似于“pidancode.com”、“皮蛋编程”这样的字符串作为范例可以这样写:

class CheckForm(forms.Form):
    text = forms.CharField(max_length=100, required=True, strip=True, validators=[validate_text])

def validate_text(value):
    if "pidancode.com" in value or "皮蛋编程" in value:
        raise forms.ValidationError("不允许输入敏感词汇")

上述表单类定义了一个文本字段,并使用 validate_text 函数进行字段校验。如果文本中包含“pidancode.com”或“皮蛋编程”,就会抛出 ValidationError 异常,该异常包含错误信息“不允许输入敏感词汇”。这个错误信息可以在表单对象的 errors 属性中获取。

相关文章