ajax和form表单,django的中间件

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

ajax和form表单,django的中间件的相关文章

使用ajax提交form表单,包括ajax文件上传 转http://www.cnblogs.com/zhuxiaojie/p/4783939.html

使用ajax提交form表单,包括ajax文件上传 前言 使用ajax请求数据,很多人都会,比如说: $.post(path,{data:data},function(data){ ... },"json"); 又或者是这样的ajax $.ajax({ url:"${pageContext.request.contextPath}/public/testupload", type:"post", data:{username:username},

通过php jq ajax 提交form表单

参考http://www.php100.com/html/webkaifa/PHP/PHPyingyong/2013/0619/13568.html html <div id="contact_form"> <form name="contact" method="post" > <label for="name" id="name_label">姓名</label

jquery的ajax提交form表单方式总结

方法一: function AddHandlingFeeToRefund() { var AjaxURL= "../OrderManagement/AjaxModifyOrderService.aspx"; alert($('#formAddHandlingFee').serialize()); $.ajax({ type: "POST", dataType: "html", url: AjaxURL + '?Action=' + 'Submit

ajax提交form表单资料详细汇总

一.ajax提交form表单和不同的form表单的提交主要区别在于,ajax提交表单是异步提交的,而普通的是同步提交的表单.通过在后台与服务器进行少量数据交换,ajax 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新.传统普通的网页(不使用ajax)如果需要更新内容,必须重载整个网页页面. 二.通过ajax提交form实现的登录实例: <body> <h1 align="center">用户登录</h1> &

AJAX提交form表单带文件上传

过了三天才想要写博客,这样不好,要改正 在做毕设的时候,用户发帖涉及到了文件上传的问题,在这里记录一下 背景: 在用户发帖的时候,用户只想发表文字postText,还有些用户想在发表postText的同时还发表一些图片,如何做? 上代码 不写的太细了,和流水账似的,挑重点记录一下. 1.前台的文件上传 本来想用form表单直接上传了,但是form提交时会刷新整个页面,但这不是我想要的,所以使用了ajax提交form表单. 利用ajax提交表单需要用到jquery.form.js这个包,网上有很多

jQuery实现ajax提交form表单(可以是提交json),用springmvc接收。图文详解

第一种方法(简单易用,防蚊虫): 1.1 从form表单到congtroller接收.1 是form表单,2 是ajax提交 3 springmvc接收 1.2 debug 看后台数据,看到了吧,userEO接收到数据了 1.3 有人想看看seralize和seralizeArray数据不同 seralize:id=1&name=xiaohua&age=18&sex=man seralizeArray[ id 1],[ name xiaohua],[ age 18],[ sex m

jQuery通过jquery.form.js插件使用AJAX提交Form表单

我简单使用了一下,jQuery Form插件有一下优点:  1.支持提交前验证. 2.支持提交后回调. 3.采用AJAX方式,有很好的用户体验 4.提交方式是灵活.只要指定要提交的form ID即可.想提交那个form.就可提交那个.同时提交参数可配置.5.支持提交多种类型数据.如:xml,json等. 主要的函数: 1.ajaxForm 增加所有需要的事件监听器,为AJAX提交表单做好准备.ajaxForm不能提交表单.在document的ready函数中,使用ajaxForm来为AJAX提交

AJAX 实现form表单提交

1.使用Ajax实现异步操作,点击登录按钮后,即触发form表单的提交事件,数据传输至后端 JSP: <script type="text/javascript" src="resources/js/jquery.js"></script> <script type="text/javascript" src="resources/js/login.js"></script> &

Ajax(form表单文件上传、请求头之contentType、Ajax传递json数据)

form表单文件上传 上菜 file_put.html <form action="" method="post" enctype="multipart/form-data"> {# 这里必须要请求头格式才能把上传文件的对象传过去 enctype="multipart/form-data"#} 姓名 <input type="text" name="user">