html 表单提交 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传普通数据

{##}

提交~

$('#d1').click(function () {

$.ajax({

// 提交的地址

url:'/index/',

// 提交的方式

type:'post',

// 提交的数据

data:{'name':'sean','password':'123'},

// 回调函数

success:function (data) { // data接收的就是异步提交返回的结果

alert(data)

}

})

})

专门建立的学习Q-q-u-n: 731771211,分享学习方法和需要注意的小细节,不停更新最新的教程和学习技巧

(从零基础开始到前端项目实战教程,学习工具,全栈开发学习路线以及规划)

4.ajax传文件数据

$('#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)

}

})

})

5.ajax传json数据:

$('#d1').click(function () {

$.ajax({

url:'', // url参数可以不写,默认就是当前页面打开的地址

type:'post',

contentType:'application/json',

data:JSON.stringify({'name':'nick','hobby':'study'}),

success:function (data) {

alert(data)

}

})

})

后台:

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

专门建立的学习Q-q-u-n: 731771211,分享学习方法和需要注意的小细节,不停更新最新的教程和学习技巧

(从零基础开始到前端项目实战教程,学习工具,全栈开发学习路线以及规划)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值