Django中使用AJAX的详细过程

 更新时间:2022年11月02日 12:16:27   作者:-一脸懵逼-  
在项目中前后端数据相互是一种常态,下面这篇文章主要给大家介绍了关于Django中使用AJAX的详细过程,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

AJAX

AJAX是前端技术的集合,包括JavaScript、XML、HTML、CSS等。

AJAX的作用

提升用户体验。

JQuery

JQuery是一个兼容多种浏览器的JavaScript库。

JQuery的作用

JQuery简化JavaScript的使用,同理,简化AJAX的使用。

在线链接

Django版本:3.0.6

JQuery版本:1.12.4

<script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.12.4.min.js"></script>

AJAX的使用方法

urls.py

from django.urls import path
import Public.views

urlpatterns = [
    path('error/',Public.views.error),
]

views.py

from django.http import HttpResponse, request, response
from django.shortcuts import redirect, render, resolve_url
def error(request):
    if request.method == 'POST':
        num1 = request.POST.get('num1',0)
        num2 = request.POST.get('num2',0)
        num = int(num1)+int(num2)
        return HttpResponse(str(num))  #POST请求仅返回HttpResponse值
    return render(request, 'error.html')  #GET请求返回error.html界面

error.html #使用error界面进行测试

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>error</title>
    <script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.12.4.min.js"></script>
</head>
<body>
    <!-- 增加多个回车是为了明显显示是否会刷新界面 -->
    <br> 
	<input type="text" id="d1"> +
	<input type="text" id="d2"> =
	<input type="text" id="d3">
	<button id="btn">计算</button>
    <!-- 添加csrf_token -->
	{% csrf_token %} 
<script>
    $('#btn').click(function () {
		var csrf = $('input[name="csrfmiddlewaretoken"]').val();  //增加csrf变量将在data中传参以避免403错误
        // 朝后端发送ajax请求
        $.ajax({
            // 1.指定朝哪个后端发送ajax请求
            url:'', //不写就是朝当前地址提交【与form表单的action参数相同】
            // 2.请求方式
            type:'post',  // 不指定默认就是get,都是小写
            // 3.数据
            data:{'num1':$('#d1').val(), 'num2':$('#d2').val(),'csrfmiddlewaretoken': csrf},
            // 4.回调函数:当后端给你返回结果的时候会自动触发,args接受后端的返回结果
            success:function (args) {
                $('#d3').val(args)
            }
        })
    })
</script>
</body>
</html>

输出效果:输入2+2,点击计算,异步计算结果为4并返回前端

X3倍后代码

urls.py

from django.urls import path
import Public.views

urlpatterns = [
    path('error/',Public.views.error),
]

views.py

from django.http import HttpResponse, request, response
from django.shortcuts import redirect, render, resolve_url
def error(request):
    if request.method == 'POST':
        num1 = request.POST.get('num1',0)
        num2 = request.POST.get('num2',0)
        num = int(num1)+int(num2)
        return HttpResponse(str(num))  #POST请求仅返回HttpResponse值
    return render(request, 'error.html')  #GET请求返回error.html界面

error.html #使用error界面进行测试

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>error</title>
    <script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.12.4.min.js"></script>
</head>
<body>
    <!-- 增加多个回车是为了明显显示是否会刷新界面 -->
    <br> 
	<input type="text" id="d1"> +
	<input type="text" id="d2"> =
	<input type="text" id="d3">
	<button id="btn1">计算</button>
    <br> 
	<input type="text" id="d4"> +
	<input type="text" id="d5"> =
	<input type="text" id="d6">
	<button id="btn2">计算</button>
    <br> 
	<input type="text" id="d7"> +
	<input type="text" id="d8"> =
	<input type="text" id="d9">
	<button id="btn3">计算</button>
    <!-- 添加csrf_token -->
	{% csrf_token %} 
<script>
    $('#btn1').click(function () {
		var csrf = $('input[name="csrfmiddlewaretoken"]').val();  //增加csrf变量将在data中传参以避免403错误
        // 朝后端发送ajax请求
        $.ajax({
            // 1.指定朝哪个后端发送ajax请求
            url:'', //不写就是朝当前地址提交【与form表单的action参数相同】
            // 2.请求方式
            type:'post',  // 不指定默认就是get,都是小写
            // 3.数据
            data:{'num1':$('#d1').val(), 'num2':$('#d2').val(),'csrfmiddlewaretoken': csrf},
            // 4.回调函数:当后端给你返回结果的时候会自动触发,args接受后端的返回结果
            success:function (args) {
                $('#d3').val(args)
            }
        })
    })
    $('#btn2').click(function () {
		var csrf = $('input[name="csrfmiddlewaretoken"]').val();  //增加csrf变量将在data中传参以避免403错误
        // 朝后端发送ajax请求
        $.ajax({
            // 1.指定朝哪个后端发送ajax请求
            url:'', //不写就是朝当前地址提交【与form表单的action参数相同】
            // 2.请求方式
            type:'post',  // 不指定默认就是get,都是小写
            // 3.数据
            data:{'num1':$('#d4').val(), 'num2':$('#d5').val(),'csrfmiddlewaretoken': csrf},
            // 4.回调函数:当后端给你返回结果的时候会自动触发,args接受后端的返回结果
            success:function (args) {
                $('#d6').val(args)
            }
        })
    })
    $('#btn3').click(function () {
		var csrf = $('input[name="csrfmiddlewaretoken"]').val();  //增加csrf变量将在data中传参以避免403错误
        // 朝后端发送ajax请求
        $.ajax({
            // 1.指定朝哪个后端发送ajax请求
            url:'', //不写就是朝当前地址提交【与form表单的action参数相同】
            // 2.请求方式
            type:'post',  // 不指定默认就是get,都是小写
            // 3.数据
            data:{'num1':$('#d7').val(), 'num2':$('#d8').val(),'csrfmiddlewaretoken': csrf},
            // 4.回调函数:当后端给你返回结果的时候会自动触发,args接受后端的返回结果
            success:function (args) {
                $('#d9').val(args)
            }
        })
    })
</script>
</body>
</html>

输出效果:分别输入三组数值,点击不同的计算,异步计算结果后根据点击的计算返回前端

for循环后代码

urls.py

from django.urls import path
import Public.views

urlpatterns = [
    path('error/',Public.views.error),
]

views.py

from django.http import HttpResponse, request, response
from django.shortcuts import redirect, render, resolve_url
def error(request):
    if request.method == 'POST':
        num1 = request.POST.get('num1',0)
        num2 = request.POST.get('num2',0)
        num = int(num1)+int(num2)
        return HttpResponse(str(num))  #POST请求仅返回HttpResponse值
    return render(request, 'error.html')  #GET请求返回error.html界面

error.html #使用error界面进行测试

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>error</title>
    <script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.12.4.min.js"></script>
</head>

<body>
    {% for i in '369'|make_list %}  <!-- for循环 -->
        <br>  <!-- 增加多个回车是为了明显显示是否会刷新界面 -->
        <input type="text" id="d{{i|add:-2}}"> +  <!-- id使用python计算 -->
        <input type="text" id="d{{i|add:-1}}"> =  <!-- id使用python计算 -->
        <input type="text" id="d{{i}}">  <!-- id使用python计算 -->
        <button class="btn" id="btn{{i}}">计算</button>  <!-- id使用python计算 -->
    {% endfor %}
    {% csrf_token %}  <!-- 添加csrf_token -->
    <script>
        $('.btn').click(function () {
            var csrf = $('input[name="csrfmiddlewaretoken"]').val();  //增加csrf变量将在data中传参以避免403错误
            var btn = $(this).attr('id')  //取id值
            var varnum1 = "#d"+(btn.replace("btn","")-2)  //取id值
            var varnum2 = "#d"+(btn.replace("btn","")-1)  //取id值
            var varnum3 = "#d"+(btn.replace("btn",""))  //取id值
            var num1 = $(varnum1).val()  //取id递增序号值
            var num2 = $(varnum2).val()  //取id递增序号值
            var num3 = $(varnum3).val()  //取id递增序号值
            // 朝后端发送ajax请求
            $.ajax({
                // 1.指定朝哪个后端发送ajax请求
                url: '', //不写就是朝当前地址提交【与form表单的action参数相同】
                // 2.请求方式
                type: 'post',  // 不指定默认就是get,都是小写
                // 3.数据
                data: { 'num1': num1, 'num2': num2, 'csrfmiddlewaretoken': csrf },
                // 4.回调函数:当后端给你返回结果的时候会自动触发,args接受后端的返回结果
                success: function (args) {
                    $(varnum3).val(args)
                }
            })
        })
    </script>
</body>

</html>

输出效果:分别输入三组数值,点击不同的计算,异步计算结果后根据点击的计算返回前端

输入完成后单数据提交代码

urls.py

from django.urls import path
import Public.views

urlpatterns = [
    path('error/',Public.views.error),
]

views.py

def error(request):
    if request.method == 'POST':
        num1 = request.POST.get('num1',0)
        num2 = request.POST.get('num2',0)
        num = int(num1)+int(num2)
        return HttpResponse(str(num))  #POST请求仅返回HttpResponse值
    return render(request, 'error.html')  #GET请求返回error.html界面

error.html #使用error界面进行测试

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>error</title>
    <script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.12.4.min.js"></script>
</head>

<body onclick="click()">
    {% for i in '369'|make_list %}
    <!-- for循环 -->
    <br> <!-- 增加多个回车是为了明显显示是否会刷新界面 -->
    <input type="text" id="d{{i|add:-2}}"> +
    <!-- id使用python计算 -->
    <input type="text" id="d{{i|add:-1}}"> =
    <!-- id使用python计算 -->
    <input type="text" id="d{{i}}"> <!-- id使用python计算 -->
    <button class="btn" id="btn{{i}}">计算</button> <!-- id使用python计算 -->
    {% endfor %}
    {% csrf_token %}
    <!-- 添加csrf_token -->
    <script>
        $('.btn').click(function () {
            var csrf = $('input[name="csrfmiddlewaretoken"]').val();  //增加csrf变量将在data中传参以避免403错误
            var btn = $(this).attr('id')  //取id值
            var varnum1 = "#d" + (btn.replace("btn", "") - 2)  //取id值
            var varnum2 = "#d" + (btn.replace("btn", "") - 1)  //取id值
            var varnum3 = "#d" + (btn.replace("btn", ""))  //取id值
            var num1 = $(varnum1).val()  //取id递增序号值
            var num2 = $(varnum2).val()  //取id递增序号值
            var num3 = $(varnum3).val()  //取id递增序号值
            // 朝后端发送ajax请求
            $.ajax({
                // 1.指定朝哪个后端发送ajax请求
                url: '', //不写就是朝当前地址提交【与form表单的action参数相同】
                // 2.请求方式
                type: 'post',  // 不指定默认就是get,都是小写
                // 3.数据
                data: { 'num1': num1, 'num2': num2, 'csrfmiddlewaretoken': csrf },
                // 4.回调函数:当后端给你返回结果的时候会自动触发,args接受后端的返回结果
                success: function (args) {
                    $(varnum3).val(args)
                }
            })
        })
    </script>
    <script>
        document.addEventListener("mouseout", function (e) {  //获取光标事件
            var num = ($(e.target).attr('id')).replace("d", "").replace("btn", "")  //获取光标所在元素id
            if (num % 3 === 0) {
            }
            else if (num % 3 === 1) {
                num = parseInt(num) + 2
            }
            else if (num % 3 === 2) {
                num = parseInt(num) + 1
            }
            varnum = "#btn" + num
            $(varnum).click()
        });
        document.addEventListener("keydown", function (e) {  //获取按键事件
            if ((e.keyCode == 9) || (e.keyCode == 32) || (e.keyCode == 13) || ((((e.keyCode == 83)) && (navigator.platform.match("Mac") ? e.metaKey : e.ctrlKey)))) {  //当按键为Tab、Enter、Space、Ctrl+S时执行操作
                var num = (document.activeElement.id).replace("d", "").replace("btn", "")  //获取所在位置元素id
                if (num % 3 === 0) {
                }
                else if (num % 3 === 1) {
                    num = parseInt(num) + 2
                }
                else if (num % 3 === 2) {
                    num = parseInt(num) + 1
                }
                varnum = "#btn" + num
                $(varnum).click()
            }
        });
    </script>
</body>

</html>

输出效果:值输到哪里,哪里就会显示出结果,无须点击计算按钮

最后把计算按钮隐藏一下

    <button hidden class="btn" id="btn{{i}}">计算</button> <!-- id使用python计算 -->

本来还想做一下一键全部提交代码、输入完成后全数据提交代码两个功能,但发现这样要提交的post值太多了,还是一次提交单个或单行数据比较靠谱

参考链接:

  • https://www.cnblogs.com/yangyi215/p/14964897.html
  • https://www.cnblogs.com/oldpai/p/9637774.html

总结 

到此这篇关于Django中使用AJAX的文章就介绍到这了,更多相关Django使用AJAX内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python 中Arduino串口传输数据到电脑并保存至excel表格

    python 中Arduino串口传输数据到电脑并保存至excel表格

    这篇文章主要介绍了python Arduino串口传输数据到电脑并保存至excel表格,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • python利用requests库进行接口测试的方法详解

    python利用requests库进行接口测试的方法详解

    在python的标准库中,虽然提供了urllib,utllib2,httplib,但是做接口测试,requests真心好,正如官方说的,“让HTTP服务人类”,一言以蔽之,说明一切,这篇文章主要给大家介绍了关于python利用requests库进行接口测试的相关资料,需要的朋友可以参考下
    2018-07-07
  • Python基础知识之推导式详解

    Python基础知识之推导式详解

    这篇文章主要介绍了Python基础知识之推导式详解,Python推导式是一种简洁高效的代码编写方式,可以用一行代码来创建列表、集合、字典等复杂数据结构,需要的朋友可以参考下
    2023-07-07
  • Python使用Chardet库检测字符编码的操作详解

    Python使用Chardet库检测字符编码的操作详解

    在处理文本数据时,字符编码问题是一个常见的挑战,如果编码不正确,可能会导致乱码问题,而 Chardet 是 Python 中非常实用的一个库,可以帮助我们快速检测文件或字符串的编码格式,本文给大家详细介绍了Python Chardet 库用法,需要的朋友可以参考下
    2025-01-01
  • django rest framework之请求与响应(详解)

    django rest framework之请求与响应(详解)

    下面小编就为大家带来一篇django rest framework之请求与响应(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望对大家有所帮助
    2017-11-11
  • Python编程判断一个正整数是否为素数的方法

    Python编程判断一个正整数是否为素数的方法

    这篇文章主要介绍了Python编程判断一个正整数是否为素数的方法,涉及Python数学运算相关操作技巧,需要的朋友可以参考下
    2017-04-04
  • 浅谈Python爬虫基本套路

    浅谈Python爬虫基本套路

    这篇文章主要介绍了Python爬虫基本套路,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 爬虫使用IP来隐藏真实地址的过程(python示例)

    爬虫使用IP来隐藏真实地址的过程(python示例)

    这篇文章主要为大家介绍了爬虫使用IP来隐藏真实地址的过程(python示例)详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Flaks基础之在URL中添加变量的实现详解

    Flaks基础之在URL中添加变量的实现详解

    这篇文章主要介绍了在python开发中,Flaks框架之上在URL链接中添加变量的实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-09-09
  • Django request.META.get()获取不到header头的原因分析

    Django request.META.get()获取不到header头的原因分析

    这篇文章主要介绍了Django request.META.get()获取不到header头的原因分析,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04

最新评论