Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.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入门到精通教程
查看: 542|回复: 0

解决跨域问题以及Django中POST传递参数错误

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-8-29 17:02:27 | 显示全部楼层 |阅读模式

    一、跨域

    在进行前后端开发的时候需要涉及到跨域的问题,跨域既可以在前端解决也可以在后端解决。前段解决的思路就是转换路径,将发出的请求的url地址转换成可以映射成的地址。后端的解决思路是将获取的地址转换成可以映射的地址。

    1. 模型

    1.1 前端跨域解决的模型

    由于路由router的不同,因此在跨域请求的时候通过更换请求源为origin再对后端进行请求

    1.2 后端跨域解决的模型

    后端通过可接收的url来进行相同path的处理,揭示了前后端分析的关键点以及跨域解决的本质,即对相同的path进行不同的url的拼接,通过control的控制来调度相同的path。

    后端通过可以接受的url,来对其进行路由映射

    2. 方法

    2.1 后端解决跨域

    Django实例

    2.1.1 通过以下指令安装corsheaders

    # pip安装指令
    pip install django-cors-headers
     
    

    2.1.2 在配置文件中配置参数

    1、进入项目的settings.py文件,进行如下配置

    在INSTALLED_APPS中添加corsheaders

    结果

    2、在middleware中间添加corsheaders中的中间件

    在middle中插入下面的中间件

    'corsheaders.middleware.CorsMiddleware',

    结果

    3、在settings.py中添加以下的内容

    # 设置post的跨域
    CORS_ORIGIN_ALLOW_ALL = True CORS_ALLOW_CREDENTIALS = True # 添加需要跨域的url
    CORS_ORIGIN_WHITELIST = [ "https://example.com", "https://sub.example.com", "http://localhost:8080", "http://127.0.0.1:9000", "http://127.0.0.1:3000" ] # 允许使用的header
    CORS_ALLOW_HEADERS = [ 'accept', 'accept-encoding', 'authorization', 'content-type', 'dnt', 'origin', 'user-agent', 'x-csrftoken', 'x-requested-with', ]

    结果

    2.2 前端解决跨域

    Vue实例

    2.2.1 在配置文件中配置跨域路由

    进入文件./config/index.js中,在ProxyTable中添加以下内容,如果存在多个跨域,就修改/api的名字和target中的内容。

    '/api': { target: 'http://127.0.0.1:8000/',//设置你调用的接口域名和端口号 别忘了加http
            changeOrigin: true, // secure: false, // 如果是https接口,需要配置这个参数
     pathRewrite: { '^/api': '/'//这里理解成用‘/api’代替target里面的地址,后面组件中我们掉接口时直接用api代替 比如我要调用'http://40.00.100.100:3002/user/add',直接写‘/api/user/add’即可
     } }

    结果

    目录文件

    配置的ProxyTable

    2.2.2 调用

    通过/api/后端的url地址来进行具体的响应,如我调用login/user.html,就可以书写成/api/login/user.html的url

    结果

    二、POST请求

    在开发的过程中会涉及到请求方式的问题,而在Django中对于post请求是存在问题的,因此使用POST的请求方式的时候需要我们解决POST的冲突。解决post的请求有两个方法:

    2.1 使用csrf_token来解决

    在post请求的地方加上以下内容

    # 添加下面的内容来解决post响应的问题
    {% csrf_token %}

    结果

    2.2 注释掉中间件

    注释掉settings.py的MIDDLEWARE中的django.middleware.csrf.CsrfViewMiddleware这个中间件

    三、总结

    以上是一些自己实践的总结,在网上也有很多方法,可以去尝试。

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-4 00:51 , Processed in 0.070376 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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