当OneToOne字段是查找字段时,如何编写网址和视图?

时间:2017-07-20 07:15:38

标签: django rest django-rest-framework

我遇到的情况是我将用户个人资料存储在不同的django模型中。

class Profile(models.Model):
    user = models.OneToOneField(User, primary_key=True)
    address = models.CharField(max_length=1000)

使用默认模型ViewSet我得到以下URL来获取/更新配置文件的特定实例

/api/profile/user

现在,由于我使用令牌身份验证,因此客户端只有令牌,并且不知道用户。如何写下面表格的网址

/api/profile

这对我来说似乎更自然,因为用户只能拥有一个Profile对象,因此他的令牌足以在他的API调用中执行所有操作。

编写自定义视图是一种选择,但有没有什么方法可以利用DRF以最少的手动实现来实现相同的目标?

1 个答案:

答案 0 :(得分:0)

设置:

INSTALLED_APPS = [
    'rest_framework',
    'rest_framework.authtoken',
]

您的观点:

from rest_framework.authentication import SessionAuthentication, BasicAuthentication, TokenAuthentication
from rest_framework.permissions import IsAuthenticated

class GetToken(APIView):
    authentication_classes = (SessionAuthentication, BasicAuthentication)
    permission_classes = (IsAuthenticated,)

    def get(self, request, format=None):
        token = Token.objects.get_or_create(user=request.user)
        context = {
            "token": unicode(token[0]),
        }
        return Response(context, status=status.HTTP_200_OK)



class UsedToken(APIView):
    authentication_classes = (TokenAuthentication)
    permission_classes = (IsAuthenticated,)
    def get(self, request, format=None): 
        # You are using TokenAuthentication and if header include your token then user access your stuff.. 
        # Header: Authorization: 'Token yourtoken'  
        context = {}
        return Response(context, status=status.HTTP_200_OK)