我是 django 的初学者,我正在尝试使用基本和令牌身份验证进行登录/注销视图,参考下面的教程,除了我有自己的基于函数的视图。 https://gutsytechster.wordpress.com/2019/11/12/user-auth-operations-in-drf-login-logout-register-change-password/
我使用 django.contrib.auth 身份验证来检查用户凭据并返回一个令牌而不是我认为在 django 中创建会话的登录方法。 但是本教程要求 auth.logout 方法用于注销,这将需要 HTTPRequest 对象而不是 rest_framework.Request 对象。 但是它适用于注销,当我尝试使用 auth.login 方法时,它给了我以下错误。
request
参数必须是 django.http.HttpRequest
的实例,而不是 rest_framework.request.Request
我的理解是 django.contrib.auth 方法登录、注销适用于会话身份验证和 rest_framework.Request 扩展了 HTTPRequest。
我的问题是 当我在中间件中设置会话身份验证时会发生此错误吗?如果是这样,为什么单独注销有效?不应该因为不引用 HTTPRequest 对象而抛出相同的错误。 任何帮助将不胜感激,因为我会尝试在采用任何其他方法之前充分了解基础知识。
我的观点
@api_view(["POST"])
def login(request):
serializer = LoginSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = get_and_authenticate_user(**serializer.validated_data)
data = AuthUserSerializer(user).data
#login(request, user)
return Response(data=data)
def get_and_authenticate_user(username, password):
user = authenticate(username=username, password=password)
if user is None:
raise serializers.ValidationError("Invalid username/password. Please try again!")
return user
@api_view(["POST"])
def logout_user(request):
logout(request)
data = {'success': 'Successfully logged out'}
return Response(data=data)