2013-07-11 2 views
0

장고 웹 앱을 만드는 동안 문제가 있습니다. 사용자가 자신의 계정에 로그인하면 세션을 저장해야하고 로그인 페이지를 다시 방문하면 해당 사용자의 홈 페이지로 리디렉션해야합니다. 나는 사용을 시도했다장고 (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)) 

Urls.py

from django.conf.urls.defaults import * 
from django.contrib.auth.views import login, logout 
urlpatterns = patterns('', 
url(r'^$','apps.auth.views.index'), 

) 


urlpatterns = patterns('', 
url(r'cc/', login, kwargs = {'template_name' : 'auth/cc.html'} , name = 'cc_login'), 
url(r'logout/', logout, name = 'cc_logout'), 
url(r'home/','apps.auth.views.home', name = 'cc_home'), 
) 

답변

2

나는 내 장고 프로젝트와 같은 상황에 달렸다.

내가 너무 유사 뷰를하여 그것을 해결 :

def login_page(request): 
    if request.user.is_authenticated(): 
     return redirect(<insert your desired page here>) 
    else: 
     return render(<whatever the login page is>) 

이 방법을, 사용자가 로그인하면, 그들은 당신이 그들로 원하는 페이지로 리디렉션됩니다.

편집 : 아래의 의견에 응답

, 나는 (원래는 위의 여전히) 내 대답을 수정하고있다. 다음은 귀하의 문제를 해결하기 위해 수행 한 조치입니다.

from django.contrib.auth.views import login 

def custom_login(request, **kwargs): 
    """ 
     Redirects the user to the desired page if they are authenticated 
    """ 
    if request.user.is_authenticated(): 
     return redirect(<whatever page or view you want them to go to>) 
    else: 
     return login(request, **kwargs) 

예를 들어, kwargs로는 {: 'your_login_template.html', 'authentication_form': 'TEMPLATE_NAME'YourCustomRegistrationFormClass}이 될 수는 표준 로그인 및 등록 절차를 사용하는 경우

을 그냥두고 kwargs 부분이 비어 있습니다.

+0

덕분에 buched하지만 매개 변수로 전달 될 때 내 템플릿을 렌더링 할 수 없습니다입니다. 템플릿에는 장고 django {{form.as_p}} 양식이 들어 있습니다. 그것은 그것을 보지 않습니다. 어떤 제안? – PythonEnthusiast

+0

정확하게 귀하의 질문을 이해할 수 없지만 렌더 함수를 제대로 호출하지 않아서 문제가 발생할 수 있습니다. 여기 https://docs.djangoproject.com/en/dev/topics/http/shortcuts/에서 설명을 찾을 수 있습니다. render 함수를 호출하려면 적절한 매개 변수를 전달해야합니다 (예 : render (request, 'your_template.html', {컨텍스트 변수 사전}). – buched

+0

더 명확하게 설명하기 위해 'form' 렌더링 컨텍스트 사전에서 사용하는 .as_p '는 다음과 같이 전달되어야합니다. render (request,'your_template.html ', {'form ': your_form}) – buched

0

나는 장고를 처음 접했지만 기본 로그인보기를 덮어 쓰려고 했습니까?

views.py

from django.contrib.auth import views as auth_views 
from django.shortcuts import redirect 

def login(request, *args, **kwargs): 
    if request.method == 'POST': 
     request.session.set_expiry(0) # Remember user session 
    if request.user.is_authenticated(): 
     return redirect(USER_PAGE_ADDRESS) 
    return auth_views.login(request, *args, **kwargs) 

urls.py

urlpatterns = patterns('', 
    url(r'cc/', APP_NAME.views.login, kwargs = {'template_name' : 'auth/cc.html'} , name = 'cc_login'), 
    ... 
) 
+1

@ user1162512 죄송합니다. buched 게시물에 응답 할 수있는 충분한 점수가 없지만 위의 대답에서와 같이 로그인 함수에 추가 인수 (예 : * args 및 ** kwargs)를 전달하려고 시도한 적이 있습니까? 그런 다음 템플릿 인수를 기대할 것입니다. – chipperdrew