【问题标题】:django rest framework 'tuple' object has no attribute 'key'django rest框架'tuple'对象没有属性'key'
【发布时间】:2017-06-17 20:36:33
【问题描述】:

我使用 django 框架和 REST 框架 JWT Auth 生成令牌

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

data["token"] = token.key 这一行给出错误,即'tuple' object has no attribute '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),

jwt 最后 3 个链接身份验证、刷新和验证工作正常,但自定义序列化程序不起作用。如果我做错了,请给我一些建议!

【问题讨论】:

    标签: python django rest frameworks


    【解决方案1】:

    get_or_created 返回一个对象的元组和一个显示它是否被创建的布尔值。由于您似乎并不关心第二个,您可以将其分配给一个临时变量。

    token, created = Token.objects.get_or_create(user=user_obj)
    

    【讨论】:

      猜你喜欢
      • 2018-03-30
      • 2017-08-11
      • 2016-06-30
      • 2021-04-28
      • 2015-07-14
      • 1970-01-01
      • 1970-01-01
      • 2020-07-03
      • 1970-01-01
      相关资源
      最近更新 更多