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

你可能感兴趣的文章
Lodash 源码分析(三)Array
查看>>
ZooKeeper安装部署
查看>>
从Vue.js源码角度再看数据绑定
查看>>
linux cgroup代码学习(2)——数据结构整理
查看>>
postcss-lazysprite: 一种生成CSS 雪碧图的懒惰姿势
查看>>
SpreadJS 在 Angular2 中支持哪些事件?
查看>>
[LeetCode] Shortest Distance from All Buildings
查看>>
spring-boot 自定义解析器实现参数绑定
查看>>
SegmentFault 官方翻译功能上线
查看>>
Node.js和Socket.IO搭建Web Chat application
查看>>
Java入门姿势
查看>>
Android官方技术文档翻译——ApplicationId 与 PackageName
查看>>
把JavaScript文件放在文档的头部还是尾部
查看>>
对React Native中Reduce理解
查看>>
greenDao多表关联
查看>>
【译】Vertical-Align: All You Need To Know
查看>>
Visual Studio 2017正式发布
查看>>
强化学习遭遇瓶颈!分层RL将成为突破的希望
查看>>
接口限流的常用算法汇总
查看>>
Kong 发布 Kong Brain 和 Kong Immunity,可进行智能自动化和适应性监控
查看>>