Django rstful登陆认证并检查session是否过期代码实例
2019-08-13 09:48
1091 查看
这篇文章主要介绍了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
以上就是本文的全部内容,希望对大家的学习有所帮助
您可能感兴趣的文章:
相关文章推荐
- jQuery 检查某个元素在页面上是否存在实例代码
- 检查表单元素的值是否为空的实例代码
- [原创]java WEB学习笔记45:自定义HttpFilter类,理解多个Filter 代码的执行顺序,Filterdemo:禁用浏览器缓存的Filter,字符编码的Filter,检查用户是否登陆过的Filter
- asp.net session的使用与过期实例代码
- asp.net session的使用与过期实例代码
- Django中的cookie与session操作实例代码
- Session过期后自动跳转到登录页面的实例代码
- ASP.NET 常用代码,用session判断是否登陆
- asp.net session的使用与过期实例代码
- django开发项目实例3--用session是实现简单的登陆、验证登陆和注销功能
- asp.net中检查用户是否过期的代码
- asp.net中检查用户是否过期的代码
- jQuery 检查某个元素在页面上是否存在实例代码
- 检查页面Session是否过期,过期执行相应操作 解决方法
- 检查页面Session是否过期,过期执行相应操作 解决方法
- 判断Session--检查用户登陆是否超…
- Ajax通讯时,检查Session是否过期
- 使用 StateServer 保存 Session 解决 Session过期,登陆过期问题。
- 判断session是否登陆
- 当 jquery 发送 ajax 请求的时候遇到服务端session过期超时返回 302 跳转登陆页面的时候怎么办的处理方法