【问题标题】:Django Rest Framework - How to get request.user on views.py?Django Rest Framework - 如何在views.py上获取request.user?
【发布时间】:2013-11-17 00:55:37
【问题描述】:

我正在使用 Django 休息框架。我需要让用户访问views.py,但我做不到。

from app.models import SmsToSend
from app.serializers import SmsToSendSerializer
from rest_framework import generics
from app.permissions import IsOwner
from rest_framework import permissions


class SmsToSendList(generics.ListCreateAPIView):
    queryset = SmsToSend.objects.all()
    serializer_class = SmsToSendSerializer
    permission_classes = (IsOwner, permissions.IsAuthenticated)

    def pre_save(self, obj):
        obj.owner = self.request.user

我如何在这里调用 request.user?

最好的问候,

【问题讨论】:

  • 你的问题有点混乱,你在哪里打不通self.request.user?

标签: django django-rest-framework


【解决方案1】:

你很亲密。我想很多人都花时间试图弄清楚这一点。将请求定义为视图方法中的参数,您将可以像这样访问它。

def pre_save(self, request, obj):
    obj.owner = request.user

你可以像这样得到你的查询。

request.REQUEST.get('<query>')

在序列化方法中稍有不同,可以这样获取数据。

request = self.context['request']
user = request.user
query = request.GET['<query>']

希望这有帮助!

【讨论】:

    【解决方案2】:
    class SmsToSendList(generics.ListCreateAPIView):
        #queryset = SmsToSend.objects.all()
        serializer_class = SmsToSendSerializer
        permission_classes = (IsOwner, permissions.IsAuthenticated)
    
        def get_queryset(self):
            user = self.request.user
            return SmsToSend.objects.filter(owner=user)  
    
        def pre_save(self, obj):
            obj.owner = self.request.user
    

    我不得不使用 get_queryset 方法而不是查询集

    【讨论】:

    • 试图效仿你的榜样,但pre_save 似乎被忽略了......djangorestframework==3.0.3
    【解决方案3】:
    def get_queryset(self, *args, **kwargs):
        user_id = self.request.user.id
    

    【讨论】:

    • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助、质量更好,并且更有可能吸引投票。
    猜你喜欢
    • 2015-07-24
    • 2018-05-29
    • 2017-12-29
    • 2022-10-06
    • 2018-02-16
    • 2017-04-24
    • 2015-10-24
    • 2012-08-19
    相关资源
    最近更新 更多