• python web开发中跨域问题的解决思路


    个人本地开发测试环境亲身经历,线上环境不存在跨域问题,nginx转发

    解决思路:

    1.什么是跨域

    在浏览器窗口中,和某个服务端通过某个 “协议+域名+端口号” 建立了会话的前提下,去使用与这三个属性任意一个不同的源提交了请求,那么浏览器就认为你是跨域了违反了浏览器的同源策略

    2.如何解决:3种方法

    方法1:安装django-cors-headers

    下载django-cors-header

    pip install django-cors-header
    

    配置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',
    )
    

    方法2:使用JSONP

    使用Ajax获取json数据时,存在跨域的限制。不过,在Web页面上调用js的script脚本文件时却不受跨域的影响,JSONP就是利用这个来实现跨域的传输。因此,我们需要将Ajax调用中的dataType从JSON改为JSONP(相应的API也需要支持JSONP)格式。jsonp只能用于get请求

    方案3.直接修改Django中的views.py文件,原理是修改请求头

    修改views.py中对应API的实现函数,允许其他域通过Ajax请求数据:

    def myview(_request):
    	response = HttpResponse(json.dumps({“key”: “value”, “key2”: “value”}))
    	response[“Access-Control-Allow-Origin”] = “*”
    	response[“Access-Control-Allow-Methods”] = “POST, GET, OPTIONS”
    	response[“Access-Control-Max-Age”] = “1000”
    	response[“Access-Control-Allow-Headers”] = “*”
    	return response
    
  • 相关阅读:
    Xfire的aegis绑定方式配置小结
    ExtJS入门
    InstallScript 中数组的使用
    [转]手把手教你用C#(.NET)打包应用程序(安装程序)【卸载模块已添加】
    [VB]全局钩子
    VB.NET 反射机制取得当前函数名 类名等
    [.Net][转]dotNet取得各种系统信息
    [VB]清空Clipboard
    [VB]取得本机的网络连接(类似netstat 命令)
    [InstallShield] 安装时添加一个进度对话框Dialog
  • 原文地址:https://www.cnblogs.com/bigox/p/11536480.html
Copyright © 2020-2023  润新知