类型错误';布尔';对象在django中不可调用
我正在django中使用简单的jwt模块实现登录功能。此时,只有通过电子邮件身份验证的用户才能登录,此条件语句中出现以下错误 django中不可调用TypeError“bool”对象 我不知道为什么我不能引入bool类型的变量。如何修复此错误?这是我的密码 views.py类型错误';布尔';对象在django中不可调用,django,django-rest-framework-simplejwt,Django,Django Rest Framework Simplejwt,我正在django中使用简单的jwt模块实现登录功能。此时,只有通过电子邮件身份验证的用户才能登录,此条件语句中出现以下错误 django中不可调用TypeError“bool”对象 我不知道为什么我不能引入bool类型的变量。如何修复此错误?这是我的密码 views.py from .models import User from .utils import Util from .serializers import customRegisterSerializer, customLoginS
from .models import User
from .utils import Util
from .serializers import customRegisterSerializer, customLoginSerializer, customTokenRefreshSerializer, userProfileSerializer
from rest_framework.permissions import IsAuthenticated
from rest_framework.generics import GenericAPIView
from rest_framework_simplejwt.tokens import RefreshToken
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView
from rest_framework.viewsets import ModelViewSet
from rest_framework.response import Response
from django.urls import reverse
from django.conf import settings
from django.contrib.sites.shortcuts import get_current_site
import jwt
class customSignUpView (GenericAPIView) :
serializer_class = customRegisterSerializer
def post (self, request) :
user = request.data
serializer = self.serializer_class(data=user)
serializer.is_valid(raise_exception=True)
serializer.save()
user = User.objects.get(email=serializer.data['email'])
token = RefreshToken.for_user(user).access_token
current_site = get_current_site(request).domain
relativeLink = reverse('emailVerify')
absurls = F'http://{current_site}{relativeLink}?token={token}'
email_body = F'Hi {user.username} Use link below to verify your email \n{absurls}'
data = {'email_body': email_body, 'to_email': user.email, 'email_subject': 'Verify your email'}
Util.send_email(data)
return Response({'message': '이메일을 확인하세요'}, status=201)
class customLoginView (GenericAPIView) :
serializer_class = customLoginSerializer
def post (self, request) :
serializer = self.serializer_class(data=request.data)
serializer.is_valid(raise_exception=True)
try :
user = User.objects.get(email=serializer.data['email'])
except User.DoesNotExist :
return Response({'message': '아이디 또는 비밀번호를 확인해주세요.'}, status=401)
if not user.is_verified() :
return Response({'message': '이메일 인증을 먼저 해주세요.'}, status=401)
token = RefreshToken.for_user(user)
data = {
'token_type': 'Bearer',
'access_token': str(token.access_token),
'expired_at': str(datetime.now() + timedelta(hours=6)),
'refresh_token': str(token),
'refresh_token_expires_at': str(datetime.now() + timedelta(days=30))
}
return Response(data, status=200)
class customRefreshView (TokenRefreshView) :
serializer_class = customTokenRefreshSerializer
class VerifyEmail (GenericAPIView) :
def get (self, request) :
token = request.GET.get('token')
try :
payload = jwt.decode(token, settings.SECRET_KEY)
user = User.objects.get(id=payload['user_id'])
if not user.is_verified :
user.is_verified = True
user.save()
return Response({'message': '성공적으로 인증되었습니다'})
except jwt.ExpiredSignatureError :
return Response({'message': '인증이 만료되었습니다'}, status=400)
except jwt.exceptions.DecodeError :
return Response({'message': '잘못된 토큰입니다'}, status=400)
class userProfileView (ModelViewSet) :
serializer_class = userProfileSerializer
permission_classes = [IsAuthenticated]
def list (self, request) :
queryset = User.objects.filter(email=self.request.user)
serializer = userProfileSerializer(queryset, many=True)
for i in serializer.data :
return Response(i)
回溯
Traceback (most recent call last):
File "C:\Users\kurak\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Users\kurak\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\kurak\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\kurak\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "C:\Users\kurak\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\views\generic\base.py", line 71, in view
return self.dispatch(request, *args, **kwargs)
File "C:\Users\kurak\AppData\Local\Programs\Python\Python38-32\lib\site-packages\rest_framework\views.py", line 505, in dispatch
response = self.handle_exception(exc)
File "C:\Users\kurak\AppData\Local\Programs\Python\Python38-32\lib\site-packages\rest_framework\views.py", line 465, in handle_exception
self.raise_uncaught_exception(exc)
File "C:\Users\kurak\AppData\Local\Programs\Python\Python38-32\lib\site-packages\rest_framework\views.py", line 476, in raise_uncaught_exception
raise exc
File "C:\Users\kurak\AppData\Local\Programs\Python\Python38-32\lib\site-packages\rest_framework\views.py", line 502, in dispatch
response = handler(request, *args, **kwargs)
File "D:\school\대회 및 프로젝트\CoCo\api\views.py", line 50, in post
if not user.is_verified() :
TypeError: 'bool' object is not callable
用户.已验证
正在返回布尔值,因此您不必使用paranethesis->()
应该是
if not user.is_verified:
return Response({'message': '이메일 인증을 먼저 해주세요.'}, status=401)
您必须编写此代码
if not user.is_verified() :
if not user.is_verified :
不是