在Django REST framework中使用会话(Session)进行认证和授权
在Django REST framework中使用会话进行认证和授权,可以通过以下步骤实现:
- 在settings.py文件中添加以下配置:
REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework.authentication.SessionAuthentication', ], 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.IsAuthenticated', ], }
这样,将默认使用SessionAuthentication进行认证,IsAuthenticated进行授权。
- 在路由配置中添加Login和Logout视图:
from django.urls import path from rest_framework.authtoken.views import obtain_auth_token from .views import LoginView, LogoutView urlpatterns = [ path('api/token', obtain_auth_token, name='api_token_auth'), path('login', LoginView.as_view(), name='login'), path('logout', LogoutView.as_view(), name='logout') ]
其中,Login视图可以通过验证用户名密码,从而创建Session,实现认证;Logout视图可以销毁Session,实现退出登录。
代码实现如下:
from django.contrib.auth import authenticate, login, logout from django.shortcuts import render from rest_framework.views import APIView from rest_framework.response import Response class LoginView(APIView): def post(self, request): username = request.data.get('username') password = request.data.get('password') user = authenticate(request, username=username, password=password) if user is not None: login(request, user) return Response({'message': '登录成功'}) else: return Response({'message': '用户名或密码错误'}) class LogoutView(APIView): def post(self, request): logout(request) return Response({'message': '退出登录'})
在上述代码中,我们使用了Django自带的authenticate、login、logout等函数来实现相关功能。
- 在视图函数中通过request.user来获取当前用户对象,进而进行授权验证:
from rest_framework.views import APIView from rest_framework.permissions import IsAuthenticated class SomeView(APIView): permission_classes = [IsAuthenticated] def get(self, request): user = request.user # TODO: some logic with authenticated user
在上述代码中,我们通过IsAuthenticated来进行授权验证,如果用户未认证,则不允许访问SomeView视图。同时,我们也演示了如何通过request.user来获取当前认证的用户对象。
相关文章