这篇文章主要介绍了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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
华山资源网 Design By www.eoogi.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
华山资源网 Design By www.eoogi.com
暂无评论...
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
2024年11月14日
2024年11月14日
- 邱锋泽.2024-COlOR.Free【发现梦想】【FLAC分轨】
- 群星 《10年朋友Vol.8》滚石台湾版[WAV+CUE][1.G]
- 群星《2024好听新歌31》十倍音质 U盘音乐 [WAV分轨][1.1G]
- 群星《全天后》华纳[WAV+CUE][1.1G]
- 许乐《声愿HQCD》[正版原抓WAV+CUE]
- 黄凯芹《给你留念》头版限量编号MQA-UHQCD2024[低速原抓WAV+CUE]
- 黑鸭子2008-今生最爱[首版][WAV+CUE]
- 彭海桐.2000-好好想想你【SONY】【WAV+CUE】
- 群星.1995-亚洲电视剧集主题曲大全·乐作剧2CD【滚石】【WAV+CUE】
- 林强.1992-春风少年兄【魔岩】【WAV+CUE】
- 世界顶级汽车音响试音王《金色的草原》24K金碟[低速原抓WAV+CUE][1G]
- 周深 /Faouzia《解密 电影原声带》[320K/MP3][39.32MB]
- 周深 /Faouzia《解密 电影原声带》[FLAC/分轨][199.46MB]
- 英雄联盟s14亚军队伍是哪支 英雄联盟s14亚军队伍介绍
- 英雄联盟s14夺冠队伍是哪支 英雄联盟s14夺冠队SKT T1队伍介绍