欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Django Ajax请求实例

程序员文章站 2022-07-14 22:39:43
...

Ajax请求:

  异步请求,在不刷新页面的情况下,向服务器发起局部请求,请求成功之后,数据返回到发起请求的位置,通常是一段js代码。

  • 常规请求的弊端:
     1.容易提交冗余
     2.用户体验差
  • 使用ajax的原因:
     1.ajax是局部提交
     2.ajax提交不会刷新页面,用户体验好
     3.ajax可以进行异步提交,保证页面流畅

Ajax是基于js语言,在前端构建一个请求对象,发起请求的过程,使用原生js可以完成ajax的编写,但是代码太过复杂。通常在开发过程当中,我们使用jquery进行ajax请求。

一、Ajax get请求(以校验用户名是否存在为例)
1.前端部分:

<script src="/static/static/jquery/2.2.4/jquery.min.js"></script>
<script>
$(
    function () {
        $('#username').blur(
            function () {
                var username = $('#username').val();
                $.ajax(
                    {
                        url:"/userValid/?name="+username,
                        type:"get",
                        data:"",
                        success:function (data) {
                            $('#error_massage').text(data["data"])
                            console.log(data["data"])
                        },
                        error:function (error) {
                            console.log(error)
                        }
                    }
                )

            }
        )
    }
)
</script>

2.视图函数部分

from django.http import JsonResponse
def userValid(request):
    result = {"data": "","code": 200}
    username = request.GET.get("name")
    if username:
        user = LoginUser.objects.filter(nickname=username).first()
        if user:
            result["data"] = "用户名重复"
        else:
            result["data"] = "用户名可以使用"
    return JsonResponse(result)

效果如下:
Django Ajax请求实例

二、Ajax post请求

1.前端部分

<script>
$("#submit").click(
    function () {
        var username = $("#username").val();
        var email = $("#email").val();
        var password = $("#password").val();
        var picture = $("#picture")[0].files[0];

        var formData = new FormData();
        formData.append("username",username);
        formData.append("email",email);
        formData.append("password",password);
        formData.append("picture",picture);
        formData.append("csrfmiddlewaretoken",'{{ csrf_token }}');
        $.ajax(
            {
                url:"/register_ajax/",
                type:"post",
                data:formData,
                processData: false, //是否严格校验数据类型
                contentType:false, //是否严格校验内容类型
                dataType: "json", //请求数据的格式为json,在部分浏览器需要
                success:function (data) {
                    console.log(data)
                    alert('提交成功')
                },
                error:function (error) {
                    console.log(error)
                }
            }
        )


    }
)
</script>
  • 注意:
    1.图片获取方式
    2.文件上传需要使用FormData对数据进行封装
    3.如果传输图片,需要特殊校验:
      processData 是否严格校验数据类型
      contentType 是否严格校验内容类型
      dataType 传输数据的类型

2.视图函数

def register_ajax(request):
    if request.method == "POST":
        username = request.POST.get('username')
        password = request.POST.get('password')
        email = request.POST.get('email')
        picture = request.FILES.get('picture')
        user = LoginUser()
        user.nickname = username
        user.email = email
        user.picture = picture
        user.save()
    return JsonResponse({"data": "保存成功"})

3.效果展示
Django Ajax请求实例

三、 总结

我画了一张图来解释整个ajax请求过程
Django Ajax请求实例