下面我为您详细讲解Django Rest Framework(DRF)中实现认证的代码攻略。
1、DRF认证方式
DRF提供了多种认证方式,包括:
- BasicAuthentication:HTTP的基本认证方式,不安全,适用于内部系统或测试环境;
- TokenAuthentication:使用token实现的认证方式,适用于前后端分离项目;
- SessionAuthentication:基于Django的认证方式,适用于传统的web应用;
- OAuthAuthentication:OAuth 1.0a、2.0 的认证方式,适用于第三方授权项目;
- JWTAuthentication:JSON Web Token实现的认证方式,适用于前后端分离项目。
2、示例代码
2.1 TokenAuthentication示例:
TokenAuthentication使用token实现认证,适用于前后端分离的项目。下面是一个简单的TokenAuthentication认证的实现示例:
# settings.py
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
],
}
# views.py
from rest_framework.authentication import TokenAuthentication
from rest_framework.permissions import IsAuthenticated
class MyView(APIView):
authentication_classes = [TokenAuthentication]
permission_classes = [IsAuthenticated]
def get(self, request, format=None):
content = {
'user': str(request.user), # `django.contrib.auth.User` instance.
'auth': str(request.auth), # None
}
return Response(content)
在视图中,我们指定authentication_classes为TokenAuthentication,permission_classes为IsAuthenticated,这样在访问视图时就会先进行TokenAuthentication认证,然后再进行权限检查。如果认证不通过或者权限不足,则返回401错误。
2.2 JWTAuthentication示例:
JWTAuthentication使用JSON Web Token实现认证,适用于前后端分离的项目。下面是一个简单的JWTAuthentication认证的实现示例:
# settings.py
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework_simplejwt.authentication.JWTAuthentication',
],
}
# views.py
from rest_framework_simplejwt.authentication import JWTAuthentication
from rest_framework.permissions import IsAuthenticated
class MyView(APIView):
authentication_classes = [JWTAuthentication]
permission_classes = [IsAuthenticated]
def get(self, request, format=None):
content = {
'user': str(request.user), # `django.contrib.auth.User` instance.
'auth': str(request.auth), # `rest_framework_simplejwt.tokens.AccessToken` instance.
}
return Response(content)
在视图中,我们指定authentication_classes为JWTAuthentication,permission_classes为IsAuthenticated,这样在访问视图时就会先进行JWTAuthentication认证,然后再进行权限检查。如果认证不通过或者权限不足,则返回401错误。
3、总结
以上就是DRF认证的实现代码攻略,我们通过两条示例说明了TokenAuthentication和JWTAuthentication的实现方式。在实际开发中,我们可以根据项目需要选择适合的认证方式。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django Rest framework之认证的实现代码 - Python技术站