form表单提交与ajax消息传递


form表单提交与ajax消息传递

1.前后端传输数据编码格式contentType:

       urlencoded
        
          对应的数据格式:name=xxx&password=666
          后端获取数据:request.POST
           ps;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传普通数据




    
    
    

{##}


4.ajax传文件数据



5.ajax传json数据:


后台:

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')

6.form表单

form_up

后台:
def index(request):
if request.method == 'POST':
print(request.POST) # 普通的键值对:
print(request.body)
#print(request.FILES)
#传文件< MultiValueDict: {'myfile': [ < InMemoryUploadedFile: day17课件.md(application / octet - stream) >]} >
return HttpResponse('OK')
return render(request, 'index.html')

七Django默认有七个中间件

Django默认有七个中间件,但是django暴露给用户可以自定义中间件并且里面可以写五种方法

中间件可以定义五个方法,分别是:(主要的是process_request和process_response)
有response需要加上return

process_request(self,request)
process_response(self, request, response)
process_view(self, 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(MiddlewareMixin):
    def process_request(self,request):
        print('我是第一个自定义的中间件中process_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(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