【问题标题】:Pass request.user to view without altering the url传递 request.user 以查看而不更改 url
【发布时间】:2012-12-10 11:36:38
【问题描述】:

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

我的视图如下所示,只要我将用户传递给 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)传递给视图,以便它返回当前用户的查询集?

【问题讨论】:

    标签: django django-templates django-views


    【解决方案1】:

    您实际上不必通过 url 传递任何内容。您可以从 request.user 直接访问已登录的用户。您可以通过here 阅读有关此内容的信息。此外,您可以使用 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
    

    【讨论】:

      【解决方案2】:

      你需要 login_required 装饰器。

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

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

      【讨论】:

      • 感谢您的帮助!现在一切正常 - 如果我的电线交叉 - 需要一些睡眠时间
      【解决方案3】:

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

      在django auth docs查看更多信息

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-25
        • 2018-08-02
        相关资源
        最近更新 更多