详解Django表单系统

Django表单系统是一个强大的工具,可以快速创建各种表单,包括用户注册、登录等。本文将详细介绍Django表单系统的用法,包括表单的创建、验证、视图函数的编写等。

创建表单

我们可以通过继承Django内置的forms.Form类来创建自定义表单。下面是一个简单的登录表单的示例:

from django import forms

class LoginForm(forms.Form):
    username = forms.CharField(label='用户名')
    password = forms.CharField(label='密码', widget=forms.PasswordInput)

这个表单有两个字段,分别是用户名和密码。CharField表示一个字符型字段,label参数指定字段在表单中的标签名称。密码字段使用了PasswordInput小部件来隐藏输入内容。

在视图函数中使用表单

一旦我们创建了表单,就可以在视图函数中使用它了。比如一个登录视图函数,可以这样编写:

from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login
from .forms import LoginForm

def login_view(request):
    if request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            user = authenticate(request, username=username, password=password)
            if user is not None:
                login(request, user)
                return redirect('home')
            else:
                form.add_error('username', '用户名或密码错误')
    else:
        form = LoginForm()
    return render(request, 'login.html', {'form': form})

这个视图函数首先判断请求方法是否为POST。如果是,则将提交的数据传给LoginForm实例进行表单验证。如果表单数据合法,则使用authenticate()函数进行用户认证。如果用户认证成功,则使用login()函数将用户登录,并重定向到首页。如果认证失败,则将用户名字段上添加错误提示信息。

表单验证

默认情况下,表单系统会自动验证表单数据。我们只需要在表单类中定义相应的验证规则即可。比如可以使用min_lengthmax_length属性来限制输入长度:

class RegisterForm(forms.Form):
    username = forms.CharField(min_length=3, max_length=50, label='用户名')
    email = forms.EmailField(label='邮箱')
    password1 = forms.CharField(min_length=6, label='密码', widget=forms.PasswordInput)
    password2 = forms.CharField(min_length=6, label='确认密码', widget=forms.PasswordInput)

    def clean_username(self):
        '''
        验证用户名是否已存在
        '''
        username = self.cleaned_data.get('username')
        if User.objects.filter(username=username).exists():
            raise forms.ValidationError('该用户名已存在')
        return username

    def clean(self):
        '''
        验证两次密码输入是否一致
        '''
        cleaned_data = super().clean()
        password1 = cleaned_data.get('password1')
        password2 = cleaned_data.get('password2')
        if password1 and password2 and password1 != password2:
            raise forms.ValidationError('两次密码输入不一致')

在上面的代码中,我们定义了一个RegisterForm表单,它有四个字段。其中,username字段使用了min_lengthmax_length属性来限制输入长度。clean_username()方法验证了用户名是否已存在,如果已存在则抛出一个表单验证错误。clean()方法验证了两次密码输入是否一致,如果不一致则抛出一个表单验证错误。

表单渲染

要在模板中渲染表单,我们只需要在模板中使用Django内置的{{ form }}模板变量即可。

<form method="post">
  {% csrf_token %}
  {{ form.as_p }}
  <button type="submit">注册</button>
</form>

as_p方法会将表单渲染为一个HTML表格,每个字段都会在一个<p>标签中。我们还可以使用as_tableas_ul方法分别将表单渲染为HTML表格和列表。

<!-- 渲染为表格 -->
<form method="post">
  {% csrf_token %}
  {{ form.as_table }}
  <button type="submit">注册</button>
</form>

<!-- 渲染为列表 -->
<form method="post">
  {% csrf_token %}
  {{ form.as_ul }}
  <button type="submit">注册</button>
</form>

注意,在渲染表单时,我们必须在表单中加入{% csrf_token %}标签,这是Django的CSRF保护措施。

结语

本文中我们介绍了使用Django表单系统的完整攻略,包括表单的创建、验证、视图函数的编写和渲染等。希望这篇文章对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Django表单系统 - Python技术站

(0)
上一篇 2023年3月12日
下一篇 2023年3月12日

相关文章

  • 使用pyinstaller打包django的方法实现

    使用pyinstaller打包Django应用程序的方法是将Django程序打包成可执行的二进制文件,可以在任何没有安装Python的机器上运行。下面是使用pyinstaller打包Django的完整攻略。 准备工作 在开始之前,请确保系统中已经安装了pyinstaller和Django。如果您还没有安装它们,请先安装。 pip install pyinst…

    Django 2023年5月16日
    00
  • Django-权限信息自定义标签

    自定义权限标签: import re from django.template import Library from django.conf import settings register = Library() @register.inclusion_tag(“rbac/xxxxx.html”) def menu_html(request): “”” …

    Django 2023年4月16日
    00
  • django前后端交互

    前后端交互的方式有两种,一种是自己写个html页面,插入数据,一种是使用django自带的后台管理,插入数据 下面介绍方式1: post.html <!DOCTYPE html> <html lang=”en”> <head> <meta charset=”UTF-8″> <title>Title&…

    Django 2023年4月13日
    00
  • django的模型类管理器——数据库操作的封装详解

    我们来详细讲解一下“Django的模型类管理器——数据库操作的封装详解”。这个话题我们分为以下几个部分: 什么是模型类管理器? 模型类管理器的使用示例 自定义模型类管理器 示例说明:通过模型类管理器查询数据 示例说明:通过自定义模型类管理器查询数据 什么是模型类管理器? 在Django中,模型类管理器objects是Django用于对数据库进行操作的一个核心…

    Django 2023年5月16日
    00
  • Django权限管理自定义以及权限校验

    在Django中,权限管理是非常重要的一个功能,能够让我们对用户的操作进行有效的限制和管理。本文将详细介绍如何在Django中实现自定义权限管理和权限校验。 定义权限 在Django中,我们可以通过权限来控制用户对某些资源的访问和操作。Django提供了一种简单的方法来定义权限: from django.contrib.auth.models import …

    Django 2023年3月13日
    00
  • Django笔记三之使用model对数据库进行增删改查

    本篇笔记目录索引如下: model 准备 增 查 删 改 1、model 准备 在上一篇笔记中,我们新建了一个 application,增加了几个model 同步到了数据库,这次我们新建一个名为 blog 的application,同步数据结构。大概分为以下几步: python3 manage.py startapp blog 将 ‘blog.apps.Bl…

    2023年4月10日
    00
  • BootStrap扔进Django里的方法详解

    下面就详细讲解“BootStrap扔进Django里的方法详解”及示例说明。 BootStrap扔进Django里的方法详解 BootStrap是一种流行的前端框架,它能够快速开发响应式网站。而Django是Python中著名的Web框架,它能够方便地进行网站开发。将BootStrap和Django结合起来使用,可以更加快速地构建现代化的网站。 步骤1:安装…

    Django 2023年5月16日
    00
  • Python中的Django基本命令实例详解

    下面我会详细讲解“Python中的Django基本命令实例详解”的完整攻略,包含两条示例说明。 一、Django基本命令 1.创建Django项目 使用以下命令来创建Django项目: django-admin startproject <projectname> 其中,<projectname>为你想要创建项目的名称。执行上面的命令…

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