我正在尝试编写一个视图,其中检索当前登录用户的信息。
我的观点如下所示,只要我将用户传递给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())
但是,由于这是主页的视图,我更愿意不修改网址。我宁愿(在模板或视图中)描述如果用户登录或未登录会发生什么的逻辑(如果他们已登录,则显示活动源,如果没有,只需返回带有登录的静态页面)形式)。
我的问题是,如何将request.user(但不通过url)传递给视图,以便它返回当前用户的查询集?
答案 0 :(得分:3)
你真的不需要通过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
答案 1 :(得分:1)
您需要login_required装饰器。
@login_required
def index(request, template="index.html"):
user = request.user # get the currently logged in user
如果用户已登录,他/她可以访问活动源,否则他们将被重定向到登录页面。这将确保只有经过身份验证的用户才能访问此view
。您始终可以使用request.user
访问当前用户。
答案 2 :(得分:0)
登录的用户对象也在请求对象中。使用:request.user