浅谈django rest jwt vue 跨域问题

yizhihongxing

下面是关于“浅谈django rest jwt vue 跨域问题”的完整攻略。

简介

在使用 Django Rest Framework、JWT 和 Vue 构建前后端分离应用时,会遇到跨域问题。本文将详细介绍如何使用 Django Rest Framework、JWT 和 Vue 解决跨域问题。

什么是跨域问题

在同一个域名下,浏览器之间是可以互相访问数据的。而不同域名下的浏览器之间,由于同源策略的限制,是不能直接访问数据的,这就是跨域问题。

解决跨域问题的方法

Django Rest Framework 的处理方式

Django Rest Framework 通过使用“中间件”来处理跨域问题。以下是示例代码:

class CorsMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        response = self.get_response(request)

        response['Access-Control-Allow-Origin'] = '*'
        response['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS'
        response['Access-Control-Allow-Headers'] = 'Content-Type, Authorization'

        return response

Vue 的处理方式

Vue 通过使用“代理”来处理跨域问题。以下是示例代码:

// vue.config.js
module.exports = {
  devServer: {
    proxy: {
      '/api': {
        target: 'http://localhost:8000',
        changeOrigin: true,
        pathRewrite: {
          '^/api': ''
        }
      }
    }
  }
}

整合 Django Rest Framework、JWT 和 Vue

以下是 Django Rest Framework 和 JWT 的示例代码:

# views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from rest_framework_jwt.authentication import JSONWebTokenAuthentication

class UserInfoView(APIView):
    permission_classes = [IsAuthenticated]
    authentication_classes = [JSONWebTokenAuthentication]

    def get(self, request):
        return Response({'username': request.user.username})
# urls.py
from django.urls import path
from .views import UserInfoView
from rest_framework_jwt.views import obtain_jwt_token, refresh_jwt_token

urlpatterns = [
    path('login/', obtain_jwt_token),
    path('refresh_token/', refresh_jwt_token),
    path('user_info/', UserInfoView.as_view())
]

以下是 Vue 的示例代码:

// login.vue
axios.post('/api/login/', {username: '', password: ''})
  .then(response => {
    // 获取并保存 token 到本地存储
  })
  .catch(error => {
    console.log(error)
  })
// user_info.vue
axios.get('/api/user_info/',
  { headers: { 'Authorization': `JWT ${token}` } })
  .then(response => {
    this.username = response.data.username
  })
  .catch(error => {
    console.log(error)
  })

总结

本文介绍了使用 Django Rest Framework、JWT 和 Vue 解决跨域问题的完整步骤,其中包括了 Django Rest Framework、Vue 和 JWT 分别处理跨域问题的示例代码。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈django rest jwt vue 跨域问题 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • 浅谈swoole的作用与原理

    浅谈 Swoole 的作用与原理 Swoole 是一款基于 PHP 的协程网络通信引擎,其主要作用是提供异步、高并发的网络通信能力。本文将介绍 Swoole 的作用和原理,并提供两个示例说明。 Swoole 的作用 Swoole 主要用于处理服务器端的网络通信,包括但不限于以下几个方面: 提供异步事件驱动的编程模型,相较于传统的编程模型,更加高效,性能更好;…

    人工智能概览 2023年5月25日
    00
  • 分享20个 Unix/Linux 命令技巧

    没问题。本文将为大家详细讲解“分享20个 Unix/Linux 命令技巧”的完整攻略。 1. 简介 在 Unix/Linux 系统中,命令行是非常强大且高效的工具,掌握一些常用的命令技巧将会让我们的工作事半功倍。本文将向大家介绍20个常用的 Unix/Linux 命令技巧,希望能帮助大家更好地掌握命令行的技巧。 2. Unix/Linux 命令技巧 2.1.…

    人工智能概览 2023年5月25日
    00
  • 详解Django中的ifequal和ifnotequal标签使用

    当我们在开发Django网站时,经常需要进行判断操作,例如需要判断变量是否与比较值相同,而Django提供了ifequal和ifnotequal标签来进行这样的操作。下面将详细讲解Django中的ifequal和ifnotequal标签使用的完整攻略。 1. ifequal和ifnotequal标签语法 Django中的ifequal和ifnotequal标…

    人工智能概览 2023年5月25日
    00
  • Python下应用opencv 实现人脸检测功能

    Python下应用OpenCV实现人脸检测功能 前言 OpenCV是计算机视觉领域中一个非常常用且广受欢迎的开源库,它提供了丰富的算法和工具函数,可以帮助我们快速搭建计算机视觉应用。其中,人脸检测功能是一个十分实用的应用领域,可以用于人脸识别、智能安防等领域。 本篇文章将会介绍如何使用Python下的OpenCV库,通过自带的分类器实现人脸检测的功能。 安装…

    人工智能概览 2023年5月25日
    00
  • 使用Bootstrap框架制作查询页面的界面实例代码

    使用Bootstrap框架制作查询页面的界面实例代码通常需要经历以下步骤: 1. 引入Bootstrap CSS和JS文件 在HTML头部引入Bootstrap的CSS和JS文件: <head> <!– 引入Bootstrap的CSS文件 –> <link rel="stylesheet" href=&q…

    人工智能概论 2023年5月25日
    00
  • pytorch固定BN层参数的操作

    关于PyTorch中如何固定BN层的参数,通常有两种方法: 冻结BN层 在PyTorch中,可以通过requires_grad属性来决定一个参数是否需要被训练。为了固定BN层的参数,我们可以将其requires_grad属性设置为False,这样就不会更新其参数了。具体步骤如下: import torch.nn as nn bn_layer = nn.Bat…

    人工智能概论 2023年5月25日
    00
  • python 中pass和match使用方法

    Python 中 pass 和 match 的使用方法 Pass 和 match 是 Python 3.10 中引入的新语法。在这篇文章中,我们将详细讨论这两种语法的用法以及它们在代码中的应用。 Pass 语法 Pass 语法通常用于创建占位符或标记未来的代码位置,表示当前代码块没有任何操作。它在语法上是一条空语句,不执行任何操作。 Pass 的用法 Pas…

    人工智能概论 2023年5月24日
    00
  • Java发起http请求的完整步骤记录

    下面是Java发起http请求的完整步骤记录的详细攻略: 1. 引入http请求依赖 Java中发起http请求需要引入相应的依赖,一般推荐使用Apache的HttpComponents组件,可以在pom.xml中加入以下依赖: <dependencies> <dependency> <groupId>org.apache…

    人工智能概论 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部