设置认证方案
全局设置
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.SessionAuthentication',
)
}
单个视图内设置
使用基于APIView的视图
from rest_framework.authentication import SessionAuthentication, BasicAuthentication
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.views import APIView
class ExampleView(APIView):
authentication_classes = (SessionAuthentication, BasicAuthentication)
permission_classes = (IsAuthenticated,)
def get(self, request, format=None):
content = {
'user': unicode(request.user), # `django.contrib.auth.User` instance.
'auth': unicode(request.auth), # None
}
return Response(content)
TokenAuthentication
此认证方案使用简单的基于令牌的 HTTP 认证方案。令牌身份验证适用于 client-server 架构,例如本机桌面和移动客户端。
要使用 TokenAuthentication 方案,您需要将认证类配置为包含 TokenAuthentication ,并在 INSTALLED_APPS 设置中另外包含 rest_framework.authtoken :
视图
authentication_classes = (TokenAuthentication,) # Toekn认证
settings.py
INSTALLED_APPS = (
...
'rest_framework.authtoken'
)
python3 manage.py makemigrations
python3 manage.py migrate # 生成token表
创建令牌的方式
from rest_framework.authtoken.models import Token
token = Token.objects.create(user=...) # user是一个UserProfile对象
print token.key
对于客户端进行身份验证,令牌密钥应包含在 Authorization HTTP header 中。关键字应以字符串文字 “Token” 为前缀,用空格分隔两个字符串。例如:
Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b
利用Postman软件操作
-
生成token post方式
image.png -
传递token get方式
image.png
网友评论