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中iframe请求报错的问题

    view.py与urls.py中的请求方法配置好了之后,在iframe调用,报如下错误: Refused to display ‘http://localhost:8000/welcome’ in a frame because it set ‘X-Frame-Options’ to ‘deny’. 解决办法: 在setting.py中加上: X_FRAME…

    Django 2023年4月11日
    00
  • django搭建项目配置环境和创建表过程详解

    下面是关于“django搭建项目配置环境和创建表过程详解”的完整攻略,其中会包含两个示例: 搭建环境 首先,您需要确保您的系统上已经安装了Python。如果没有,请从官方网站下载并安装对应版本的Python。 接下来,您需要安装Django。可以使用以下命令来安装Django: pip install django 安装完成后,您需要创建一个新的Django…

    Django 2023年5月16日
    00
  • [Django]用户权限学习系列之Permission权限基本操作指令

    若需建立py文件进行测试,则在文件开始加入以下代码即可 #coding:utf-8 import os os.environ.setdefault(“DJANGO_SETTINGS_MODULE”, “www.settings”) ”’ Django 版本大于等于1.7的时候,需要加上下面两句 import django django.setup() 否则…

    Django 2023年4月10日
    00
  • Django – 权限(5)- 非菜单权限对应的一级菜单展开、面包屑导航

    一、非菜单权限对应的一级菜单展开   需求:客户列表和账单列表页面中都有添加按钮,当点击添加客户(或编辑客户、删除客户)时,客户列表所属的一级菜单展开,当点击添加账单(或编辑账单、删除账单)时,账单列表所属的一级菜单展开。 1、permission表新增一个pid字段,表示非菜单权限的父级菜单权限id,permission模型类如下: class Permi…

    Django 2023年4月10日
    00
  • Django搭建项目实战与避坑细节详解

    让我来详细讲解一下Django搭建项目实战与避坑细节详解的完整攻略。 1. 安装Django 首先,你需要在本地环境中安装Django。在命令行中运行以下代码: pip install Django 这将安装最新版本的Django。如果你想要安装特定版本的Django,可以使用以下命令: pip install Django==2.2.7 2. 创建并运行D…

    Django 2023年5月16日
    00
  • Django缓存机制–rest_framework中节流源码使用的就是django提供的缓存api

    一、配置缓存  https://www.jb51.net/article/124434.htm 二、缓存全站、页面、局部   三、自我控制的简单缓存API API 接口为:django.core.chache 存接口:cache.set(key, value, time_out) 取接口:cache.get(key) django中的低层次缓存API 有些时…

    Django 2023年4月10日
    00
  • Django执行指定脚本的几种方法

    在Django中,执行指定脚本有如下几种方法: 1. 使用 Django 的 manage.py 执行命令: Django框架提供了一个名为 “manage.py” 的工具,它能够轻松地管理 Django 项目。在项目根目录下,使用终端运行以下命令行: python manage.py shell < script.py 其中,<符号后面跟着要执…

    Django 2023年5月16日
    00
  • Django Auth应用实现用户身份认证

    Django Auth应用是Django官方提供的一个用户认证应用,可以用于实现用户的注册、登录、注销等功能。本文将介绍如何使用Django Auth应用实现用户身份认证的完整方法。 安装Django Auth应用 首先需要安装Django Auth应用,可以使用pip安装: pip install django-auth 或者在项目的requirement…

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