django框架实现token功能,并给出实际应用的源码
时间: 2024-03-27 17:41:38 浏览: 108
Django框架使用内置方法实现登录功能详解
好的,关于 Django 框架实现 Token 功能的方法,一般可以通过 Django 自带的 `Token` 模块来实现。
首先在 Django 的 `settings.py` 文件中添加以下配置:
```python
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
],
}
```
这样就启用了 Django REST framework 的 Token 认证功能。
接下来定义一个视图函数,用来生成 Token:
```python
from rest_framework.authtoken.models import Token
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
@api_view(['GET'])
@permission_classes([IsAuthenticated])
def generate_token(request):
token, created = Token.objects.get_or_create(user=request.user)
return Response({'token': token.key})
```
这个视图函数会返回一个 Token,如果用户已经有 Token 了,就返回已有的 Token,否则会生成一个新的 Token。
最后是一个实际应用的示例,这是一个简单的 TodoList 应用,只有认证用户才能进行添加、删除、更新等操作:
```python
from rest_framework import viewsets
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from .models import Todo
from .serializers import TodoSerializer
class TodoViewSet(viewsets.ModelViewSet):
queryset = Todo.objects.all()
serializer_class = TodoSerializer
permission_classes = [IsAuthenticated]
def list(self, request):
queryset = Todo.objects.filter(user=request.user)
serializer = TodoSerializer(queryset, many=True)
return Response(serializer.data)
def perform_create(self, serializer):
serializer.save(user=self.request.user)
def perform_update(self, serializer):
serializer.save(user=self.request.user)
def perform_destroy(self, instance):
instance.delete()
```
这里使用了 Django REST framework 的 `ModelViewSet`,并设置了 `IsAuthenticated` 权限类,只有认证用户才能进行操作。同时在 `perform_create` 和 `perform_update` 中设置了当前用户的信息。
阅读全文