Django rstful登陆认证并检查session是否过期代码实例

 更新时间:2019年08月13日 09:48:23   作者:Leslie-x  
这篇文章主要介绍了Django rstful登陆认证并检查session是否过期代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

这篇文章主要介绍了Django rstful登陆认证并检查session是否过期代码实例,下面我们可以来一起学习一下。

一:restful用户视图

#!/usr/bin/env python
# -*- coding:UTF-8 -*-
# Author:Leslie-x
from users import models
from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework import viewsets
from rest_framework import serializers
from django.contrib.auth import authenticate, login, logout
class UserSerializer(serializers.ModelSerializer):
  class Meta:
    model = models.User
    exclude = ('password',)
class UserViewSet(viewsets.ReadOnlyModelViewSet):
  serializer_class = UserSerializer
  queryset = User.objects.all()
  authentication_classes = (UserAuthentication,)

  @action(detail=False, methods=['post'])
  def register(self, request, *args, **kwargs):
    username = request.data.get("username")
    queryset = User.objects.filter(username=username)
    if queryset.exists():
      raise exceptions.PermissionDenied('该账号已经被注册')
    user = User.objects.create_user(**request.data)
    UserProfile.objects.create(user=user, nickname=user.username)
    data = self.get_serializer(user).data
    return Response(data)

  @action(detail=False, methods=['post'])
  def login(self, request, *args, **kwargs):
    username = request.data.get("username")
    password = request.data.get("password")
    user = authenticate(username=username, password=password)
    if not user:
      raise exceptions.PermissionDenied('用户名或密码错误')
    auth_id = request.session.get('_auth_user_id')
    if auth_id != str(user.pk):
      logout(request)
    login(request, user)
    data = self.get_serializer(user).data
    data['session_key'] = request.session.session_key
    return Response(data)

  @action(detail=False, methods=['post'])
  def logout(self, request, *args, **kwargs):
    logout(request)
    return Response()

二:检查session是否过期

from rest_framework.authentication import SessionAuthentication
from rest_framework.request import Request
from django.contrib.sessions.models import Session
from rest_framework import exceptions
import arrow
class CustomAuth(SessionAuthentication):
  def check_session(self, request):
    session_key = request.session.session_key
    queryset = Session.objects.filter(session_key=session_key)
    if not queryset.exists():
      raise exceptions.PermissionDenied('非法用户,拒绝访问')
    expire_date = queryset.first().expire_date
    now = arrow.now().format('YYYY-MM-DD HH:mm:ss')
    if not arrow.get(now) < arrow.get(expire_date):
      raise exceptions.PermissionDenied('session expired')

  def authenticate(self, request: Request):
    ret = super().authenticate(request)
     self.check_session(request)
     return ret

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 基于Python实现在线加密解密网站系统

    基于Python实现在线加密解密网站系统

    在这个数字化时代,数据的安全和隐私变得越来越重要,所以本文小编就来带大家实现一个简单但功能强大的加密解密系统,并深入探讨它是如何工作的,有兴趣的可以了解下
    2023-09-09
  • jenkins配置python脚本定时任务过程图解

    jenkins配置python脚本定时任务过程图解

    这篇文章主要介绍了jekins配置python脚本定时任务过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • python线程优先级队列知识点总结

    python线程优先级队列知识点总结

    在本篇文章里小编给大家整理的一篇关于python线程优先级队列知识点总结,有兴趣的朋友们可以学习参考下。
    2021-02-02
  • python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析

    python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析

    这篇文章主要介绍了python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Python错误处理操作示例

    Python错误处理操作示例

    这篇文章主要介绍了Python错误处理操作,结合实例形式分析了Python使用try...except...finaly语句进行错误处理的相关操作技巧与注意事项,需要的朋友可以参考下
    2018-07-07
  • python如何提取script的部分内容

    python如何提取script的部分内容

    文章介绍了如何使用Python提取网页中的脚本部分内容,并提供了一个示例脚本,该脚本使用了`requests`库来获取网页内容,并使用`BeautifulSoup`库来解析HTML,提取出`
    2025-02-02
  • Python 实现交换矩阵的行示例

    Python 实现交换矩阵的行示例

    今天小编就为大家分享一篇Python 实现交换矩阵的行示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • python+flask实现API的方法

    python+flask实现API的方法

    这篇文章主要为大家详细介绍了python+flask实现API的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • python3中calendar返回某一时间点实例讲解

    python3中calendar返回某一时间点实例讲解

    在本篇内容里小编给大家整理了关于python3中calendar返回某一时间点实例讲解内容,有兴趣的朋友们可以参考学习下。
    2020-11-11
  • Python爬虫突破反爬虫机制知识点总结

    Python爬虫突破反爬虫机制知识点总结

    在本篇文章里小编给大家整理了一篇关于Python爬虫突破反爬虫机制知识点总结内容,有需要的朋友们可以跟着学习下。
    2021-11-11

最新评论