美文网首页
Django跨域解决方案 - 跨域要受保护

Django跨域解决方案 - 跨域要受保护

作者: 未来与传说 | 来源:发表于2018-06-03 11:28 被阅读0次

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://127.0.0.1:8002' is therefore not allowed access

  1. 安装
    pip install django-cors-headers

  2. 配置setting.py

INSTALLED_APPS = [
  'django.contrib.admin',
  ·····
  'corsheaders',
  ····
]

MIDDLEWARE = [
  ······
  'corsheaders.middleware.CorsMiddleware',  # 按顺序
  'django.middleware.common.CommonMiddleware', #按顺序
  'django.middleware.csrf.CsrfViewMiddleware',  #按顺序
]

#  新增以下配置  #
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
# Origin '*' in CORS_ORIGIN_WHITELIST is missing scheme 出现该错误则将其注释掉
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',
)
  1. 其他
  • 注意自己的访问路径、django对路径有严格要求
  • (corsheaders.E013) Origin '*' in CORS_ORIGIN_WHITELIST is missing scheme 如果出现此错误则将
    CORS_ORIGIN_WHITELIST配置注释掉
  1. csrf_protect:对单个网络请求进行保护 (POST,PUT,DELETE)
from django.views.decorators.csrf import csrf_protect

@csrf_protect   # 该请求受到保护
def main(request):
    username = request.session.get("has_login",None)
    return render(request,"welcome.html",{"username":username})
  1. csrf_exempt:对单个网络请求取消保护 (POST,PUT,DELETE)
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt  # 该请求不受保护
def main(request):
    username = request.session.get("has_login",None)
    return render(request,"welcome.html",{"username":username})
  • 关于跨域


    image.png

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。通俗来讲,就是以你的身份,来制造恶意请求。

相关文章

网友评论

      本文标题:Django跨域解决方案 - 跨域要受保护

      本文链接:https://www.haomeiwen.com/subject/ashjsftx.html