浅谈django rest jwt vue 跨域问题

下面是关于“浅谈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日

相关文章

  • 图片文字识别(OCR)插件Ocrad.js教程

    图片文字识别(OCR)插件Ocrad.js教程 简介 Ocrad.js是一款基于Javascript的图像识别(OCR)库,可以用于识别不同类型的数字和字母的图像,包括但不限于印刷体和手写体。Ocrad.js库可以在浏览器和服务器中使用。 安装和使用 前置要求 在使用Ocrad.js之前,您需要确保您的项目中安装了Node.js和NPM包管理器。 安装 您可…

    人工智能概论 2023年5月25日
    00
  • 在C语言中比较两个字符串是否相等的方法

    要比较两个字符串是否相等,可以通过使用C语言中的字符串函数来实现。下面介绍几种比较字符串的方法。 1. 使用strcmp函数 strcmp函数是C语言中最常用的比较字符串的方法。该函数的原型为: int strcmp(const char *s1, const char *s2); 该函数返回值有三种情况: s1和s2相等时,返回0 s1大于s2时,返回大于…

    人工智能概览 2023年5月25日
    00
  • 在lnmp环境中的nginx编译安装

    在 LNMP 环境中安装 Nginx 的步骤大概如下: 1. 安装编译工具 在 Linux 中编译 Nginx 需要用到一些编译工具,比如 gcc、make 等,可以通过以下命令安装: yum -y install gcc make pcre pcre-devel zlib zlib-devel openssl openssl-devel 2. 下载并解压 …

    人工智能概览 2023年5月25日
    00
  • Springboot基于assembly的服务化打包方案及spring boot部署方式

    Spring Boot是一种快速开发应用程序的框架,它的优点在于它有着可扩展的安装选项。使用Maven或Gradle构建应用程序时,可以将Spring Boot应用程序打包为JAR文件以便快速部署。使用Spring Boot打包服务,我们可以做到移植性以及快速安装。 Spring Boot基于assembly的服务化打包方案 使用Spring Boot通过m…

    人工智能概览 2023年5月25日
    00
  • 基于Python搭建人脸识别考勤系统

    下面是基于Python搭建人脸识别考勤系统的完整攻略。 1. 前置条件 一台配置好python开发环境的电脑(建议安装anaconda和pycharm等IDE) 安装opencv和face_recognition库 一张人员的面部照片(被用来训练面部识别模型),另外还需要一些人脸照片用来测试面部识别的准确性 一台支持摄像头使用的电脑 2. 搭建人脸识别考勤系…

    人工智能概览 2023年5月25日
    00
  • 解析MyBatisPlus解决逻辑删除与唯一索引的兼容问题

    一、关于MyBatisPlus的逻辑删除 如果我们使用MyBatisPlus作为ORM框架,可以很方便地使用其提供的逻辑删除功能。在实体类上使用@TableLogic注解即可开启逻辑删除功能,其默认为0为未删除状态,1为已删除状态。例如: @Data @TableName("user") public class User { @Tabl…

    人工智能概览 2023年5月25日
    00
  • 在Python中使用MongoEngine操作数据库教程实例

    介绍MongoEngine在Python中的使用方法。 1. 安装MongoEngine 在使用MongoEngine操作数据库前,需要先安装MongoEngine和pymongo两个包。安装方法如下: pip install mongoengine pymongo 2. 连接到MongoDB 在Python中使用MongoEngine连接MongoDB非常…

    人工智能概论 2023年5月25日
    00
  • Python中Tkinter组件Frame的具体使用

    首先我们来介绍一下Python中的Tkinter组件Frame。Frame是一个用来放置和组织其他Tkinter组件的容器,它本身并没有什么可操作性的内容。常见的应用场景有:将多个Tkinter组件(例如Label、Entry、Button等)放在同一个容器内,以达到更好的视觉组织效果,或者将不同功能的Tkinter组件放在不同的容器内,便于代码的编写和维护…

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