Login
网站首页 > 文章中心 > 其它

Python_Django框架中表单的用法详解

作者:小编 更新时间:2023-10-11 17:55:43 浏览量:15人看过

此时此刻呢我会详细讲解"Python Django框架中表单的用法详解"的完整攻略,包括两条示例说明.

什么是表单

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

创建表单

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

创建一个 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 的表单类,包括两个字段:username 和 password.其中,username 和 password 都是 CharField 类型,分别表示用户名和密码.label 属性用于设置字段的标签,max_length 属性表示输入数据的最大长度,widget 属性用于设置字段的类型,这里使用了密码输入框.

在视图函数中实例化表单,并将表单实例作为参数传递给模板.


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 中验证表单的方法如下:

在 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() 方法的操作应该是将输入的数据与验证规则和业务规则进行比对,如数据类型、长度、是否重复等等.在上面的代码中,我们获取了表单中的 username 和 password 的值,并检查它们是否为空.如果其中之一为空,则抛出验证错误.

在视图函数中进行表单数据验证.


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 中使用表单的示例:

实现一个注册表单

在 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})


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


{% csrf_token %} {{ form.as_p }}

实现一个搜索表单


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})



{% csrf_token %} {{ form.as_p }}

以上就是土嘎嘎小编为大家整理的Python_Django框架中表单的用法详解相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章