django跨域是什么意思(2023年最新解答)

导读:本篇文章首席CTO笔记来给大家介绍有关django跨域是什么意思的相关内容,希望对大家有所帮助,一起来看看吧。

记一次uwsgi导致的跨域问题

后台是NGINX+uwsgi+Django,配置了公司内网域名,但是每经过一段时间使用,便会出现接口报错,排查下来发现是接口跨域导致的报错

初期排查过程中已经确认过Django中已经配置了跨域,且是使用一段时间后才出现跨域,后发现当提示跨域错误时清理cookie会解决问题,遂逐一删除cookie内的测试是否因为某条cookie导致的跨域,最后发现是因为一条键值名为user的cookie导致的跨域,发现user对应的cookie长度为283,更改user值的长度也可以解决跨域问题,最终定位问题原因是因为cookie过长导致的跨域。

找到原因是cookie过长导致,剩下就是排查具体哪里配置导致的问题,首先查看服务接口调用日志发现浏览器报错情况下服务没有接口调用日志,中间排查过程中忽略了uwsgi的配置,导致一直在nginx相关配置中查找问题,一开始以为是nginx的buffer大小的设置问题,后来发现更改后问题依然存在,最终想到uwsgi的配置,最后发现是uwsgi的buffer-size默认是4k,最终调整为32k解决问题。

“django”是什么意思?

有以下四种意思!英语里面单词的意思你要结合语句及文章,因为每个单词都有多种意思,你看你要的是哪一种1.而姜戈寿喜烧是一种日式火锅,而姜戈(django)则是著名西部片《django》中的主人公。关于为什么会选择“姜戈”作为标题,2.带来干净实效的设计django带来干净实效的设计...django严谨的维护干净的设计,它所有的代码让你开发的Web程序遵循最佳实践3.具有所有这些特点去除你的程序瑕疵...django具有所有这些特点...django是一个用Python写的,Python是一门优雅,简明,高级的编程语言4.提供快速开发django提供快速开发...django的哲学就是竭尽所能提升开发速度

django怎么解决跨域问题

1.安装django-cors-headers

pip install django-cors-headers

1

2.配置settings.py文件

INSTALLED_APPS = [

...

\'corsheaders\',

...

]

MIDDLEWARE_CLASSES = (

...

\'corsheaders.middleware.CorsMiddleware\',

\'django.middleware.common.CommonMiddleware\', # 注意顺序

...

)

#跨域增加忽略

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 = (

\'XMLHttpRequest\',

\'X_FILENAME\',

\'accept-encoding\',

\'authorization\',

\'content-type\',

\'dnt\',

\'origin\',

\'user-agent\',

\'x-csrftoken\',

\'x-requested-with\',

\'Pragma\',

)

OK!问题解决!

django跨域是什么意思(2023年最新解答)  第1张

django什么意思

[编辑本段]概述

Django(发音:/ˈdʒæŋgoː/) 是用python语言写的开源web开发框架(open source web framework),它鼓励快速开发,并遵循MVC设计。Django遵守 BSD版权,初次发布于2005年7月, 并于2008年9月发布了第一个正式版本1.0 。

Django 根据比利时的爵士音乐家Django Reinhardt命名,他是一个吉普赛人,主要以演奏吉它为主,还演奏过小提琴等。

[编辑本段]设计哲学

Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以“插件”形式服务于整个框架,Django有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展性。它还强调快速开发和DRY(Do Not Repeat Yourself)原则。

Django基于MVC的设计十分优美:

对象关系映射 (ORM,object-relational mapping)

以Python类形式定义你的数据模型,ORM将模型与关系数据库连接起来,你将得到一个非常容易使用的数据库API,同时你也可以在Django中使用原始的SQL语句。

URL 分派

使用正则表达式匹配URL,你可以任意设计的URL,没有框架的特定限定。象你喜欢的一样灵活。

模版系统

使用Django强大而可扩展的模板语言,可以分隔设计、内容和Python代码。并且具有可继承性。

表单处理

你可以方便的生成各种表单模型,实现表单的有效性检验。可以方便的从你定义的模型实例生成相应的表单。

Cache系统

可以挂在内存缓冲或其它的框架实现超级缓冲 -- 实现你所需要的粒度。

会话(session),用户登录与权限检查

快速开发用户会话功能。

国际化

内置国际化系统,方便开发出多种语言的网站。

自动化的管理界面

不需要你花大量的工作来创建人员管理和更新内容。Django自带一个ADMIN site,类似于内容管理系统。

[编辑本段]部署

Django可以运行在Apache上,也可以运行在支持WSGI,FastCGI的服务器上。支持多种数据库,已经支持Postgresql, MySql, Sqlite3。

目前,Google App Engine也支持Django的某些部分。

[编辑本段]文档

Django1.0 建立了强大完整的文档文档体系 (),涵盖了Django的方方面面,并且适合各种水平的读者和开发者. 其中还包含若干个简单的示例,你可以跟随他们一步步体验Django的优美。

ajax跨域问题(python版本)

跨域问题来源于JavaScript的同源策略,即只有 协议+主机名+端口号 (如存在)相同,则允许相互访问。即JavaScript只能访问和操作自己域下的资源,不能访问和操作其他域下的资源。

注意:localhost和127.0.0.1也属于跨域。

如果Origin指定的源不在许可范围内, 服务器会返回一个不带有Access-Control-Allow-Origin字段的响应 . 浏览器解析时发现缺少了这个字段, 就会报错.

修改Django中的views.py文件修改views.py中对应API的实现函数,给返回值加上响应头Access-Control-Allow-Origin,允许其他域通过Ajax请求数据:

满足以下两个条件的请求。

(1) 请求方法是以下三种方法之一:

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

非简单请求就是复杂请求。

非简单请求的CORS请求,会在正式通信之前,增加一次HTTP查询请求,称为\"预检\"请求(preflight)。

预检请求为OPTIONS请求,用于向服务器请求权限信息的。

预检请求被成功响应后,才会发出真实请求,携带真实数据。

JSONP是JSON with Padding的略称。它是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)。

JSONP的实现步骤大致如下(参考了来源中的文章)

请求时,接口地址是作为构建出的脚本标签的src的,这样,当脚本标签构建出来时,最终的src是接口返回的内容

这时,只要浏览器定义了foo函数,该函数就会立即调用。作为参数的JSON数据被视为JavaScript对象,而不是字符串,因此避免了使用JSON.parse的步骤。

JSONP使用注意

基于JSONP的实现原理,所以JSONP只能是“GET”请求,不能进行较为复杂的POST和其它请求,所以遇到那种情况,就得参考下面的CORS解决跨域了(所以如今它也基本被淘汰了)。

前面讲了JSONP的实现原理,现在我们可以自己写JS来实现JSONP功能。

一般情况下,我们希望这个script标签能够动态的调用,而不是像固定在html里面所以没等页面显示就执行了,很不灵活。

我们可以通过页面的触发事件操作后,通过javascript动态的创建script标签,这样我们就可以灵活调用远程服务。实例如下:

为了更加灵活,上述我们将你自己在客户端定义的回调函数的函数名传送给服务端,服务端则会返回以你定义的回调函数名的方法,将获取的json数据传入这个方法完成回调。

如上,jQuery框架也当然支持JSONP,可以使用 $.getJSON(url,[data],[callback]) 方法。

与js实现的方式相比,我们并不要自己生成一个script标签,客户端也并不需要自己定义一个回调函数.

上述这种方法,很方便,不需要我们自己定义回调函数和指定回调函数名,但是,如果说我们想指定自己的回调函数名,或者说服务上规定了固定回调函数名该怎么办呢?

我们可以使用$.ajax方法来实现。如下例:

在上小节中jsonp: \'callbacks\'就是定义一个存放回调函数的键,jsonpCallback是前端定义好的回调函数方法名,server端接受callback键对应值后就可以在其中填充数据打包返回。

但是,jsonpCallback参数可以不定义,jquery会自动定义一个随机名发过去,那前端就得用回调函数来处理对应数据了。利用jQuery可以很方便的实现JSONP来进行跨域访问。

如此,我们的跨域处理即完成,支持所有的请求。

结语:以上就是首席CTO笔记为大家整理的关于django跨域是什么意思的相关内容解答汇总了,希望对您有所帮助!如果解决了您的问题欢迎分享给更多关注此问题的朋友喔~

以上内容为新媒号(sinv.com.cn)为大家提供!新媒号,坚持更新大家所需的互联网后端知识。希望您喜欢!

版权申明:新媒号所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请发送邮件至 k2#88.com(替换@) 举报,一经查实,本站将立刻删除。

(0)
上一篇 2023-09-23
下一篇 2023-09-23

相关推荐

发表回复

登录后才能评论