Django rstful登陸認(rèn)證并檢查session是否過(guò)期代碼實(shí)例
這篇文章主要介紹了Django rstful登陸認(rèn)證并檢查session是否過(guò)期代碼實(shí)例,下面我們可以來(lái)一起學(xué)習(xí)一下。
一:restful用戶(hù)視圖
#!/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('該賬號(hào)已經(jīng)被注冊(cè)') 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('用戶(hù)名或密碼錯(cuò)誤') 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是否過(guò)期
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('非法用戶(hù),拒絕訪問(wèn)') 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
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
梅爾頻率倒譜系數(shù)(mfcc)及Python實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了語(yǔ)音識(shí)別之梅爾頻率倒譜系數(shù)及Python實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06Python實(shí)現(xiàn)灰色關(guān)聯(lián)分析與結(jié)果可視化的詳細(xì)代碼
今天小編通過(guò)代碼以灰色色系為例給大家介紹Python灰色關(guān)聯(lián)分析實(shí)現(xiàn)方法,灰色關(guān)聯(lián)度分析對(duì)于一個(gè)系統(tǒng)發(fā)展變化態(tài)勢(shì)提供了量化的度量,非常適合動(dòng)態(tài)歷程分析,感興趣的朋友一起看看吧2022-03-03Python.append()與Python.expand()用法詳解
今天小編就為大家分享一篇Python.append()與Python.expand()用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12在keras中實(shí)現(xiàn)查看其訓(xùn)練loss值
這篇文章主要介紹了在keras中實(shí)現(xiàn)查看其訓(xùn)練loss值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06Python實(shí)現(xiàn)隨機(jī)密碼生成器實(shí)例
這篇文章主要介紹了Python實(shí)現(xiàn)隨機(jī)密碼生成器實(shí)例,string.printable是string中的可打印字符,用strip函數(shù)首尾去掉空格,random模塊用來(lái)取字符,random.choice隨機(jī)取字符,將隨機(jī)取出的字符與password空字符串進(jìn)行拼接,最后用print輸出,需要的朋友可以參考下2023-09-09python爬蟲(chóng)實(shí)例之獲取動(dòng)漫截圖
這篇文章主要給大家介紹了關(guān)于python爬蟲(chóng)實(shí)例之獲取動(dòng)漫截圖的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05使用IPython下的Net-SNMP來(lái)管理類(lèi)UNIX系統(tǒng)的教程
這篇文章主要介紹了使用IPython下的Net-SNMP來(lái)管理類(lèi)UNIX系統(tǒng)的教程,本文來(lái)自于IBM官方網(wǎng)站技術(shù)文檔,需要的朋友可以參考下2015-04-04