Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 195|回复: 0

[默认分类] 解决Django+Vue前后端分离的跨域问题及关闭csrf验证

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2020-8-3 13:49:17 | 显示全部楼层 |阅读模式
      前后端分离难免要接触到跨域问题,跨域的相关知识请参:跨域问题,解决之道
      在Djangovue前后端分离的时候也会遇到跨域的问题,因为刚刚接触Django还不太了解,今天花了好长的时间,查阅了好多资料现在解决了这个问题,记录一下。

    Django配置
       
       首先在Django框架里面要安装django-cors-headers包,在项目根目录下执行
    1. pip install django-cors-headers
    复制代码

       配置settings.py
         
         引入刚刚安装的包
    1. [code]INSTALLED_APPS = [  
    2. "django.contrib.admin",  
    3. "django.contrib.auth",  
    4. "django.contrib.contenttypes",  
    5. "django.contrib.sessions",  
    6. "django.contrib.messages",
    7. "django.contrib.staticfiles",                    
    8. "corsheaders"                                                    #刚才安装的django-cors-headers包所引入的app
    9. ]
    复制代码
    [/code]
         配置参数
    在配置文件中加入以下内容,可根据自己的情况作调整
    1. [code]    DEBUG = True                                                           #开启debug模式,注意上线运营时要关闭debug
    2.     ALLOWED_HOSTS = ["*"]                                                    # 允许所有ip访问
    3.     CORS_ALLOW_CREDENTIALS = True
    4.     CORS_ORIGIN_ALLOW_ALL = True                    
    5.     CORS_ALLOW_HEADERS = ("*")                                            #允许所有的请求头
    复制代码
    [/code]
         配置中间件
    1. [code]    MIDDLEWARE = [
    2.         "django.middleware.security.SecurityMiddleware",
    3.         "django.contrib.sessions.middleware.SessionMiddleware",
    4.         "corsheaders.middleware.CorsMiddleware",                              #注意顺序,必须放在这儿
    5.         "django.middleware.common.CommonMiddleware",
    6.         "django.middleware.csrf.CsrfViewMiddleware",
    7.         "django.contrib.auth.middleware.AuthenticationMiddleware",
    8.         "django.contrib.messages.middleware.MessageMiddleware",
    9.         "django.middleware.clickjacking.XFrameOptionsMiddleware",
    10.     ]
    复制代码
    [/code]
         
       
    Vue配置
    一般情况下Vue中往后端请求的话都是通过axios
       
       安装axios
    1. [code]npm install axios
    复制代码
    [/code]
       Vue的main.js配置axios
    1. [code]//配置请求头,非常重要,有了这个才可以正常使用POST等请求后台数据
    2. axios.defaults.headers.post["Content-Type"] = "application/x-www-fromurlencodeed"
    复制代码
    [/code]
       

    到此为止,关于Django+Vue前后端分离的跨域问题就解决了,但是后来发现,还是无法请求到数据,因为Django有csrf验证,我们可以通过某种方式将其给关掉,下面就简单来了解一下:

    在接收前端请求的文件中(我这边是view.py)中引入
    1. [code]from django.views.decorators.csrf import csrf_exempt
    复制代码
    [/code]
    然后在每个不需要csrf验证的方法上方加上
    1. [code]@csrf_exempt
    复制代码
    [/code] 这样就可以了(或者是在settings文件中将csrf的中间件给注释掉也行)。

    本文前半部分参考:django+vue打造前后端分离的项目时,跨域问题的解决!
    如需转载,请注明出处:https://www.cnblogs.com/zhuchenglin/p/9732245.HTML
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-20 16:05 , Processed in 0.408200 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表