Django中间件整合Vue拦截器的使用

 更新时间:2021年09月01日 10:17:06   作者:楼下安同学  
本文主要介绍了Django中间件整合Vue拦截器的使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

axios拦截器是什么?

axios拦截器可以拦截每一次的请求和响应,然后进行相应的处理。拦截器分为请求拦截器和响应拦截器,请求拦截器可以统一在你发送请求前在请求体里加上token;响应拦截器的话,是在接受到响应之后进行的一些操作,比如,服务器返回登录状态失效,需要重新登录的时候,就给它跳到登录页面;

拦截器的使用

我一般喜欢全局配置(main.js)

请求拦截器

//  interceptors
axios.interceptors.request.use(
  config => {
 // 获取登录成功状态保持的token
    let token = localStorage.getItem('token')
 // 如果有token就在头部加上token
    if (token) {
      config.headers['Authorization'] = token
    }
    return config
  },
  error => {
 // 如果没有token,返回错误的信息
    return Promise.reject(error.response);
  });

响应拦截器

axios.interceptors.response.use(function (response) {
    // 在接收响应做些什么,例如跳转到登录页
    ......
    return response;
  }, function (error) {
    // 对响应错误做点什么
    return Promise.reject(error);
  });

拦截器超级好用~~~

Django中间件token验证

中间件相关

中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。每个中间件组件都负责做一些特定的功能。但是由于其影响的是全局,所以需要谨慎使用,使用不当会影响性能。说的直白一点,中间件是帮助我们在视图函数执行之前和执行之后都可以做一些额外的操作,它本质上就是一个自定义类,类中定义了几个方法,Django框架会在请求的特定的时间去执行这些方法。

自定义中间件

中间件可以定义五个方法,分别是:(主要的是process_request和process_response)

  • process_request(self,request)
  • process_view(self, request, view_func, view_args, view_kwargs)
  • process_template_response(self,request,response)
  • process_exception(self, request, exception)
  • process_response(self, request, response)

以上方法的返回值可以是None或一个HttpResponse对象,如果是None,则继续按照django定义的规则向后继续执行,如果是HttpResponse对象,则直接将该对象返回给用户。

中间件的执行流程

  请求到达中间件之后,先按照正序执行每个注册中间件的process_reques方法process_request方法返回的值是None,就依次执行,如果返回的值是HttpResponse对象,不再执行后面的process_request方法,而是执行当前对应中间件的process_response方法。HttpResponse对象返回给浏览器。也就是说:如果MIDDLEWARE中注册了6个中间件,执行过程中,第3个中间件返回了一个HttpResponse对象,那么第4,5,6中间件的process_request和process_response方法都不执行,顺序执行3,2,1中间件的process_response方法。

用中间件进行登录认证

战术喝水~~ 上代码

# Author : Carl
# Date :2021/8/27 9:43
# File :tokenMiddleware.py

from django.http import HttpResponse
from django.utils.deprecation import MiddlewareMixin

import jwt

from meiduo import settings


class TokenMiddleware(MiddlewareMixin):
    """
    中间件生成Token
    """

    def process_request(self, request):
        """
        token认证
        :param request:
        :return:token
        """
        # 获取url
        url = request.get_full_path()
        # 定义一个白名单 注册登录接口 随便访问
        white_list = ['/sadmin/login/','/admin/']
        # 判断url在不在白名单中
        if url not in white_list:
            # 获取token jwttoken认证去认证
            token = request.META.get('HTTP_AUTHORIZATION')
            # 解析验证
            if token:
                # 解决原来的token
                old_token = jwt.decode(token, settings.SECRET_KEY, algorithms=['HS256'])
                # 重新生成token
                new_token = str(jwt.encode(old_token, settings.SECRET_KEY, algorithm='HS256'), encoding='utf8')
                if token == new_token:
                    return None
            return HttpResponse('401')
        return None
 

总结

在请求接口的时候,如果用户没有登录,则在请求到达中间件时放行,加入视图层,在视图层进行密码手机号,用户名,密码等的匹配,匹配成功之后,将生成的token返回到前端进行状态保持,使用拦截器在每一次请求的头部加上token(状态保持的token),由中间件对token进行解析对比,对比成功则进入视图层,否则,返回401(没有权限)。

到此这篇关于Django中间件整合Vue拦截器的使用的文章就介绍到这了,更多相关Django Vue拦截器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Django中自定义查询对象的具体使用

    Django中自定义查询对象的具体使用

    这篇文章主要介绍了Django中自定义查询对象的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • 使用 Python 写一个简易的抽奖程序

    使用 Python 写一个简易的抽奖程序

    这篇文章主要介绍了使用 Python 写一个简易的抽奖程序,本文通过实例代码,思路讲解的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • Ruby元编程基础学习笔记整理

    Ruby元编程基础学习笔记整理

    元编程Metaprogramming是指编写能够操作其他程序的程序,例如C语言中的宏,是编程中的一项高级技巧,这里我们立足基础,来看一下Ruby元编程基础学习笔记整理.
    2016-07-07
  • 屏蔽Django admin界面添加按钮的操作

    屏蔽Django admin界面添加按钮的操作

    这篇文章主要介绍了屏蔽Django admin界面添加按钮的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • python并发和异步编程实例

    python并发和异步编程实例

    这篇文章主要为大家详细介绍了python并发和异步编程实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • Python循环语句之break与continue的用法

    Python循环语句之break与continue的用法

    这篇文章主要介绍了Python循环语句之break与continue的用法,是Python入门学习中的基础知识,需要的朋友可以参考下
    2015-10-10
  • Python使用sqlalchemy模块连接数据库操作示例

    Python使用sqlalchemy模块连接数据库操作示例

    这篇文章主要介绍了Python使用sqlalchemy模块连接数据库操作,结合实例形式分析了sqlalchemy模块的安装及连接、调用数据库相关操作技巧,需要的朋友可以参考下
    2019-03-03
  • python的常见命令注入威胁

    python的常见命令注入威胁

    不过下面可是我们开发产品初期的一些血淋淋的案例,更多的安全威胁可以看看北北同学的《python hack》PPT,里面提及了不只命令执行的威胁,那些都是我们亲身经历的代码
    2013-02-02
  • 在pycharm中文件取消用 pytest模式打开的操作

    在pycharm中文件取消用 pytest模式打开的操作

    这篇文章主要介绍了在pycharm中文件取消用 pytest模式打开的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • python密码学对称和非对称密码教程

    python密码学对称和非对称密码教程

    这篇文章主要为大家介绍了python密码学对称和非对称密码教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05

最新评论