UserViewSet实现用户登录与注销功能的示例代码
UserViewSet是Django框架中用于处理用户相关功能的视图集合,包括用户登录和注销功能。下面是一个示例代码,展示了如何使用UserViewSet实现用户登录和注销功能,并提供了使用例子:
# views.py
from rest_framework import viewsets
from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework.permissions import AllowAny
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login, logout
from .serializers import UserSerializer
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
permission_classes = [AllowAny]
@action(detail=False, methods=['post'])
def login(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': 'User logged in successfully'})
else:
return Response({'message': 'Invalid username or password'}, status=400)
@action(detail=False, methods=['get'])
def logout(self, request):
if request.user.is_authenticated:
logout(request)
return Response({'message': 'User logged out successfully'})
else:
return Response({'message': 'No user logged in'}, status=400)
上面的代码中,我们首先导入了所需的模块和类,包括视图集合类viewsets.ModelViewSet、装饰器action、响应类Response、权限类AllowAny、用户模型类User以及序列化器类UserSerializer。
然后创建了一个继承自viewsets.ModelViewSet的类UserViewSet,设置了queryset属性为User.objects.all(),表示查询所有用户;设置了serializer_class属性为UserSerializer,表示使用UserSerializer来处理用户数据序列化和反序列化;设置了permission_classes属性为[AllowAny],表示不需要通过权限验证即可访问该视图集合。
接下来定义了两个@action装饰的方法login和logout,分别实现用户登录和注销功能。login方法使用post请求,接收username和password参数,通过authenticate函数验证用户身份,如果验证通过则调用login函数登录用户,最后返回登录成功的消息;如果验证失败则返回错误消息。logout方法使用get请求,检查当前是否有用户已登录,如果有则调用logout函数注销用户,最后返回注销成功的消息;如果没有用户登录则返回错误消息。
使用这个UserViewSet的例子如下:
# urls.py from django.urls import path from rest_framework.routers import DefaultRouter from .views import UserViewSet router = DefaultRouter() router.register(r'users', UserViewSet, basename='user') urlpatterns = router.urls
上面的代码中,我们首先导入了所需的模块和类,包括URL配置模块path和默认路由器类DefaultRouter,以及UserViewSet类。
然后创建了一个DefaultRouter实例router,注册了一个URL路径users对应的UserViewSet视图集合,并设置了basename为user。
最后将router.urls添加到项目的URL配置中。
这样就完成了UserViewSet的使用配置,可以通过发送HTTP请求来实现用户登录和注销功能。
用户登录的例子如下:
import requests
url = 'http://localhost:8000/users/login/'
data = {'username': 'test', 'password': 'password'}
response = requests.post(url, data=data)
print(response.json())
这里使用requests库发送一个POST请求到http://localhost:8000/users/login/,传递用户名和密码参数,获取服务器的响应并打印。
用户注销的例子如下:
import requests url = 'http://localhost:8000/users/logout/' response = requests.get(url) print(response.json())
这里使用requests库发送一个GET请求到http://localhost:8000/users/logout/,获取服务器的响应并打印。
以上就是使用UserViewSet实现用户登录和注销功能的示例代码及使用例子。根据自己的具体需求,可以进一步完善和定制这些功能。
