django中解析器的认识
一、为什么python代码可以直接获取html页面中提交的数据
我们前面第一章,第六小节已经介绍了django获取页面传递的值的方法有post,get方式,我们为什么就可以获取到呢?这就是python解析器的作用
二、django中表单提交的方式(请求头application/x-www-form-urlencoded)
1、请求头的认识
Content-Type: application/x-www-form-urlencoded2、数据格式要求
csrfmiddlewaretoken=CudahlLFZR5ecu4SdLAzNRwnS883iz2Ady0V0AzVO0Nzrkf9k99GoE4RYjTwdR0g&username=123&passwd=admin1233、获取值(
body和POST中都有值))# 使用request.body获取到的值 b'csrfmiddlewaretoken=G9e7rzWmFDInA2oIRQimIp5eCgGGYVZDhd1SaOKCuMqIPSzZYeRtjcDIIrr9TdXj&username=123&passwd=admin123' # 使用request.POST获取的值 <QueryDict: {'csrfmiddlewaretoken': ['G9e7rzWmFDInA2oIRQimIp5eCgGGYVZDhd1SaOKCuMqIPSzZYeRtjcDIIrr9TdXj'], 'username': ['123'], 'passwd': ['admin123']}>
三、直接使用ajax提交数据
如果
ajax中不指定请求头也是默认application/x-www-form-urlencoded方式,使用情况跟上面一样的
$(function () {
$('#submit').on('click', function () {
var username = $('#username').val();
var passwd = $('#passwd').val()
$.ajax({
method: 'post',
url: '/login/',
data: {username: username, passwd: passwd},
success: function (data) {
console.log(data)
}
})
})
})
四、django提交数据场景二(请求头application/json)
1、请求头
'Content-Type': 'application/json'2、发送数据方式(使用
ajax发送数据)$(function () { $('#submit').on('click', function () { var username = $('#username').val(); var passwd = $('#passwd').val() $.ajax({ method: 'post', url: '/login/', data: {username: username, passwd: passwd}, headers: { 'Content-Type': 'application/json' }, success: function (data) { console.log(data) } }) }) })3、获取数据
# 在body中有值,但是POST中没有值 from django.shortcuts import render from django.views import View from django.http import JsonResponse class LoginView(View): def get(self, request): return render(request, 'login.html') def post(self, request): print('POST', request.POST) print('body', request.body) return JsonResponse({'code': 0, 'message': 'success'})
五、如果客户端传递是方式是字符串
1、客户端
$(function () { $('#submit').on('click', function () { var username = $('#username').val(); var passwd = $('#passwd').val() $.ajax({ method: 'post', url: '/login/', data: JSON.stringify({username: username, passwd: passwd}), headers: { 'Content-Type': 'application/json' }, success: function (data) { console.log(data) } }) }) })2、服务器端使用
json.loads()转换出来from django.shortcuts import render from django.views import View from django.http import JsonResponse import json class LoginView(View): def get(self, request): return render(request, 'login.html') def post(self, request): print('POST', request.POST) print('body', request.body) print(json.loads(request.body).get('username')) return JsonResponse({'code': 0, 'message': 'success'})