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 models class 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/

3 django系列之Form表单在前端web界面渲染与入库保存的更多相关文章

  1. Django组件之Form表单

    一.Django中的Form表单介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入 ...

  2. 第三百一十一节,Django框架,Form表单验证

    第三百一十一节,Django框架,Form表单验证 表单提交 html <!DOCTYPE html> <html lang="en"> <head& ...

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

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

  4. Django学习系列之Form表单结合ajax

      Forms结合ajax Forms的验证流程: 定义用户输入规则的类,字段的值必须等于html中name属性的值(pwd= forms.CharField(required=True)=<i ...

  5. Django中的Form表单

    Django中已经定义好了form类,可以很容易的使用Django生成一个表单. 一.利用Django生成一个表单: 1.在应用下创建一个forms文件,用于存放form表单.然后在forms中实例华 ...

  6. Django中的Form表单验证

    回忆一下Form表单验证的逻辑: 前端有若干个input输入框,将用户输入内容,以字典传递给后端. 后端预先存在一个Form表单验证的基类,封装了一个检测用户输入是否全部通过的方法.该方法会先定义好错 ...

  7. Django 中的Form表单认证

    一.Form表单   1.1 Form的几个功能 验证用户数据(显示错误信息) 初始化页面显示内容 HTML Form提交保留上次提交数据 生成HTML标签   1.2 创建表单类Form 1. 创建 ...

  8. the django travel three[form表单验证]

    一:表单验证: 场景:因为浏览器的js可以被禁用,所以需要做后台的输入合法的验证. A:ajax发请求.需要注意的是ajax POST的数据的key值和form表单的里的字段名字一致,否则得不到验证! ...

  9. Django基础之Form表单验证

    Form表单验证 1.创建Form类(本质就是正则表达式的集合) from django.forms import Form from django.forms import fields from ...

随机推荐

  1. 玩儿转物联网IoT - 在Beagle Bone Black上运行node.js 程序

    物联网(IoT)技术方兴未艾,智能手环,智能血压计,智能眼镜甚至智能鞋垫都开始进入我们的生活,各种智能设备层出不穷,世界已经到了一个"人有多大胆,地有多大产"的时代,不玩儿点物联网 ...

  2. Unity3D安卓出包报错

    今天又遇到了在安卓出包时,直接报错了两个错误,报错信息分别如下: Installation failed with the following output: pkg: /data/local/tmp ...

  3. Atitit. 项目文档目录大纲 总集合  v2

    Atitit. 项目文档目录大纲 总集合  v2 -----Atitti.原有项目源码的架构,框架,配置与环境说明 v3 q511 -----Atitit.开发环境 与 工具 以及技术框架 以及 注意 ...

  4. JavaScript错误/异常处理

    JavaScript Try...Catch 语句 介绍:JavaScript中的try...carch语句的作用和C#中的try...catch语句的作用一样, 都是捕获并处理异常. 语法: try ...

  5. (八)数据呈现——一图胜千言<完结>

    数据分析师就像厨师一样.厨师的工作有5步:下单.备料.切配.烹饪.打荷.数据分析师的工作也有5步.呈现数据就好像打荷.厨师在把菜肴端给客人之前要做盘饰美化,让菜肴精致美观,这个工作就是打荷.同样,数据 ...

  6. 基于Spring+SpringMVC+Mybatis的Web系统搭建

    系统搭建的配置大同小异,本文在前人的基础上做了些许的改动,重写数据库,增加依据权限的动态菜单的实现,也增加了后台返回json格式数据的配置,详细参见完整源码. 主要的后端架构:Spring+Sprin ...

  7. 一键准备Oracle安装

    在Linux下安装Oracle软件之前,有相当工作需要准备,包括建立用户.配置内核参数.配置资源限制参数.配置Oracle用户环境等,十分繁琐.即便十分熟悉,也需要花费一定的精力来准备.说白了,做这些 ...

  8. [Android] 怎么在应用中实现密码隐藏?

    [Android] 怎么在应用中实现密码隐藏? 在安卓应用中,用户注册或者登录时,需要把密码隐藏,实现一定的保密效果.在安卓中,可以通过设置EditText组件的TransformationMetho ...

  9. PHP中的数据库二、memcache

    :first-child, ol li > :first-child, ul li ul:first-of-type, ol li ol:first-of-type, ul li ol:firs ...

  10. python浅谈正则的常用方法

    python浅谈正则的常用方法覆盖范围70%以上 上一次很多朋友写文字屏蔽说到要用正则表达,其实不是我不想用(我正则用得不是很多,看过我之前爬虫的都知道,我直接用BeautifulSoup的网页标签去 ...