django中解析器的认识
一、为什么python
代码可以直接获取html
页面中提交的数据
我们前面第一章,第六小节已经介绍了django
获取页面传递的值的方法有post
,get
方式,我们为什么就可以获取到呢?这就是python
解析器的作用
二、django
中表单提交的方式(请求头application/x-www-form-urlencoded
)
1、请求头的认识
Content-Type: application/x-www-form-urlencoded
2、数据格式要求
csrfmiddlewaretoken=CudahlLFZR5ecu4SdLAzNRwnS883iz2Ady0V0AzVO0Nzrkf9k99GoE4RYjTwdR0g&username=123&passwd=admin123
3、获取值(
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'})