欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Django rstful登陸認證并檢查session是否過期代碼實例

 更新時間:2019年08月13日 09:48:23   作者:Leslie-x  
這篇文章主要介紹了Django rstful登陸認證并檢查session是否過期代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

這篇文章主要介紹了Django rstful登陸認證并檢查session是否過期代碼實例,下面我們可以來一起學(xué)習(xí)一下。

一: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('該賬號已經(jīng)被注冊')
    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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 利用Python代碼制作過年春聯(lián)

    利用Python代碼制作過年春聯(lián)

    這篇文章主要介紹了如何利用代碼編寫過年的春聯(lián),文中一共介紹了兩種方法,一是利用HTML+CSS+JS,二是利用Python,感興趣的可以試一試
    2022-01-01
  • 梅爾頻率倒譜系數(shù)(mfcc)及Python實現(xiàn)

    梅爾頻率倒譜系數(shù)(mfcc)及Python實現(xiàn)

    這篇文章主要為大家詳細介紹了語音識別之梅爾頻率倒譜系數(shù)及Python實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Python實現(xiàn)灰色關(guān)聯(lián)分析與結(jié)果可視化的詳細代碼

    Python實現(xiàn)灰色關(guān)聯(lián)分析與結(jié)果可視化的詳細代碼

    今天小編通過代碼以灰色色系為例給大家介紹Python灰色關(guān)聯(lián)分析實現(xiàn)方法,灰色關(guān)聯(lián)度分析對于一個系統(tǒng)發(fā)展變化態(tài)勢提供了量化的度量,非常適合動態(tài)歷程分析,感興趣的朋友一起看看吧
    2022-03-03
  • Python.append()與Python.expand()用法詳解

    Python.append()與Python.expand()用法詳解

    今天小編就為大家分享一篇Python.append()與Python.expand()用法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python中的RSA加密與解密實例解析

    python中的RSA加密與解密實例解析

    這篇文章主要介紹了python中的RSA加密與解密實例解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • 在keras中實現(xiàn)查看其訓(xùn)練loss值

    在keras中實現(xiàn)查看其訓(xùn)練loss值

    這篇文章主要介紹了在keras中實現(xiàn)查看其訓(xùn)練loss值,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python實現(xiàn)隨機密碼生成器實例

    Python實現(xiàn)隨機密碼生成器實例

    這篇文章主要介紹了Python實現(xiàn)隨機密碼生成器實例,string.printable是string中的可打印字符,用strip函數(shù)首尾去掉空格,random模塊用來取字符,random.choice隨機取字符,將隨機取出的字符與password空字符串進行拼接,最后用print輸出,需要的朋友可以參考下
    2023-09-09
  • python爬蟲實例之獲取動漫截圖

    python爬蟲實例之獲取動漫截圖

    這篇文章主要給大家介紹了關(guān)于python爬蟲實例之獲取動漫截圖的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 使用Python3制作TCP端口掃描器

    使用Python3制作TCP端口掃描器

    本文給大家分享的是使用Python3 實現(xiàn)TCP全連接端口掃描器的制作過程,包括思路和代碼,非常簡單易懂,推薦給大家
    2017-04-04
  • 使用IPython下的Net-SNMP來管理類UNIX系統(tǒng)的教程

    使用IPython下的Net-SNMP來管理類UNIX系統(tǒng)的教程

    這篇文章主要介紹了使用IPython下的Net-SNMP來管理類UNIX系統(tǒng)的教程,本文來自于IBM官方網(wǎng)站技術(shù)文檔,需要的朋友可以參考下
    2015-04-04

最新評論