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之对django内置的User模型进行自定义扩展方式

    对django内置的User模型进行自定义扩展可以使用Django提供的User模型扩展机制。下面详细讲解对django内置的User模型进行自定义扩展方式的完整攻略。 一、创建扩展模型 第一步是创建扩展模型,继承自Django内置的User模型,并添加想要扩展的字段。这里我们以添加nickname为例。创建一个新的app,这里我们取名为account: #…

    Django 2023年5月16日
    00
  • pycharm 中 django 导入静态文件不提示补全

      File—》setting—–》Languages & Frameworks ——> Python Template  Languages ——>Template language 选中Django 然后保存        

    Django 2023年4月11日
    00
  • python3–django for 循环中,获取序号

    功能需求:在前端页面中,for循环id会构不成连续的顺序号,所以要找到一种伪列的方式来根据数据量定义序号 因此就用到了在前端页面中的一个字段 forloop.counter,完美解决 1 <tbody> 2 {% for inrow in insocket_list %} 3 <tr> 4 <!– 这是序列号(相当于伪列)–…

    Django 2023年4月11日
    00
  • Django定时任务

    需求背景 需求为每天定时发送推送给app,这个需求可以使用linux自带的crontab实现,但是项目使用了django开发,故使用django自带的方法来实现。 安装 pip3 install django-crontab 设置 将app添加到settings.py中 INSTALLED_APPS = { ‘django_crontab’, } 使用方法 …

    Django 2023年4月13日
    00
  • day16- django

    MVC和MTV模式 Django的MTV模式本质是各组件之间为了保持松耦合关系,Django的MTV分别代表:        Model(模型):负责业务对象与数据库的对象(ORM)        Template(模版):负责如何把页面展示给用户        View(视图):负责业务逻辑,并在适当的时候调用Model和Template        此…

    2023年4月9日
    00
  • django Q和F查询

    Q查询——对对象的复杂查询F查询——专门取对象中某列值的操作 1、对象(django.db.models.Q)可以对关键字参数进行封装,从而更好地应用多个查询,例如: from django.db.models import Q news=New.objects.filter(Q(question__startswith=’What’)) 2、可以组合使用&…

    Django 2023年4月9日
    00
  • Django中操作Redis

    一 创建redis连接池 redis_pool.py pool = redis.ConnectionPool(host=’10.211.55.4′, port=6379) 二 引入连接池 import redis from django.shortcuts import render from utils.redis_pool import POOL def…

    Django 2023年4月11日
    00
  • Python+Django搭建自己的blog网站

    首先我们将以下面两个示例为例,详细讲解“Python+Django搭建自己的blog网站”的完整攻略。 示例1 1. 创建项目和应用 首先需要安装Django,可以通过命令行输入pip install Django来进行安装。安装完成后,我们创建一个Django项目,可以通过输入如下命令创建: django-admin startproject myblog…

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