当前位置: 首页 > news >正文

表单(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项目中创建表单

http://www.lryc.cn/news/383024.html

相关文章:

  • Geoserver源码解读四 REST服务
  • 硬件开发笔记(二十一):外部搜索不到的元器件封装可尝试使用AD21软件的“ManufacturerPart Search”功能
  • 【AI大模型】GPTS 与 Assistants API
  • 攻击者开始使用 XLL 文件进行攻击
  • Why RAG is slower than LLM?
  • Word页码设置,封面无页码,目录摘要阿拉伯数字I,II,III页码,正文开始123为页码
  • 汽车汽配图纸管理、产品研发管理解决方案
  • 小程序简单版音乐播放器
  • 驾校预约管理系统
  • C++ 左值右值 || std::move() || 浅拷贝,深拷贝 || 数据类型
  • 发那科机器人IO 分配
  • ubuntu开机怎么进入、退出命令行界面
  • 『FPGA通信接口』LVDS接口(4)LVDS接收端设计
  • 面试题:HTTP的body是二进制还是文本
  • 5分钟带你部署一套Jenkins持续集成环境​
  • OpenAI突然宣布停止向中国提供API服务!
  • Bootstrap 标签
  • EtherCAT主站SOEM -- 37 -- win-soem-win10及win11系统QT-SOEM-1个电机转圈圈-周期同步速度模式(CSV模式)
  • 老板舍不得买库存管理软件❓一招解决
  • 【MySQL数据库】:MySQL视图特性
  • malloc、free和new delete的区别
  • 如何有效地优化 Erlang 程序的内存使用,以应对大规模数据处理的需求?
  • vue3项目使用@antv/g6实现可视化流程功能
  • 【Linux网络(一)初识计算机网络】
  • Vulhub——Log4j、solr
  • linux 设置程序自启动
  • PostgreSQL 分区表与并行查询(十)
  • React Hooks使用规则:为什么不在条件语句和循环中使用它们
  • 【Docker】Consul 和API
  • Python polars学习-07 缺失值