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、获取值(bodyPOST中都有值))

    # 使用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'})
    

results matching ""

    No results matching ""