-1
を持っていない私は、トークン生成のためのDjangoフレームワークとRESTフレームワークJWT認証を使用ジャンゴ残りのフレームワーク「タプル」オブジェクトが属性「キー」
serializer.py
from django.contrib.contenttypes.models import ContentType
from django.contrib.auth import get_user_model
from django.db.models import Q
from django.contrib.auth.models import User
from rest_framework import serializers
from company.models import Employee
from rest_framework.authtoken.models import Token
from rest_framework.serializers import(
ValidationError,
)
class UserLoginSerializer(serializers.ModelSerializer):
token = serializers.CharField(allow_blank = True , read_only = True)
username = serializers.CharField(required = False , allow_blank=True)
email = serializers.EmailField(label="Email Adress",required = False, allow_blank=True)
class Meta:
model = User
fields = [
'username',
'email',
'password',
'token',
]
extra_kwargs ={"password":
{"write_only":True
}
}
def validate(self, data):
user_obj = None
email = data.get('email', None)
username = data.get("username", None)
password = data["password"]
if not email and not username:
raise ValidationError("A username or email is required to login")
user=User.objects.filter(
Q(email=email)|
Q(username=username)
).distinct()
user = user.exclude(email=None)
if user.exists() and user.count() == 1 :
user_obj = user.first()
else:
raise ValidationError("username/email not valid.")
if user_obj:
if not user_obj.check_password(password):
raise ValidationError("Incorrect credentials please try again")
token = Token.objects.get_or_create(user=user_obj)
#print token.key
data["token"] = token.key
return data
エラーが'tuple' object has no attribute 'key'
すなわちdata["token"] = token.key
でこのラインを与えます
url.py
url(r'^api/emp/$', x.EmployeeList.as_view(), name='api-Emp'),
#url(r'^api/emp/(?P<pk>\d+)/$', x.EmployeeDetailAPIView.as_view(), name='api-Detail'),
url(r'^api/emp/(?P<pk>[\w]+)/$', x.EmployeeDetailAPIView.as_view(), name='api-Detail'),
#url(r'^(?P<pk>\d+)/$', x.EmployeeDetailAPIView.as_view(), name='api-Detail'),
url(r'^api/emp/(?P<pk>[\w]+)/update/$', x.EmployeeUpdateAPIView.as_view(), name='emp-api-update'),
url(r'^api/emp/(?P<pk>[\w]+)/delete/$', x.EmployeeDeleteAPIView.as_view(), name='emp-api-delete'),
url(r'^create/emp/$', x.EmployeeCreateAPIView.as_view(), name='emp-api-create'),
url(r'^api/user/$', x.UserDeatilAPIView.as_view(), name='api-user'),
#register UserLoginAPIView
url(r'^register/$', x.UserCreateAPIView.as_view(), name='register'),
url(r'^login/$', x.UserLoginAPIView.as_view(), name='api-login'),
#jwt
url(r'^api/token/auth/', obtain_jwt_token),
url(r'^api/token/refresh/', refresh_jwt_token),
url(r'^api/token/verify/', verify_jwt_token),