ajax和form表单,django的中间件
Posted zrx19960128
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ajax和form表单,django的中间件相关的知识,希望对你有一定的参考价值。
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表单不支持异步提交局部刷新
3)form表单也ajax默认传输数据的编码格式都是urlencoded
3.ajax传输普通数据
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 json
from django.http import JsonResponse
def 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 copy
params=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 MiddlewareMixin
import 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
以上是关于ajax和form表单,django的中间件的主要内容,如果未能解决你的问题,请参考以下文章
30_Django中关于使用ajax发送请求中`csrf_token`的问题和解决
使用Ajax验证并提交Django表单(django-crispy-forms)