详解Django表单系统

yizhihongxing

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日

相关文章

  • Django的用户模块与权限系统的示例代码

    下面是Django的用户模块与权限系统的示例代码的完整攻略。 一、用户模块示例代码 用户模块是Django中的一个常用组件,它可以轻松实现用户的注册、登录、密码找回等功能。下面是一个简单的用户模块示例代码: 1. 创建用户模型 首先,在项目的models.py文件中创建一个用户模型: from django.db import models from dja…

    Django 2023年5月16日
    00
  • 详解Django存在关联关系的反向查询

    Django是一款高效的Web框架,其ORM(对象关系映射)系统使得我们可以通过Python对象来操作数据库,进一步简化了开发流程。 在Django中,关联关系是非常重要的,它使我们可以在不同的模型之间建立联系。在正常的关联查询中,我们常常使用related_name属性来定义关联模型的反向查询名称,但是当我们需要反向查询时,还有一些其他的方法。 本文将深入…

    Django 2023年3月12日
    00
  • Django之ORM性能优化建议

    前言   DjangoORM数据层提供各种途径优化数据的访问。   如果事先理解Django的优化技巧,开发过程中稍稍留意,后期会省不少的工作量。 正题 一,利用标准数据库优化技术 传统数据库优化技术博大精深,不同的数据库有不同的优化技巧,但重心还是有规则的。在这里算是题外话,挑两点通用的说说:  索引,给关键的字段添加索引,性能能更上一层楼,如给表的关联字…

    Django 2023年4月13日
    00
  • 在django admin中添加自定义视图

    来自https://blog.csdn.net/qq_35753140/article/details/84881757   django admin提供了完善的用户管理和数据模型管理,方便实用。研究了一下在admin里面添加自己的页面。 在admin.py里继承django.contrib.admin.ModelAdmin基类 class FaceAdmi…

    Django 2023年4月10日
    00
  • 给Python的Django框架下搭建的BLOG添加RSS功能的教程

    给Python的Django框架下搭建的BLOG添加RSS功能的教程如下: 1. 安装Django开发环境 在开始添加RSS功能之前,你需要先安装Django开发环境。你可以使用pip命令来安装: pip install django 如果你已经安装了Django,你可以使用下面的命令来检查版本号: python -m django –version 2.…

    Django 2023年5月16日
    00
  • 第十三篇Django Logging配置样例

    阅读目录(Content) Django 日志配置模板 官方链接 Django Logging Django 日志配置模板 LOGGING = { ‘version’: 1, ‘disable_existing_loggers’: False, ‘formatters’: { ‘standard’: { ‘format’: ‘[%(asctime)s][%(…

    Django 2023年4月16日
    00
  • django中操作mysql数据库的方法

    操作mysql数据库是Web开发中的核心内容之一,而Django是一个Web开发框架,提供了方便快捷的方式操作各种类型的数据库。本文将详细介绍如何在Django中操作MySQL数据库,同时提供两个示例说明。 准备工作 首先需要安装Django和PyMySQL两个库,可以使用pip来安装: pip install django pip install pymy…

    Django 2023年5月16日
    00
  • django模型层(model)进行建表、查询与删除的基础教程

    下面是“django模型层(model)进行建表、查询与删除的基础教程”的攻略: 什么是Django模型层 Django模型层,又称为ORM(Object Relational Mapping,对象关系映射),是Django的核心组件之一。它可以让我们不需要编写SQL语句就能与数据库进行交互。在模型层中,我们可以定义数据表、字段、数据类型、索引等信息,这些信…

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