博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3 django系列之Form表单在前端web界面渲染与入库保存
阅读量:6710 次
发布时间:2019-06-25

本文共 2875 字,大约阅读时间需要 9 分钟。

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

preface

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

后台代码

我们先从后台说起,这个流程是这样的:当用户查看某一个条目的详细新的时候,我们首先获取这个条目的详细信息在数据库里,然后塞入到表单里面渲染,这样传到前端就是这个条目的详细信息了,用户可以修改然后保存。

对此我们需要做的工作就是application下面创建一个form的py文件,我创建的文件名是formself,文件结构如下:

文件结构
[root@linux-node2 devops]# tree BatchMBatchM     # 项目名├── 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 modelsfrom 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修改母板的内容    
{
{ selfforms }} # 写上这个,就能够自动在前端展示弄好的表单了。{% endblock %}

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

通过form保存数据

后端view代码如下:

from Batch import modelsfrom 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/

转载地址:http://mzalo.baihongyu.com/

你可能感兴趣的文章
spring总结
查看>>
mysqlslap是一个mysql官方提供的压力测试工具
查看>>
一键安装二进制mysql
查看>>
Python paramiko模块 实现 ssh远程执行命令 上传下载文件 堡垒机模式下的远程命令执行...
查看>>
spring安全框架Security(二)
查看>>
构建基本脚本(第十一章)
查看>>
Win7如何解决telnet不是内部或外部命令的方案!
查看>>
封装 网络请求 (可以实现多个界面复用)
查看>>
[QT入门篇]1 QT中的对象模型
查看>>
我的友情链接
查看>>
[Nginx]使用源码编译安装Nginx服务器
查看>>
heartbeat
查看>>
linux learning
查看>>
mysql通过getDate取出时间精度问题
查看>>
在 CentOS 6 和 Nginx 中部署 Let's Encrypt 的 SSL 证书
查看>>
因地制宜 解读Linux集群负载均衡
查看>>
Android网络传输中最外层函数捕捉异常(throw和try catch异常的区别)
查看>>
Redis BitMap介绍及使用
查看>>
统计下在运营商工作的朋友跳槽的有几个?
查看>>
squid 故障汇总
查看>>