Django做网页后端之解决Ajax的请求异域问题

news/2024/10/23 11:25:00/

最近学习了Django的框架嘛,写项目的时候,想前后端分离,就用Django做后端,遇到了典型的跨域问题,那么我的前端实力不够强,也不会用Ajax来解决这个跨域问题,于是着手于Django后端解决这个问题,也就是让服务器能够识别跨域的请求

首先我用个前端的测试界面,这是我最近写的一个简单的前端测试界面

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>阿贾克斯</title><style>#request{width: 200px;height: 100px;border: solid 1px #90b;}</style><script>$.ajaxSetup({data: {csrfmiddlewaretoken: '{{ csrf_token }}' },});</script>
</head>
<body><button>点击发送请求</button>
<div id="request">
</div><script>const btn = document.getElementsByTagName('button')[0];btn.onclick = function (){//1。创建对象const xhr = new XMLHttpRequest();//2.初始化xhr.open('GET', 'http://127.0.0.1:8000/');//3.发送xhr.send();//4.事件绑定xhr.onreadystatechange=function (){//处理服务端返回结果// 判断服务器返回了所有的结果if(xhr.readyState ===4){//判断响应状态码if(xhr.status >= 200 &&xhr.status <300){//处理结果 行,头,空行,题//1.响应行console.log(xhr.status);//状态码console.log(xhr.statusText);//状态字符吗console.log(xhr.getAllResponseHeaders())//所有响应头console.log(xhr.response);const div = document.getElementsByTagName('div')[0];div.innerHTML = xhr.response;}else{}}}}</script>
</body>
</html>

后端Django代码,首先是根目录下的url

from django.contrib import admin
from django.urls import path
from django.urls import include
from . import viewsurlpatterns = [path('admin/', admin.site.urls),path('', views.index),
]

接下来是处理url下的请求的view.py

from django.http import HttpResponse,JsonResponsedef index(request):if request.method == 'GET':print(request)return HttpResponse('HELLO AJAX')if request.method == 'POST':print(request.POST)return HttpResponse('HELLO AJAX')

接下来是典型的跨域问题:如图
控制台的报错
控制台报错是跨域问题
在这里插入图片描述
可以打开这个请求的明明,数据都返回了
在这里插入图片描述
但是按照服务逻辑应该出现的

那么就是典型的跨域问题了

我想到之前的中间件可以控制接入服务器的域名和用户,我就想到了中间件解决这个问题。在度娘帮助下,确实有这个解决方案

记录一下

通过第三方包方式:https://github.com/ottoyiu/django-cors-headers

注意:第三方包对Django的版本有要求

  1. 安装这个包 pip install django-cors-headers
  2. 配置settings.py文件
    在INSTALLED_APPS里添加“corsheaders”
    INSTALLED_APPS = [
    ...
    'corsheaders'...
    ]
    
  3. 在MIDDLEWARE_CLASSES添加中间件:django-cors-headers
    MIDDLEWARE_CLASSES = (
    ...
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
    )
    
  4. 在sitting.py底部添加
    CORS_ALLOW_CREDENTIALS = True
    CORS_ORIGIN_ALLOW_ALL = True
    CORS_ORIGIN_WHITELIST = ()CORS_ALLOW_METHODS = ('DELETE','GET','OPTIONS','PATCH','POST','PUT','VIEW',
    )CORS_ALLOW_HEADERS = ('accept','accept-encoding','authorization','content-type','dnt','origin','user-agent','x-csrftoken','x-requested-with',
    )
    

配置好之后,runserver,前端静态页面进行发送请求
在这里插入图片描述

可以看到,成功发送并接收。完美解决。

我用的Django是3.2版本的。给大家参考。


http://www.ppmy.cn/news/941070.html

相关文章

手机获取linux内核权限,潘多拉实验室曝Linux内核漏洞 可获取最高权限

在谷歌正式发布Android 9 Pie系统后一个月后&#xff0c;9月20日&#xff0c;阿里安全潘多拉实验室再次曝出其Linux系统存在严重漏洞——WrongZone (异域)&#xff0c;该漏洞为内核漏洞&#xff0c;让若被不法分子掌握&#xff0c;可直接对Root授权&#xff0c;获得最高权限从而…

【10.28模拟赛T4】最大异域和【数论异或】

分析&#xff1a; 因为不能有两个 0 0 0 或两个 1 1 1 统计出每个数二进制下 1 1 1的个数 如果只有 1 1 1位 1 1 1则直接算 2 i 2^i 2i 要么则后面的都可以为 1 1 1 可以选 全部累加成 2 j 2^j 2j即可 CODE&#xff1a; #include<iostream> #include<cstdio> #i…

“影像新物种”小米11Ultra:深耕影像技术,小米用实力定义手机摄影发展趋势

2021年3月,小米召开了为期两天的春季新品发布会,正式发布小米11Ultra、小米11Pro、小米MIX FOLD三款旗舰手机。在发布会上,小米创始人雷军喊出了“拐点之战”的口号,认为手机影像与传统相机已经到了正面碰撞的时刻。小米做的,就是要用智能手机拯救不会拍照的你! 计算摄影、自研…

【SSL_2020.10.28】最大异域和

最大异域和 解题思路 由于我们可以选 0 0 0 ~ x i x_i xi​ 的所有数&#xff0c;所以如果有任意一位为 1 1 1 那么它后面都可以为 1 1 1。 code ll n,a[110],ans; ll t[50]; ll pow2[50],maxn;int main() {cin>>n;pow2[0]1;for(int i1;i<31;i)pow2[i]pow2[i-1]…

简单剖析OLAP异域猛兽——ClickHouse设计思路

ClickHouse 是一个用于联机分析 (OLAP) 的列式数据库管理系统 (DBMS)。 异域是因为它来自俄罗斯&#xff0c;Yandex 公司&#xff0c;这家公司是俄罗斯本土搜索引擎企业&#xff0c;原本是为了分析自家的 Web 流量而开发的一款产品 &#xff0c;后来经过演变&#xff0c;逐渐形…

异域||跨域(二)

跨源网络访问 同源策略控制了不同源之间的交互&#xff0c;例如在使用XMLHttpRequest 或受到同源策略的约束。这些交互通常分为三类&#xff1a; 通常允许跨域写操作&#xff08;Cross-origin writes&#xff09;。例如链接&#xff08;links&#xff09;&#xff0c;重定向以…

【10.28 校内普及组】 最大异域和 题解

【10.28 校内普及组】 最大异域和 题解 题目 解题思路 求出每个数的二进制 答案和每个数比较 从高位到低位比较 如果两个数的一位都是1 那答案往后的位都为1 代码 #include<algorithm> #include<iostream> #include<cstdio> using namespace std; int n,t…

异域||跨域(一)同源策略

*****同源策略***** 如果两个页面的协议&#xff0c;端口&#xff08;如果有指定&#xff09;和主机都相同&#xff0c;则两个页面具有相同的源。 我们也可以把它称为“协议/主机/端口 tuple”&#xff0c;或简单地叫做“tuple". ("tuple" &#xff0c;“元”&…