2013-07-13 3 views
0

У меня возникла проблема при создании веб-приложения Django. Я хочу, чтобы, если пользователь входит в свою учетную запись, его сеанс должен быть сохранен, и когда он снова посещает страницу входа в систему, он должен быть перенаправлен на свою домашнюю страницу. Вот мой код.Вопрос рендеринга Django

Views.py

from django.http import HttpResponse 
from django.shortcuts import render_to_response 
from django.contrib.auth.decorators import login_required 
from django.template import RequestContext 

def index(request): 
    return HttpResponse("Index Page") 

@login_required 
    def home(request): 
ctx = {} 
return render_to_response('auth/home.html',ctx, context_instance = RequestContext(request)) 

def login_page(request): 
    if request.user.is_authenticated(): 
     return redirect('cc_home') 
    else: 
    return render_to_response(request,'auth/cc.html') 

Urls.py

from django.conf.urls.defaults import * 
from django.contrib.auth.views import login, logout 

urlpatterns = patterns('', 
url(r'cc/', 'apps.auth.views.login_page', name = 'cc_login'), 
url(r'logout/', logout, name = 'cc_logout'), 
url(r'home/','apps.auth.views.home', name = 'cc_home'), 
) 

А вот мой шаблон cc.html

<form action ="." method = POST> 
     {% csrf_token %}  
     {{ form.as_p }} 
     <input type = "submit" value = "login"> 
    </form> 


</body> 

home.html

{{ user }} 's profile 
<a href = "{% url 'cc_logout' %}">Logout</a> 

Когда я просматриваю к CC URL он должен сначала спрашивает учетные данные пользователя. После успешного входа в систему он должен перенаправить на домашний URL-адрес пользователя, который работает нормально. Но, когда пользователь снова просматривает CC url(), он должен быть перенаправлен на свою домашнюю страницу.

В процессе отладки я обнаружил, что он не может отображать форму, когда пользователь не аутентифицирован. Он не показывает встроенную форму Django, представленную в CC.html, она просто показывает кнопку входа.

Как визуализировать форму. Пожалуйста, предложите.

Благодаря

ответ

0

Может быть ошибка в методе login_page. попытаться исправить это как этот четкости login_page (запрос): если request.user.is_authenticated(): обратный редирект ('cc_home') еще: возвращение render_to_response ('авториз/cc.html', {} context_instance = RequestContext (request)) Я считаю, что запрос в вашем render_to_response вызывает проблему

+0

Да, вы абсолютно правы. Я определил, что проблема заключается только в выражении render, но я пробовал это раньше, к сожалению, это не происходит. Любые предложения? – PythonEnthusiast

1

Но вы не прошли какой-либо форме в шаблон чтобы сделать! Вам нужно создать форму входа в систему и передать ее в контекст шаблона, иначе {{ form }} не имеет никакого отношения.

+0

Спасибо, Дэниэл за ответ. Вот что я сомневаюсь. Как передать встроенную форму Django в render_to_response? Как мне создать экземпляр? – PythonEnthusiast

1

Вы должны иметь возможность использовать форму по умолчанию, если вы ее замените;

url(r'cc/', 'apps.auth.views.login_page', name = 'cc_login'), 

с;

url(r'cc/', login, {template_name: 'cc.html'}), 
+0

Несмотря на то, что это делает избыточную версию login_page, поэтому вам придется перенаправить уже зарегистрированных пользователей другим способом, я думаю. –

+0

Привет Сэм, Я сделал это, но это не решает мой вопрос. Он не перенаправляет аутентифицированного пользователя на его домашний URL-адрес при просмотре на URL-адрес CC. Вместо этого он просматривает сам CC-url, это не то, что я хочу. Любые предложения? – PythonEnthusiast

+0

@ user1162512 Попробуйте это; [Django: перенаправление зарегистрированных пользователей со страницы входа] (http://stackoverflow.com/a/2320702/2576437). Кажется, что трюк заключается в том, чтобы передать запрос django.contrib.auth.views.login в вашем пользовательском представлении. –