2015-01-08 3 views
1

Пусть это гиперссылка после @login_required(login_url='/account/required_login/'):Возврата к запрошенной странице после преуспевающего @login_required

http://ngoksy.com/accounts/login_required/?next=/article/

Вид на login_require:

def required_login(request): 
    return render(request, 'required_login.html') 

Я попытался добавить 'ряд', как это here. Но это не помогло .:

def required_login(request): 
    c = {'next' : request.GET.get('next', '/')} 
    return render(request, 'login_required.html', c) 

У меня есть другой шаблон для входа и другой шаблон для анонимного пользователя, который перенаправляется на @login_required.

required_login.html:

<h2>Login required! You must login to view the content.</h2> 

    <form action="/accounts/auth/" method="post"> 
     {%csrf_token%} 

     <label for="username">Username:</label> 
     <input type="text" name="username" id="username" value=""> 
     <label for="password">Password:</label> 
     <input type="password" name="password" id="password" value=""> 

     <input type="submit" value="LOGIN"> 
    </form> 

Я хочу передать переменную next после успешного входа в login_required() и земли в страницу статьи после этого. Как мне это сделать?

+1

Вы пытаетесь использовать декоративный декодер Django '' @ login_required''? (этот: https://docs.djangoproject.com/en/1.7/topics/auth/default/#django.contrib.auth.decorators.login_required). @ В вашем заголовке привел меня к этой мысли, но затем фрагмент вашего представления не использует декоратор и вместо этого является функцией с именем 'login_required'', поэтому я немного озадачен. – sthzg

+0

@sthzg Да, я использую django '@ login_required'. Я изменил часть кода. Пожалуйста, смотрите. – Robin

ответ

1

Я закончил с этим.

просмотров за required_login:

def required_login(request): 
    c = {'next' : request.GET.get('next', '/')} 
    return render(request, 'required_login.html', c) 

В шаблоне (обратите внимание на скрытый вход для next):

<form action="/accounts/auth/" method="post"> 
    {%csrf_token%} 

    <label for="username">Username:</label> 
    <input type="text" name="username" id="username" value=""> 
    <label for="password">Password:</label> 
    <input type="password" name="password" id="password" value=""> 
    <input type="hidden" name="next" value="{{ next }}"/> 

    <input type="submit" value="LOGIN"> 
</form> 

А потом во взглядах на auth_view:

def auth_view(request): 
    username = request.POST.get('username','') 
    password = request.POST.get('password','') 
    user = auth.authenticate(username=username, password=password) 

    if user is not None: 
     auth.login(request, user) 

     if request.POST.get('next') != '': 
      return HttpResponseRedirect(request.POST.get('next')) 
     else: 
      return HttpResponseRedirect('/') 
    else: 
     return HttpResponseRedirect('/accounts/invalid_login') 

I надеюсь, это поможет любому другому нубу, как я! :)

Смежные вопросы