form表单及ajax上传示例以及中间件的转换
时间:2019-08-21
本文章向大家介绍form表单及ajax上传示例以及中间件的转换,主要包括form表单及ajax上传示例以及中间件的转换使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一.form表单上传文件
渲染:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css"> <script src="/static/jquery-3.3.1.js"></script> </head> <body> <h1>form_up</h1> <form action="" method="post" enctype="multipart/form-data"> <input type="text" name="username"> <input type="file" name="my_file"> <input type="submit"> </form> </body> </html>
后台:
def form_up(request): if request.method == 'POST': print(request.POST) import copy params = copy.deepcopy(request.POST) params["firstname"] = "zhao" print(params) request.POST = params
#可利用深拷贝在POST中手动添加键值对 print(request.POST) name = request.POST.get('firstname') print(name) print(type(name)) print(request.FILES) file_obj = request.FILES.get('my_file') print(file_obj.name) with open(file_obj.name,'wb') as f: for line in file_obj.chunks(): f.write(line) return HttpResponse('OK') return render(request,'form_up.html')
二.ajax上传json数据
渲染:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css"> <script src="/static/jquery-3.3.1.js"></script> </head> <body> <button id="d1">click me!</button> </body> <script> $('#d1').click(function () { $.ajax({ url:'', // url参数可以不写,默认就是当前页面打开的地址 type:'post', contentType:'application/json', data:JSON.stringify({'name':'jason','hobby':'study'}), success:function (data) { alert(data) } }) }) </script> </html>
后台:
import json from django.http import JsonResponse def ajax_json(request): if request.method == 'POST': print(request.body) # json格式只有通过request.body才能查看 res = json.loads(request.body.decode('utf-8')) hobby = res.get('hobby') return HttpResponse('OK') # 必须返回HttpResponse对象 return render(request, 'ajax_json.html')
三.通过ajax上传文件
渲染:
<link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css"> <script src="/static/jquery-3.3.1.js"></script> <input type="file" name="myfile" id="i1"> <button id="d1">提交~</button> <script> $('#d1').click(function () { var formdata = new FormData(); // FormData对象不仅仅可以传文件还可以传普通的键值对 formdata.append('name','jason'); // 获取input框存放的文件 //$('#i1')[0]由Jquery对象变为js对象 formdata.append('myfile',$('#i1')[0].files[0]); $.ajax({ url:'', type:'post', data:formdata, // ajax发送文件需要修改两个固定的参数 processData:false, // 告诉浏览器不要处理我的数据 contentType:false, // 不要用任何的编码,就用我formdata自带的编码格式,django能够自动识别改formdata对象 // 回调函数 success:function (data) { alert(data) } }) }) </script>
后台:
def ajax_up(request): if request.method == 'POST': print(request.POST) # 普通的键值对:<QueryDict: {'name': ['jason']}> print(request.FILES) # 传文件< MultiValueDict: {'myfile': [ < InMemoryUploadedFile: day17课件.md(application / octet - stream) >]} > file_obj = request.FILES.get('myfile') with open(file_obj.name, 'wb') as f: for line in file_obj.chunks(): f.write(line) return HttpResponse('OK') return render(request, 'ajax_up.html')
四.中间件将jason格式数据转换到request.POST字典中
中间件:
from django.utils.deprecation import MiddlewareMixin import json class MyMiddleWare(MiddlewareMixin): def process_request(self,request): print('我是第一个自定义的中间件中process_request方法') import copy params = copy.deepcopy(request.POST) # params["firstname"] = "zhao" # print(params) # request.POST = params if not request.POST: if request.body: # < QueryDict: {'username': ['dasdas']} > res = json.loads(request.body.decode('utf-8')) print(res,type(res)) for k,v in res.items(): params[k] = v request.POST = params # print(request.POST) def process_response(self,request,response): print('我是第一个自定义的中间件中process_response方法') return response
后台(form表单和ajax_jason数据都能正常通过request.POST取出):
def ajax_json(request): if request.method == 'POST': # print(request.body) # json格式只有通过request.body才能查看 # res = json.loads(request.body.decode('utf-8')) # hobby = res.get('hobby') print(request.POST.get('hobby')) print(request.POST.get('name')) return HttpResponse('OK') # 必须返回HttpResponse对象 return render(request, 'ajax_json.html')
原文地址:https://www.cnblogs.com/sima-3/p/11390011.html
- JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】
- java中的序列化 (r4笔记第64天)
- JSP第四篇【EL表达式介绍、获取各类数据、11个内置对象、执行运算、回显数据、自定义函数、fn方法库】
- 03 整合IDEA+Maven+SSM框架的高并发的商品秒杀项目之web层
- JSP第三篇【JavaBean的介绍、JSP的行为--JavaBean】
- Java基础-06.总结二维数组,面向对象
- 04 整合IDEA+Maven+SSM框架的高并发的商品秒杀项目之高并发优化
- 过滤器第一篇【介绍、入门、简单应用】
- 通过pl/sql来格式化sql(r4笔记第63天)
- 程序员如何写出杀手级的简历
- 过滤器第二篇【编码、敏感词、压缩、转义过滤器】
- JSP第二篇【内置对象的介绍、4种属性范围、应用场景】
- Struts2的配置和一个简单的例子
- 监听器第一篇【基本概念、Servlet各个监听器】
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP中的数据库连接持久化
- ClickHouse王炸功能即将来袭?
- 搭建Amoeba实现MySQL主从数据库读写分离
- 如何在centos7上看墙外的世界
- 远程仓库的使用
- 破解某交(y)友(p)app的VIP&&半自动im机器人
- 关于compareTo使用的几种情况
- 高通量数据中批次效应的鉴定和处理(二)
- 通过ansible管理docker容器
- HBASE 技术细节 读取与写入 Region Split与合并介绍
- django2.2+Daphne+nginx+supervisor 生产环境部署
- Python 爬虫进阶必备 | 趣解某不可逆加密(短文警告)
- confluence6.3安装与破解
- git分支
- git使用介绍