表单(forms)

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501

在app1文件夹下创建一个forms.py文件,添加如下类代码:

from django import forms

class PersonForm(forms.Form):

    first_name = forms.CharField(label='你的名字', max_length=20)

    last_name = forms.CharField(label='你的姓氏', max_length=20)

上面定义了一个PersonForm表单类,两个字段类型为forms.CharField,类似于models.CharField,first_name指字段的label为你的名字,并且指定该字段最大长度为20个字符。max_length参数可以指定forms.CharField的验证长度。

PersonForm类将呈现为下面的html代码:

<label for="你的名字">你的名字: </label>

<input id="first_name" type="text" name="first_name" maxlength="20" required />

<label for="你的姓氏">你的姓氏: </label>

<input id="last_name" type="text" name="last_name" maxlength="20" required />

表单类forms.Form有一个is_valid()方法,可以在views.py中验证提交的表单是否符合规则。对于提交的内容,在views.py编写如下代码:

from django.shortcuts import render

from django.http import HttpResponse, HttpResponseRedirect

from app1.forms import PersonForm

def get_name(request):

    # 判断请求方法是否为POST

    if request.method == 'POST':

        # 将请求数据填充到PersonForm实例中

        form = PersonForm(request.POST)

        # 判断form是否为有效表单

        if form.is_valid():

            # 使用form.cleaned_data获取请求的数据

            first_name = form.cleaned_data['first_name']

            last_name = form.cleaned_data['last_name']

            # 响应拼接后的字符串

            return HttpResponse(first_name + '' + last_name)

        else:

            return HttpResponseRedirect('/error/')

    # 请求为GET方法

    else:

        return render(request, 'name.html', {'form': PersonForm()})

在html文件中使用返回的表单的代码如下:

<form action="/app1/get_name" method="post">

    {% csrf_token %}

    {{ form }}

    <button type="submit">提交</button>

</form>

{{form}}是Django模板的语法,用来获取页面返回的数据,这个数据是一个PersonForm实例,所以Django就按照规则渲染表单。

注意:渲染的表单只是表单的字段如上面PersonForm呈现的HTML代码,所以我们要在HTML中手动输入“<form></form>”标签,并指出需要提交的路由“/app1/get_name”和请求的方法post。并且,<form>标签的后面需要加上Django的防止跨站请求伪造模板标签{% csrf_token %}。简单的一个标签,就很好地解决了form表单提交出现跨站请求伪造攻击的情况。

添加URL到创建的app1/urls.py中,代码如下:

path('get_name', app1_views.get_name)

此时访问页面“http://127.0.0.1:8000/app1/get_name”,效果如图26所示。

图26  在Django项目中创建表单

  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Django forms是一个用于处理的高级工具集,它提供了许多便捷的方法和函数,可以轻松地创建和处理。Django forms的主要作用是将HTML和Python代码联系起来,使得的输入数据可以被方便地处理和验证。 使用Django forms处理的基本步骤如下: 1. 创建一个类,该类继承自Django forms中的forms.Form类。 2. 在类中定义需要处理的字段,可以使用Django forms中提供的各种字段类型,如CharField、IntegerField等。 3. 在类中定义处理数据的方法,一般是通过Django forms中的cleaned_data属性获取数据,并进行相应的处理和验证。 4. 在视图函数中实例化类,并将接收到的请求数据传递给类实例,然后调用类中定义的处理数据的方法进行处理。 5. 如果数据验证通过,可以执行相应的逻辑,如果验证失败,可以重新渲染并输出错误提示信息。 以下是一个简的Django forms处理示例代码: ```python # forms.py from django import forms class ContactForm(forms.Form): name = forms.CharField(max_length=100) email = forms.EmailField() message = forms.CharField(widget=forms.Textarea) def send_email(self): # 处理数据的方法 name = self.cleaned_data['name'] email = self.cleaned_data['email'] message = self.cleaned_data['message'] # 进行邮件发送等操作 ``` ```python # views.py from django.shortcuts import render from .forms import ContactForm def contact_view(request): if request.method == 'POST': form = ContactForm(request.POST) if form.is_valid(): form.send_email() return render(request, 'success.html') else: form = ContactForm() return render(request, 'contact.html', {'form': form}) ``` 在上面的示例代码中,我们定义了一个名为ContactForm的类,该类继承自Django forms中的forms.Form类,然后定义了三个需要处理的字段:name、email和message。在类中还定义了一个名为send_email的处理数据的方法,该方法通过cleaned_data属性获取数据,并进行相应的处理和验证。 在视图函数contact_view中,我们首先判断请求方法是否为POST,如果是POST请求,则实例化ContactForm类并将请求数据传递给它,然后调用is_valid方法进行数据验证。如果验证通过,我们就可以调用类中定义的send_email方法进行处理。如果验证失败,我们可以重新渲染并输出错误提示信息。 以上就是使用Django forms处理的基本步骤,通过Django forms,我们可以轻松地处理数据,并进行相应的验证和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橙子味冰可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值