Django中解决跨域问题

这篇具有很好参考价值的文章主要介绍了Django中解决跨域问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

同源策略(Same origin policy)是一种约定,它规定了 请求的url地址,必须与浏览器上的url地址处于同域上,也就是域名,端口,协议相同,如果不一致,请求会发送成功,后端会正常响应,但是浏览器会拦截

跨域问题产生的原因:

浏览器对非同源请求返回的结果做了拦截,只要做前后端分离,就会产生跨域问题

解决跨域问题

CORS:跨域资源共享 ,向相应头中加数据,允许跨域

JSONP:利用有的标签没有跨域问题 比如script img

websocket:长连接,不存在跨域

前端代理:开发阶段用,上线不用

CORS如何解决跨域问题

首先我们需要服务端支持----》就是服务端在相应头中加数据

CORS基本流程

CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)

简单请求:只发送一次

非简单请求:发送两次,第一次是OPTIONS请求,第二次是真正的请求

什么是简单请求,什么是非简单请求

只要同时满足以下两大条件,就属于简单请求。

1.请求方式是以下三种方式之一

HEAD

GET

POST

2.HTTP的头信息不超出以下几种字段:

    Accept
    Accept-Language
    Content-Language
    Last-Event-ID
    Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain

凡是不同时满足上面两个条件,就属于非简单请求。

解决跨域问题

方案一

统一写一个中间件,处理所有跨域

from django.utils.deprecation import MiddlewareMixin
class CorsMiddleWare(MiddlewareMixin):
    def process_response(self,request,response):
        if request.method=="OPTIONS":
            #可以加*
            response["Access-Control-Allow-Headers"]="*"
            res['Access-Control-Allow-Methods'] = '*'
        response["Access-Control-Allow-Origin"] = "*"
        return response

方案二

使用第三方模块文章来源地址https://www.toymoban.com/news/detail-815333.html

	# 1、使用pip安装
	pip install django-cors-headers
    #2、添加到setting的app中
    INSTALLED_APPS = (
        ...
        'corsheaders',
        ...
    )
  #3、添加中间件
    MIDDLEWARE = [  
        ...
        'corsheaders.middleware.CorsMiddleware',
        ...
    ]
4、setting下面添加下面的配置
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_METHODS = (
	'DELETE',
	'GET',
	'OPTIONS',
	'PATCH',
	'POST',
	'PUT',
	'VIEW',
)

CORS_ALLOW_HEADERS = (
	'XMLHttpRequest',
	'X_FILENAME',
	'accept-encoding',
	'authorization',
	'content-type',
	'dnt',
	'origin',
	'user-agent',
	'x-csrftoken',
	'x-requested-with',
	'Pragma',
	'token'
)

到了这里,关于Django中解决跨域问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python获取类名__qualname__,解决django接口ObjectDoesNotExist异常寻找model的问题

    在django项目中,经常使用类似Model.objects.get(id=1)的方法取对象,默认抛出的异常是ObjectDoesNotExist类型,通过try catch可以把异常捕获,获取的异常是Model.DoesNotExist类型, 要获知其类名,可以使用__name__方法 要获知其完整类名,可以使用__qualname__方法 还想要获取定义类的路径,可

    2024年02月14日
    浏览(37)
  • Django-跨域

    cors 跨域资源共享 满足以下全部条件的请求为 简单请求 1.请求方法如下:         GET or HEAR or POS 2.请求头仅包含如下:         Accept、Accept-Language、Content-Language、Content-Type 3.ConTent-Type 仅支持如下三种:         applicatiion/x-www-form-urlencoded         multipart/form-data        

    2024年02月10日
    浏览(34)
  • Django问题及解决

    linux进入已安装好的数据库 xadmin版本问题 django cannot import name \\\'python_2_unicode_compatible\\\' from \\\'django.utils.encoding 将 替换成 django cannot import name \\\'six\\\' from \\\'django.utils\\\' 进入文件夹python3.6/site-packages 将six.py 复制到 django/utils ImportError: cannot import name \\\'ugettext_lazy\\\' from \\\'django.utils.translation\\\' 改为

    2024年02月07日
    浏览(29)
  • 【Django网络安全】如何正确设置跨域

    原文作者 :我辈李想 版权声明 :文章原创,转载时请务必加上原文超链接、作者信息和本声明。 【Django网络安全】如何正确设置跨域 【Django网络安全】如何正确防护CSRF跨站点请求伪造 同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读

    2024年02月12日
    浏览(41)
  • windows解决python安装django架构没有django-admin命令

    目录 一.尝试安装与配置 1.直接pip命令安装 2.用pycharm测试 3.官网下包安装 二.解决 1.找到django安装的路径 2.配置系统变量 3.测试创建项目 3.1.执行访问页面 3.2.解决 3.3.继续测试 4.pycharm打开     新建项目测试    注:发现没有django这个框架选项,后面发现这个功能只有专业版才

    2024年02月06日
    浏览(55)
  • Python: Django 服务部署可能遇到的一些问题

    不要用 python3 manage.py runserver 启动服务, 而要用: 此外,在 setting.py 中,修改: 在 setting.py 中,修改: 其中,域名有无 https:// 均可 此外,在 应用名/views.py 中,修改: 运行: 在 script 中,声明 WebSocket 时,注意 https 与 wss 对应,http 与 ws 对应:

    2024年02月14日
    浏览(47)
  • 解决:django设置DEBUG=false时出现的问题

    首先,我用的是django4.2,python3.10版本 本来,如果在settings.py中使用 DEBUG = True,那么什么问题也没有,当然,这属于调试模式。 一切正常..... 但是,当我准备提交代码时,将 DEBUG 改为 False 时..... 好好的admin界面,变成了这样.... 而且,好好的静态资源,也没法访问了:  郁闷

    2024年02月13日
    浏览(40)
  • [Python] Django 报错记录与解决

    报错原因: Python3.10版本中,库collections停用了,所以在Python3.10版本环境下执行 django-admin startproject 项目名 命令创建Django项目会报错。 解决: 方法一:创建虚拟环境时指定python版本 方法二:更改系统环境变量配置中默认优先使用的python版本 前提已经安装好其他版本的Pytho

    2024年02月08日
    浏览(38)
  • 问题解决:django模型查询报错,找不到数据库表

    django项目,使用的postgresql数据库,建了多个模式,模型查询时一直默认查public的表 1. 问题 :   django.db.utils.ProgrammingError: relation \\\"ip_management_app.table\\\" does not exist 2. 代码: 3. 解决方案 (1)使用的django2.0,settings文件中修改数据库配置,增加OPTIONS (2)其他方案 修改db_table,有

    2024年01月23日
    浏览(57)
  • Django 扩展 Elasticsearch - 启动与关闭 - 启动报错问题解决方法

    1. Centos 7 安装Elasticsearch 6.2.4 - tar 包安装 - elasticsearch head(浏览器插件)和kibana 插件 tar 安装 2. Django drf-haystack Elasticsearch 2.4.0 集成 - 填坑之路 Elasticsearch 分为旧版本和新版本,新版本不知道是 6.x ≥ 版本还是 7.x ≥ 版本有自带的 jdk 环境,所以对于本地 jdk 环境,不会有影响

    2024年02月08日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包