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

接下来我会详细讲解“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中的DRF框架视图集使用

    1. 两个基类 1)APIView Django REST_framework 中所有视图的基类是APIView   父类是View 支持定义的属性: authentication_classes 列表或元祖,身份认证类 permissoin_classes 列表或元祖,权限检查类 throttle_classes 列表或元祖,流量控制类 在APIView中…

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

    下面我会详细讲解“全面剖析Python的Django框架中的项目部署技巧第2/2页”的完整攻略。 概述 本文将会详细讲解如何使用Django框架部署一个Web项目的完整攻略。其中包括了两条示例说明,旨在帮助读者更好地理解如何使用Django来进行项目部署。 步骤 以下是部署Django项目的详细步骤。 1. 准备工作 首先,你需要做一些准备工作。 创建一个D…

    Django 2023年5月16日
    00
  • Django logging日志配置 Django logging配置

      批注:做开发开不开日志,以下是我在工作中写Django项目常用的logging配置。 一个日志配置文件分为几个部分: (1)  定义日志的显示格式(formatters)==>> standard(标准版)、simple(简单版)、collect(收集版) (2)定义日志的过滤规则(filters) (3)日志流的处理方式(handlers)…

    Django 2023年4月13日
    00
  • Django rest framework基本介绍与代码示例

    下面是针对“Django rest framework基本介绍与代码示例”的详细讲解: 1. Django rest framework基本介绍 Django rest framework是一个建立在Django框架上的Web API开发工具,它基于大量的RESTful原则来构建API。Django rest framework可以帮助我们快速构建高质量的W…

    Django 2023年5月16日
    00
  • 搭建Django开发环境(Windows、Linux、MacOS)

    Windows系统下的搭建方法 Step 1:安装Python 在Windows系统下,我们可以直接从Python官网 https://www.python.org/downloads/ 下载Python的最新版本,并进行安装。 Step 2:安装Django 打开命令行窗口,运行以下命令来安装Django: pip install django Step …

    Django 2023年3月12日
    00
  • 用pycharm开发django项目示例代码

    下面我将分两条示例详细讲解用PyCharm开发Django项目的完整攻略。 示例一:用PyCharm创建一个简单的Django项目 1. 创建PyCharm项目 在Pycharm中创建一个Python项目,右键选择“New -> Project”,在弹出的窗口中选择“Django”。 2. 安装Django 在项目创建完成后,使用以下命令安装Djang…

    Django 2023年5月16日
    00
  • django settings.py配置文件的详细介绍

    下面是针对“django settings.py配置文件的详细介绍”的完整攻略。 什么是Django的settings.py文件? settings.py是Django应用程序中最重要的配置文件之一,它存储了应用程序的主要参数设置,例如数据库信息、口令等。在项目开始前,开发者需要首先创建该文件,直接在项目目录下创建一个名为settings.py的文件即可。 …

    Django 2023年5月16日
    00
  • django 的 MTV 流程图

         

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