1.前后端传输编码格式contentType:
urlencoded:
对应的数据格式:name=XXX&password=66
后端获取数据:request.POST
django会将urlencoded编码的数据解析自动放到request.POST
formdata:
form表单传输文件的编码格式
后端获取文件格式数据:request.FILES
后端获取普通键值对数据:request.POST
application/json
ajax发送json格式数据
需要注意的点
编码与数据格式要一致
2.form表单和ajax的异同点:
1)form表单不支持异步提交局部刷新
2)form表单不支持传输json格式的数据
3)form表单也ajax默认传输数据的编码格式都是urlencoded
3.ajax传输普通数据
<!DOCTYPE html><html lang="en"><head> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> <link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script></head> {#<input type="file" name="myfile" id="i1">#} <button id="d1"> 提交 </button><script> $(‘#d1‘).click(function(){ $.ajax({ // 提交的地址 url:‘/index/‘, //提交的方式 type:‘POST‘, //提交的数据 data:{‘name‘,‘sean‘,‘password‘:‘123‘}, //回调函数 success:function(data) { //data接收的就是异步提交返回的结果 alert(data) } }) }) </script>
4.ajax传文件数据
<script>? $(‘d1‘).click(function() { var formdata = new FormData(); //FormData对象不仅仅可以传文件还可以传普通的键值对 formdata.append(‘name‘,‘owen‘); //获取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>??
5.ajax传json数据
<script>? $(‘d1‘).click(function() { $.ajax({ url:‘‘, type:‘POST‘, contentType:‘application/json‘, data:Json.stringify({‘name‘:‘nick‘,‘hobby‘:‘study‘}), success:function(data) { alert(data) } }) })</script>?
后台
import jsonfrom django.http import JsonResponsedef ajax_json(request): if request.mrthod == ‘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‘)?
6.form表单
<h1> form_up</h1>?<form action="" method="POST" enctpe="multipart/form-data"> <input type="text" name="username"> <input type="file" name="my_file"> <input type="submit"></form>?
后台
def index(request): if request.method == ‘POST‘: print(request.POST) # 普通的键值对:<QueryDict: {‘name‘: [‘xxx‘]}> print(request.body) #print(request.FILES) #传文件< MultiValueDict: {‘myfile‘: [ < InMemoryUploadedFile: day17课件.md(application / octet - stream) >]} > return HttpResponse(‘OK‘) return render(request, ‘index.html‘)
DJango默认有七个中间件,但是django暴露给用户可以自定义中间件并且里面可以写5种方法
有response需要加上ruturn
process_request(self,request)
process_response(self,request,response)
process_view(se;f,request,view_func,view_args,view_kwargs)
process_template_response(self,request,response)
process_exception(self,request,exception)
‘mymiddleware.middleware.MyMiddleWare1‘
??from django.utils.deprecation import MiddlewareMixin?class MyMiddleware(midelewareMixin): def process_request(self,request): print(‘我是第一个自定义的中间件中procsee_request方法‘) def process_response(self,request,response): print(‘我是第一个自定义的中间件中process_response方法‘) return response #拷贝方法import copyparams=copy.deepcopy(request.POST)params[‘firstname‘] = "zhao"print(params)request.POST=params#可利用深拷贝在POST中手动添加键值对#https://www.cnblogs.com/zgf-666/p/9161910.html???中间件代码from django.utils.deprecation import MiddlewareMixinimport json?class MyMiddleware(MiddlewareMinxin): def procsee_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: #网页打印结果<Query:{‘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
原文地址:https://www.cnblogs.com/zrx19960128/p/11438322.html
时间: 2024-10-10 12:03:55