author: 温柔易淡(Leo),欢迎技术交流与拍砖

preface

我们在前端写表单的时候,其实可以使用django自带的forms功能来实现,特别是在处理 修改已经存在数据 的场景特别好用,下面说说他。

后台代码

我们先从后台说起,这个流程是这样的:当用户查看某一个条目的详细新的时候,我们首先获取这个条目的详细信息在数据库里,然后塞入到表单里面渲染,这样传到前端就是这个条目的详细信息了,用户可以修改然后保存。
对此我们需要做的工作就是application下面创建一个form的py文件,我创建的文件名是formself,文件结构如下:

文件结构
[root@linux-node2 devops]# tree BatchM
BatchM     # 项目名
├── Batch   # application名字
│   ├── formself.py   # form文件,自定义
formself里面的代码如下:
from django.forms import Form,ModelForm   # 导入这两个模块
# ModelForm把 models里到数据变成一个表单,可以用的html页面上
from  Batch import modelsclass ApplyUpdateForm(ModelForm):class Meta:model = models.WorkOrderOfUpdate    # 和哪个数据库绑定在一块exclude = ('email_issend','tags',)   # 排除哪个字段def __init__(self, *args, **kwargs):#  继承父类,后重写自己的类super(ApplyUpdateForm, self).__init__(*args, **kwargs)  for field_name in self.base_fields:   # 遍历每一个字段field = self.base_fields[field_name]field.widget.attrs.update({'class': 'form-control'})  # 给每一个输入框添加上一个样式
我们在看看views里面的代码
from Batch import models
from Batch import formself    #导入刚才我们自定义的form文件def apply_detail(request,order_id):'''显示一个工单详情:param request::param order_id:   工单ID:return:'''order_detail = models.WorkOrderOfUpdate.objects.get(OrderId=order_id)   # 取出这个条目的所有信息form = formself.ApplyUpdateForm(instance=order_detail)   # 把这个条目的信息塞入到表单里,instance就是从哪个对象里面获取数据return render(request,'update_order_detail.html',{'selfforms':form})   # 把做好的表单返回到前端html文件里面通过form这个对象。
我们再看看html文件代码
'''省去不相关的代码
{% block page_content %}    # 使用jinja修改母板的内容<a href="/BatchM/apply_update.html/search/"><button class="btn btn-default" >返回上一页</button></a><br><br>{{ selfforms }}   # 写上这个,就能够自动在前端展示弄好的表单了。
{% endblock %}

好了,展示功能搞定了,还可以在这基础之上做一个保存功能,即在用户修改完表单的内容后,提交它,后端把这些表单的数据入库。我们就需要在后端添加几行代码,主要针对post请求处理,前端只添加需要<form> </form> <input type='submit' value=‘提交’>2个类型标签,申明提交地址,提交方法为post,就行了。

通过form保存数据

后端view代码如下:

from Batch import models
from Batch import formself    #导入刚才我们自定义的form文件def apply_detail(request,order_id):'''显示一个工单详情:param request::param order_id:   工单ID:return:'''if request.method == "GET":order_detail = models.WorkOrderOfUpdate.objects.get(OrderId=order_id)   # 取出这个条目的所有信息form = formself.ApplyUpdateForm(instance=order_detail)   # 把这个条目的信息塞入到表单里,instance就是从哪个对象里面获取数据render(request,'update_order_detail.html',{'selfforms':form})   #把做好的表单返回到前端html文件里面通过form这个对象。elif request.method == "POST":    # 处理提交上来的数据form_obj = getattr(formself,ApplyUpdateForm)  # ApplyUpdateForm是在formself定义好的类fm_result = form_obj(request.POST)   # 把提交的数据塞入刚才的对象里面if fm_result.is_valid():    # 如果数据与数据库表之间能够匹配,也就是提交的表单内容正确fm_result.save()          # 那么就入库。return  return HttpResponseRedirect('/')else:return HttpResponse('信息不全')

前端代码就不在赘述了。

至此,form的简单介绍到此结束,更多功能可以参考官网地址:https://docs.djangoproject.com/en/1.10/topics/forms/

转载于:https://www.cnblogs.com/liaojiafa/p/6238211.html

3 django系列之Form表单在前端web界面渲染与入库保存相关推荐

  1. Django框架 之 Form表单和Ajax上传文件

    Django框架 之 Form表单和Ajax上传文件 浏览目录 Form表单上传文件 Ajax上传文件 伪造Ajax上传文件 Form表单上传文件 html 1 2 3 4 5 6 7 <h3& ...

  2. 学习日志day45(2021-09-09)(1、有道翻译API使用json格式数据 2、JSONP 3、Ajax提交form表单 4、Web Uploader)

    学习内容:学习JavaWeb(Day45) 1.有道翻译API使用json格式数据 2.JSONP 3.Ajax提交form表单 4.Web Uploader 1.有道翻译API使用json格式数据 ...

  3. django ajax form表单,Django学习系列之Form表单和ajax(示例代码)

    昵       称: 生       日: 性       别:     男 女 地       址: 手  机  号: 邮       箱: [修改] {% csrf_token %}$(\'#js ...

  4. C# HTTP系列10 form表单的enctype属性

    系列目录     [已更新最新开发文章,点击查看详细] 在ASP.NET编程中经常遇到下面的代码片段,将人员信息以表单方式提交到后台程序并保存到服务器与数据库中. 1 <form action= ...

  5. Django之自定义 form 表单上传图片

    创建一个名为 studenttest 的项目与一个名为 student 的应用程序 django-admin startproject studenttest python manage.py sta ...

  6. python表单管理系统_python3开发进阶-Django框架的Form表单系统和基本操作

    {% csrf_token %} 用户名 密码 {{ error_msg }}

  7. 框架生成的HTML修改,Django框架form表单验证 修改html标签的样式

    经过前面的学习,我们大致可以知道CharField.EmailField等等以Field结尾的方法,只能帮助我们对用户发来的信息做验证,不能生成html标签.字段本身自己虽然只做验证,但是我们可以通过 ...

  8. Django入门教程(八)Form表单

    有时候我们需要在前台用 get 或 post 方法提交一些数据,所以需要用到 html 表单的知识. 1.创建项目,选择File–>New project–>Django ①根据个人需要, ...

  9. form表单提交踩坑记

    2019独角兽企业重金招聘Python工程师标准>>> 今天收获了一次集团故障,心塞不已,究其原因,是form表单提交时web服务器对大小做了限制.这个必现的问题在测试阶段也不知为啥 ...

最新文章

  1. 使用pinctrl 和 gpio 子系统的字符设备驱动
  2. 迫于项目压力研究果园
  3. C++设计模式--适配器模式
  4. python中的数列[a::b]操作
  5. elasticsearch6.x {error:Content-Type header [application/x-www-form-urlencoded] is not supported
  6. php函数删除非空目录,删除文件夹(非空目录)及其中所有文件的思路及源代码
  7. cs-Filters
  8. 基本的 Python socket 模块
  9. python 小例子 取文件夹文件 去除后缀
  10. ios 添加block 类别_ios block是什么数据类型?
  11. 欧几里得算法、扩展欧几里得算法、求逆元、中国剩余定理、扩展中国剩余定理
  12. 2021~ 你好,加油 (ง •_•)ง
  13. windows解压jar文件
  14. python locale.setlocale_语言环境.setlocale(LC_NUMERIC):如何使其在Windows上运行
  15. 高端游戏计算机电源外形规格,游戏新高度!实述高端电源选购技巧
  16. 魔兽争霸无法在这个计算机,W7系统魔兽争霸3不能初始化DirectX怎么办
  17. 联想服务器无限重启,联想台式机无限重启的解决方法
  18. 推挽变压器与正激变压器的功率比较
  19. Pytorch中的dataset类——创建适应任意模型的数据集接口
  20. hive的beeline使用

热门文章

  1. 重磅汇总!2015-2019学硕国家线走势情况!
  2. 带你自学Python系列(二):Python列表总结-思维导图
  3. jsp页面适应手机屏幕_HTML5之页面缩放 viewport
  4. linux nginx 安装
  5. html5 cs js字母验证码,JavaScript生成图形验证码
  6. 软考信息安全工程师备考笔记1:第一章信息安全基础备考要点
  7. Java基础---代码块和final关键字
  8. 从壹开始前后端分离【 .NETCore2.1 +Vue 2 +AOP+DI】框架之一 || 前言
  9. Android 关于后台杀死App之后改变服务器状态的一些尝试
  10. Python min() 方法