Django实现表单验证

yizhihongxing

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日

相关文章

  • Python的Django框架安装全攻略

    Python的Django框架安装全攻略 简介 Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型(Model)、视图(View)和模板(Template),使得数据的管理更加简单。 本文旨在介绍Django框架的安装步骤,以及如何通过示例说明来体验Django框架的使用。 安装步骤 检查Python环境 在安装…

    Django 2023年5月16日
    00
  • Django通用视图APIView和视图集ViewSet的介绍和使用(Django编程-1)

    1.APIView DRF框架的视图的基类是 APIViewAPIView的基本使用和View类似 Django默认的View请求对象是 HttpRequest,REST framework 的请求对象是 Request。Request对象的数据是自动根据前端发送数据的格式进行解析之后的结果。HttpRequest.GET ————> Request.…

    Django 2023年4月11日
    00
  • django的json返回值带有汉字的处理

    原因:simpleJson把utf-8编码的字符串直接转成了unicode,但却是按字节来转的,不是真正的unicode 下面是转化为unicode的代码 from django.http import HttpResponse from django.utils import simplejson from django.conf import setti…

    Django 2023年4月13日
    00
  • Django 权限认证(根据不同的用户,设置不同的显示和访问权限)

    为了实现 Django 权限认证,我们需要做以下几个步骤: 开启认证系统 在 Django 项目中,我们需要启用认证系统,以便实现权限认证。在 settings.py 文件中,需添加以下代码: INSTALLED_APPS = [ … ‘django.contrib.auth’, ‘django.contrib.contenttypes’, ‘djang…

    Django 2023年5月16日
    00
  • 简单了解django orm中介模型

    当我们使用Django ORM时,有时候会用到中介模型(也称为中间模型或连接模型)。中介模型提供了一种有效的方式来处理多对多关系中各对象之间的关系。下面,我将一步一步地介绍如何使用中介模型。 什么是 Django ORM 中介模型 中介模型是一种在Django ORM中处理多对多关系的方法。中介模型本质上是一个模型类,它代表了两个其他模型类之间的关系,它通常…

    Django 2023年5月16日
    00
  • django之“static”全局设置

    1. 首先要配置静态文件路径(这些文件不输入任何app):、 # 设置静态文件读取路径(这些静态文件不属于任何app) STATICFILES_DIRS = [ os.path.join(BASE_DIR, ‘front’, ‘dist’)#路径 ] 2. 在 settings.py 文件中 TEMPLATES 下新增节点:’builtins’:[‘djan…

    Django 2023年4月13日
    00
  • Django 中的 Truncate Filter

    在1.4版本以前,内置的 Truncate Filter 只有两种:trancatewords 和 trancatewords_html 。 这里的截断过滤器根据空格为分界符,所以就显得不是很灵活! 1.4版本后有了新的filter:truncatechars   。 这个就能满意要求了。 但如果你是1.4版本以前的,不要沮丧,可以自己写一个。 这里举个例子…

    Django 2023年4月13日
    00
  • Django Admin后台管理系统是什么?如何使用?

    Django Admin后台管理系统是什么? Django是一个高级Web框架,提供了一系列组件和工具,帮助开发人员快速开发高质量的Web应用程序。 其中,Django Admin是Django框架的一个常用组件之一,提供了一个易于使用的后台管理系统,方便了用户管理数据和应用程序的操作。 简单来说,Django Admin后台管理系统就是一个Web应用程序的…

    2023年3月11日
    00
合作推广
合作推广
分享本页
返回顶部