Django-Ajax请求

news/2025/1/16 7:56:35/文章来源:https://www.cnblogs.com/megshuai/p/18517925

1.Django-Ajax请求

1.2 介绍

客户端(浏览器)向服务端发起请求的形式:

  • 1.地址栏:GET
  • 2.超链接标签:GET
  • 3.form表单:GET或POST
  • 4.Ajax(重要):GET或POST或PUT或DELETE

Ajax(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML,现在更多使用json数据)。

Ajax的特点和优点:

  • 异步
  • 局部刷新

1.3 应用:

1.4 json数据

Ajax只接收JSON的数据格式

Supports the following objects and types by default:+-------------------+---------------+| Python            | JSON          |+===================+===============+| dict              | object        |+-------------------+---------------+| list, tuple       | array         |+-------------------+---------------+| str               | string        |+-------------------+---------------+| int, float        | number        |+-------------------+---------------+| True              | true          |+-------------------+---------------+| False             | false         |+-------------------+---------------+| None              | null          |+-------------------+---------------+

1.4.1 python的序列化和反序列化方法

import jsondic = {"name": "yuan"}
dic_json = json.dumps(dic)	#序列化
dic = json.loads(dic_json)	#反序列化

1.4.2 Django支持的序列化方法

# 序列化响应类
from django.http import JsonResponse
JsonResponse({})
# 序列化queryset
from django.core import serializers
ret = models.Book.objects.all()
data = serializers.serialize("json", ret)

2.同源策略

2.1 同源策略和跨域

我们将html单独放在客户端,用浏览器打开,再出发事件就会报错,

这是由于浏览器的同源策略导致的。

同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。

同源策略,它是由Netscape提出的一个著名的安全策略。现在所有支持JavaScript 的浏览器都会使用这个策略。所谓同源是指,域名,协议,端口相同。当一个浏览器的两个tab页中分别打开来 百度和谷歌的页面当浏览器的百度tab页执行一个脚本的时候会检查这个脚本是属于哪个页面的,即检查是否同源,只有和百度同源的脚本才会被执行。如果非同源,那么在请求数据时,浏览器会在控制台中报一个异常,提示拒绝访问。

那么如何解决这种跨域问题呢,我们主要由三个思路:

jsonp
cors
前端代理

以下内容未验证通过

这里主要给大家介绍第二个:cors

CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。

整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。

因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。

所以,服务器方面只要添加一个响应头,同意跨域请求,浏览器也就不再拦截:

response = JsonResponse(data)
response["Access-Control-Allow-Origin"] = "*"

1.基于jQuery实现ajax调用

jQuery ajax json

2.ajax-自动计算


views.py

from django.http import JsonResponsedef ji(request):#获取前端传输的num值num1 = request.POST.getlist("num1")[0]#判断是否为空,为空则复制0,不为空则跳过if not num1:num1 = 0num2 = request.POST.getlist("num2")[0]if not  num2:num2 = 0num = int(num1) + int(num2)#手动序列化返回结果数据# return HttpResponse(json.dumps(num))#调用JsonResponse类,自动序列化return JsonResponse(num,safe=False)

book.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><p class="jisuan">加法运算:<input type="text" class="num1"> + <input type="text" class="num2"> = <input type="text" class="sum"></p><script>$("p input").blur(function () {//发送Ajax请求$.ajax({url: "/book/ji",type: "post",data: {"num1":$(".num1").val(),"num2":$(".num2").val()},success:function (res){console.log(res)$(".sum").val(res)}})})</script></body>
</html>

3.注册界面示例

views.py

# Create your views here.
def reg(request):return render(request, "reg.html")def reg_user(request):data = {"msg": "", "state": "success"}user = request.POST.get("user")if user == "yuan":data["state"] = "error"data["msg"] = "该用户已存在!"return JsonResponse(data)

reg.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><p>用户名:<input type="text"><span class="error" style="color: red"></span></p><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>
<script>$(":text").blur(function () {// 发送Ajax请求$.ajax({url: "http://127.0.0.1:8008/reg_user/",type: "post",data: {user: $(":text").val(),},success: function (response) {console.log(response);$(".error").html(response.msg);}})})</script></body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/824676.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ipv6使用上和ipv4有区别吗

IPv6与IPv4在使用上的主要区别包括:1.地址格式不同;2.地址空间更大;3.安全性增强;4.自动配置能力;5.数据包头部结构不同;6.路由选择优化;7.对多播和移动性的支持更好。IPv6的推出旨在解决IPv4地址耗尽问题,同时提高网络效率和安全性。IPv6的地址空间比IPv4大得多,提供…

IDEA 利用groovy脚本生成注释

介绍 本文主要介绍利用IDEA编辑器的活动模板,结合groovy脚本,生成注释模板。目前生成的注释主要适用于java和js文件 推荐此方式,可以根据需要定义groovy脚本,生成不同格式的注释操作点击 File >> Setting 找到 Edtor >> Live Temolates , 建议创建一个模板组…

TYPE-C PD浅谈(三)

由于TYPE-C两头都一样,没有方向性,所以在对接前并不会有电源输出,数据主从也尚未定义。在PD的规范内,针对装置对接,定义了三个电阻来进行对接的识别。 Rp:做为Provider需要在CC脚位上上拉一个Rp电阻。Rp电阻允许有三种阻值(pull high 5V时,10K/22K/56K),这三种阻值也同…

思考能力的提升从把复杂问题简单化开始

在生活中我们会遇到各种各样的问题。有些问题非常简单;有的却非常复杂,让人们无从下手去解决。 但有些看似复杂的问题,只要我们仔细去分析它们,拨开云雾,自然就会见到“青天”。这种分析方法,就是“化繁为简”的思考模式,也就是——简化思考法。当复杂的问题被简化之后,…

异常捕获

异常捕获当你的程序出现例外情况时就会发生异常(Exception)。例如,当你想要读取一个文件时,而那个文件却不存在,怎么办?又或者你在程序执报错了怎么办?这些通过使用异常来进行处理。类似地,如果你的程序中出现了一些无效的语句该怎么办?python 将会对此进行处理,举起…

怎样设置OKR

设置OKR的关键步骤是:一、确定目标(Objectives);二、设定关键结果(Key Results);三、设定优先级和责任人;四、跟踪和评估。明确目标是成功设置OKR的关键,只有在此基础上,才能制定出有意义的关键结果和OKR,从而帮助企业或个人实现目标。一、确定目标(Objectives) 目…

leetcode560 和为k的子数组

leetcode560 和为k的子数组package java2024_10.day30;import java.util.HashMap;public class leetcode560 {/*思路:前缀和+哈希表a[j]-a[i]=k即a[i]=a[j]-k遍历到下标j的时候,先判a[j]==k,相等就ans++,然后查哈希表中a[j]-k的数的个数,然后把a[j]放入哈希表中相当于:1.…

20222314 2024-2025-1 《网络与系统攻防技术》 实验三实验报告

网络与系统攻防实验报告 实验时间:2024-10-25 ~ 2024-10-31 实验人员:20222314陈振烨 实验地点:地下机房 指导教师:王志强 本周学习内容 学习了免杀的相关原理,掌握了msf的编码免杀基本操作,成功下载了veil加壳器并进行加壳免杀 实践内容 (1)正确使用msf编码器,veil-eva…

如何在Go中进行单元测试

# 如何在Go中进行单元测试 在Go语言中进行单元测试是确保代码质量和功能正确性的重要手段。Go的标准库提供了`testing`包来支持单元测试、基准测试、示例函数等测试方式。本文将详细介绍如何在Go语言中有效地进行单元测试,包括编写测试用例、运行测试、使用表驱动测试、测试覆…

多线程在打包工具中的运用

我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品。我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值。本文作者:UED 团队现代操作系统都是「多任务」的,也就是操作系统可以「并发」处理多个任务,比如可以在浏览页面的时候同时播放音乐。但是,…

网易伏羲:智能体驱动 未来可期 | 《天堂硅谷》杂志报道

近日,网易伏羲产品总监Jeff接受《天堂硅谷》杂志「创业在高新」专栏采访,分享网易伏羲在人工智能领域的最新成就与未来发展愿景,如全球首创的游戏Copilot AI队友及“灵动”机器人品牌,展现了网易伏羲从游戏到实体产业的全方位技术应用与突破。《天堂硅谷》杂志由杭州市高新…

知识点

1.OSI七层网络模型以及TCP/IP四层网络模型2.Web客户端作用:发送request请求 接受response响应 解析response响应 javascript的执行3.常见的安全测试类型:认证与授权 session 和 cookie 文件上传漏洞 缓存溢出漏洞 SQL注入 XSS跨站脚本攻击 DDos分布式拒绝服务攻击4.http的相应…