如果用户通过身份验证,则在Django视图中自动HTTPRedirect?

时间:2015-05-16 22:28:44

标签: django django-models

我已成功完成此操作,因此用户必须登录才能查看其个人资料,但是,我只希望用户能够查看其个人资料而无其他人。

以前,他们可以访问www.websitename.com/user/admin 以及www.websitename.com/user/test,每次登录用户都会显示配置文件的数据。

要访问的网址是www.websitename.com/user/usernameofcurrentuser

个人资料页面视图

def profile_page(request, username):
    context = RequestContext(request)
    if request.user == username:
        if request.user.is_authenticated():
            user = User.objects.get(username=username)
            taskitems = request.user.taskitem_set.all()
            return render_to_response('profile.html', {}, context)
        else:
            return render_to_response('login.html', {}, context)
    else:
        return render_to_response('login.html', {}, context)

但是,即使用户已登录,它也会将其重定向到登录页面。我知道用户已登录,因为它在登录页面上打印了他们的名字,但是它没有将它们重定向到与用户名相关联的配置文件。

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

def profile_page(request, username):
    if request.user.is_authenticated():
        if request.user.username == username:
            # removed user since already in request.user and available in template as 'user'
            # removed taskitems since directly available in template as 'user.taskitem_set.all'
            return render(request, 'profile.html')
        else:
            return HttpResponseRedirect(reverse('profile_page', args=(request.user.username,)))
    else:
        return render(request, 'login.html')

答案 1 :(得分:0)

删除Hello <%= @order.user.name %>, Order id #<%= @order.id %> <%- @order.items.each do |item| %> * <%= item.quantity %> <%= item.product.name %> (<%= number_to_currency item.total_price %>) <%- end %> Total: <%= number_to_currency @order.total_price %> 参数,因为每个用户只应查看自己的个人资料。您还可以使用username装饰器删除额外的条件:

login_required

请务必在from django.contrib.auth.decorators import login_required from django.shortcuts import render @login_required def profile_page(request): return render(request, 'profile.html') 中设置LOGIN_URL,以便将未经身份验证的用户重定向到正确的位置。