Python Django框架中表单的用法详解

yizhihongxing

接下来我会详细讲解“Python Django框架中表单的用法详解”的完整攻略,包括两条示例说明。

什么是表单

表单是网页中最常见的交互方式,用户可以在表单中输入数据并提交到服务器进行处理。在 Django 框架中,可以通过表单生成 HTML 标签,还能够验证用户输入的数据,为后续的处理提供基础。下面是在 Django 中使用表单的步骤。

创建表单

在 Django 中创建表单的方法如下:

  1. 创建一个 forms.py 文件,通过导入 forms 模块来定义表单类。
from django import forms

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

上面的代码创建了一个名为 LoginForm 的表单类,包括两个字段:usernamepassword。其中,usernamepassword 都是 CharField 类型,分别表示用户名和密码。label 属性用于设置字段的标签,max_length 属性表示输入数据的最大长度,widget 属性用于设置字段的类型,这里使用了密码输入框。

  1. 在视图函数中实例化表单,并将表单实例作为参数传递给模板。
from django.shortcuts import render
from .forms import LoginForm

def login(request):
    form = LoginForm()
    return render(request, 'login.html', {'form': form})

上面的代码创建了一个名为 login 的视图函数,该函数在用户访问登录页面时被调用。在函数内部,我们创建了 LoginForm 的实例,并将该实例添加到 render 函数的第三个参数中。在模板中,我们可以通过 form 变量获取表单实例,并在 HTML 中渲染表单。

验证表单

在 Django 中验证表单的方法如下:

  1. 在 forms.py 中重写 clean() 方法。
class LoginForm(forms.Form):
    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("用户名或密码不能为空")

LoginForm 类中,我们重写了 clean() 方法。 clean() 方法用于实现表单数据的验证,返回一个字典数据,字典的键是表单的每个字段名,值是表单字段输入的数据。 clean() 方法的操作应该是将输入的数据与验证规则和业务规则进行比对,如数据类型、长度、是否重复等等。在上面的代码中,我们获取了表单中的 usernamepassword 的值,并检查它们是否为空。如果其中之一为空,则抛出验证错误。

  1. 在视图函数中进行表单数据验证。
def login(request):
    if request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password')
            # 执行其它的登录操作
            return HttpResponse("登录成功")
    else:
        form = LoginForm()
    return render(request, 'login.html', {'form': form})

在视图函数中,我们首先判断请求的方法是否为 POST 方法,如果是,则实例化表单,并调用 is_valid() 方法判断输入数据是否符合验证规则。如果验证成功,我们可以通过 cleaned_data 属性获取表单输入的数据,在此处可以执行该表单相关的业务操作。

示例

下面是两个在 Django 中使用表单的示例:

  1. 实现一个注册表单

在 forms.py 文件中添加以下代码:

class SignupForm(forms.Form):
    username = forms.CharField(max_length=30, label='用户名')
    email = forms.EmailField(label='电子邮件')
    password1 = forms.CharField(max_length=30, label='密码', widget=forms.PasswordInput())
    password2 = forms.CharField(max_length=30, label='密码确认', widget=forms.PasswordInput())

    def clean(self):
        cleaned_data = super().clean()
        password1 = cleaned_data.get('password1')
        password2 = cleaned_data.get('password2')
        if password1 != password2:
            raise forms.ValidationError('两次密码不一致')

在视图文件中添加以下代码:

from django.shortcuts import render, redirect
from .forms import SignupForm

def signup(request):
    if request.method == 'POST':
        form = SignupForm(request.POST)
        if form.is_valid():
            # 保存用户数据至数据库
            return redirect('home')
    else:
        form = SignupForm()
    return render(request, 'signup.html', {'form': form})

在模板文件中,则可以通过以下方式渲染表单:

<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">注册</button>
</form>
  1. 实现一个搜索表单

在 forms.py 文件中添加以下代码:

class SearchForm(forms.Form):
    search = forms.CharField(max_length=30, label='搜索')

在视图文件中添加以下代码:

from django.shortcuts import render
from .forms import SearchForm
from .models import Article

def search(request):
    if request.method == 'POST':
        form = SearchForm(request.POST)
        if form.is_valid():
            search = form.cleaned_data.get('search')
            articles = Article.objects.filter(title__icontains=search)
            return render(request, 'search_results.html', {'articles': articles})
    else:
        form = SearchForm()
    return render(request, 'search.html', {'form': form})

在模板文件中,则可以通过以下方式渲染表单:

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

以上就是关于 Django 中表单的用法的完整攻略,希望能对你有所帮助。

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

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • [Django_1_1]第一个app

    本篇负责介绍添加第一个Django app。本篇文章的上一篇为:Django 初次见面 关于App和Project 简单的来说,一个项目(Project)可以由很多个应用(App)组成也就是说:Project > App 创建App 使用命令python3 manage.py startapp polls,来创建一个名字为polls的App,此时文件结…

    2023年4月9日
    00
  • django基础知识之HTML转义:

    Django对字符串进行自动HTML转义,如在模板中输出如下值: 视图代码: def index(request): return render(request, ‘temtest/index2.html’, { ‘t1’: ‘<h1>hello</h1>’ }) 模板代码: {{t1}} 显示效果如下图: 会被自动转义的字符 htm…

    Django 2023年4月12日
    00
  • 全面剖析Python的Django框架中的项目部署技巧第1/2页

    我将为你详细讲解“全面剖析Python的Django框架中的项目部署技巧第1/2页”的完整攻略。 标题 全面剖析Python的Django框架中的项目部署技巧第1/2页 正文 项目部署技巧概述 在Python的Django框架中进行项目部署是很常见的需求,但是部署过程中常会出现各种问题。本文将全面剖析Django项目部署中的关键技巧和注意事项,以帮助开发者成…

    Django 2023年5月16日
    00
  • Django REST Framework 序列化和校验 知识点

      DRF序列化   Django ORM对象 –> JSON格式的数据  序列化   JSON格式的数据 –> Django ORM数据  反序列化   需要两个工具: from rest_framework.serializers import Serializer from rest_framework.serializers impo…

    Django 2023年4月13日
    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提供了多种重定向方法,常用的有HttpResponseRedirect、redirect和HttpResponsePermanentRedirect。本文将详细介绍这几种方法的使用以及示例。 HttpResponseRedirect HttpResponseRedirect是一个HTTP重定向响应,可将用户重…

    Django 2023年5月16日
    00
  • Django Form基于Model定义表单

    Django Form是一个用来处理表单的工具,它可以帮助我们方便地验证表单数据、生成表单HTML代码等。而使用基于Model的Form可以让我们更方便地定义表单结构,快速生成表单代码,并且能够自动处理表单和数据库中Model的交互。 下面是基于Model定义表单的完整攻略: 定义Model 首先,我们需要先定义一个Model类,例如: from djang…

    Django 2023年3月12日
    00
  • 如何在django中运行scrapy框架

    关于在 Django 中运行 Scrapy 框架的攻略,一般可以按下列步骤操作: 步骤一:创建项目 首先,在终端中使用以下命令创建 Django 项目: django-admin startproject myproject 步骤二:添加应用程序 接下来,您将需要为您的 Django 应用程序添加名称,并将其作为 Scrapy 爬虫的容器。在命令行中,使用以…

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