详解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日

相关文章

  • django 创建model(数据库表)失败

    在models.py中创建数据库表     from django.db import models # Create your models here. class Book(models.Model): name = models.CharField(max_length=20) price = models.IntegerField pub_date …

    Django 2023年4月13日
    00
  • Django 创建后台,配置sqlite3教程

    下面是详细讲解Django创建后台、配置sqlite3的完整攻略。 1. 安装Django 首先,你需要安装Django。可以通过在终端或命令提示符下输入以下命令来安装: pip install Django 2. 创建Django项目 安装完成后,你可以在终端或命令提示符下输入以下命令来创建Django项目: django-admin startproje…

    Django 2023年5月16日
    00
  • django分页功能,templatetags的应用

    django 将不会将得到的html代码自动转化 from django.utils.html import format_html html =”’ <a href=’http://www.china.cn’>中国</a>”’ format_html(html) django分页 分页功能基本操作 from django.cor…

    Django 2023年4月13日
    00
  • django2.0无法加载外部css和js的问题

    解决问题的思路来源于https://www.v2ex.com/t/430192 先是创建static目录,该目录与manage.py同级 然后在项目settings.py文件里添加 STATICFILES_DIRS = ( os.path.join(BASE_DIR, ‘static’).replace(‘\\’, ‘/’),) INSTALLED_APPS…

    Django 2023年4月10日
    00
  • 详解Django 时间与时区设置问题

    首先我们需要了解Django中的时间和时区设置问题。Django使用的是Python的标准库datetime模块来处理和表示时间,同时也支持使用时区。在Django中,我们可以通过设置TIME_ZONE变量来指定应用程序所使用的时区。下面详细介绍时间与时区设置问题的步骤。 步骤一:在settings.py文件中设置时区 在Django中,我们需要在setti…

    Django 2023年5月16日
    00
  • Django是什么?能做什么?

    Django是一个开源的Python Web框架,它提供了一组强大的工具和库,使得开发Web应用程序变得更加容易和快速。 Django遵循MVC(Model-View-Controller)的设计模式,其核心思想是将应用程序的不同组件分离,从而使得应用程序更加可维护和可扩展。 Django具有以下特点: 完整的开发框架:Django提供了很多组件,如ORM、…

    2023年3月11日
    00
  • django:token认证,以及http401和http403的区别

    首先token认证环境搭建: 安装模块:pip install djangorestframework 在settings中添加参数: 如图: 继续添加REST_FRAMEWORK项: 如图: 配置如下: REST_FRAMEWORK = { # 权限验证,全局配置 “DEFAULT_PERMISSION_CLASSES”:( ‘rest_framework…

    Django 2023年4月12日
    00
  • Python – Django – ORM 查询方法

    models.py: from django.db import models class Human(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=32) age = models.IntegerField() birthd…

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