Django实现表单验证

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技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • django基础之day08,利用bulk_create 批量插入成千上万条数据

    bulk_create批量插入数据 models.py文件 class Book(models.Model): title=models.CharField(max_length=32) urls.py文件 from app01 import views urlpatterns = [ url(r’^admin/’, admin.site.urls), #首…

    Django 2023年4月12日
    00
  • 浅谈Django的缓存机制

    当用户访问Django站点时,站点会执行非常多的代码来渲染页面。 如果每次都重新执行这些代码,将会影响站点的性能和用户的体验。为了优化性能,Django提供了一种缓存机制,可以将结果缓存到内存或文件系统中,从而减少重复执行代码的时间。 缓存机制的几种实现方式 Django的缓存机制支持多种后端,可以选择使用内存或文件系统等多种方式储存缓存数据。Django官…

    Django 2023年5月16日
    00
  • django 操作前端数据

    django 利用json处理前端页面数据,FLASK当中也同样   def create_company(request):if request.user.is_superuser:custom_list = Custom.objects.all()compclass_list = Compclass.objects.all()custom_list = …

    Django 2023年4月12日
    00
  • Anaconda+django写出第一个web app(二)

    今天开始建立App中的第一个Model,命名为Tutorial. Model的定义在main文件夹下的models.py中通过类进行,我们希望Tutorial这个model包含三个属性:标题、内容和发布日期,因此修改models.py的内容如下: from django.db import models # Create your models here. …

    Django 2023年4月11日
    00
  • 第四篇Django之模板语言

    一 模板的执行 模板的创建过程,对于模板,其实就是读取模板(其中嵌套着模板的标签),然后将Model中获取的数据插入到模板中,最后将信息返回给用户 def current_datetime(request): now = datetime.datetime.now() html = “<html><body>It is now %s.…

    Django 2023年4月16日
    00
  • 3. 投票 案例项目(合集)

    3.投票-1创建项目和子应用 创建项目 命令 $ python django-admin startproject mysite 目录结构 mysite/ # 项目容器、可任意命名 manage.py # 命令行工具 mysite/ # 纯 Python 包 # 你引用任何东西都要用到它 __init__.py # 空文件 告诉Python这个目录是Pyth…

    2023年4月10日
    00
  • Django REST Framework教程:快速入门

    我们将创建一个简单的允许管理员用户查看和编辑系统中的用户和组的API。 项目设置 利用pycharm创建一个名为 tutorial 的新django项目,并创建一个名为 quickstart 的新app。   目录结构        在创建的虚拟环境中安装Django REST framework pip install djangorestframewor…

    Django 2023年4月13日
    00
  • django文档学习之applications使用详解

    “Django文档学习之applications使用详解”是一篇介绍如何使用应用程序(Applications)的文章。应用程序是Django中的一个重要概念,它是一组处理某个特定功能的代码集合,可以提供一些通用的功能,如用户注册、数据展示、认证等,而这些功能都可以在不同的Django项目中复用。 该文章主要包括以下几个方面: 一、应用程序(Applicat…

    Django 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部