2

我正在尝试编写一个检索当前登录用户信息的视图。

我的视图如下所示,只要我将用户传递到 URL 中的视图,它就可以正常工作。

def index(request, username, template="index.html"):

    user = get_object_or_404(User,
                             username__iexact=username)

     expression_qs = Expression.objects.all().order_by('-created')
     album_qs = Album.objects.all().filter(head__isnull=False, is_public=True).order_by('-created')

    user_following = user.relationships.following()

    following_expressions = positive_filter(expression_qs, user_following, 'user')
    following_albums = positive_filter(album_qs, user_following, 'user')
    following_feed = sorted(
        chain(following_albums, following_expressions),
        key=attrgetter('created'), reverse = True)

    return render(request, template, locals())

但是,由于这是主页的视图,我不希望修改URL。我宁愿(在模板或视图中)描述如果用户登录或未登录会发生什么的逻辑(如果他们已登录,则显示活动提要,如果没有,只需返回带有登录的静态页面形式)。

我的问题是,我如何将 request.user (但不通过 url)传递给视图,以便它返回当前用户的查询集?

4

3 回答 3

3

您实际上不必通过 url 传递任何内容。您可以从 request.user 直接访问已登录的用户。您可以在此处阅读有关此内容的信息。此外,您可以使用 is_authentcated() 方法或 login_required 装饰器检查用户是否登录

def ur_view(request):
   #Check if the user is logged in
   if not request.user.is_authenticated():
          #your logic if user not logged in
   else:
        #If the user is logged in
于 2012-12-23T21:11:58.537 回答
1

你需要login_required装饰器。

@login_required
def index(request, template="index.html"):
    user = request.user # get the currently logged in user

如果用户已登录,他/她可以访问活动提要,否则他们将被重定向到登录页面。这将确保只有经过身份验证的用户才能访问 this view。而且您始终可以使用request.user.

于 2012-12-23T21:10:22.173 回答
0

登录的用户对象也在请求对象中。采用:request.user

在django auth 文档中查看更多信息

于 2012-12-23T21:10:11.720 回答