2016-05-21 9 views
1

次の問題があります。私はAntonio Meleの例でDjangoに従っています。ここでの練習は、ユーザーのログインとログアウトを設定することです。デフォルトのcontrib.authビューを使用します。本のコードが使用されているとき。ログアウトビューは管理ページのログアウトビューです。ここに記載したものと同じ問題であると思われる。Djangoがログアウトテンプレートをレンダリングできません

django logout redirects me to administration page。すべて成功したことがありませんでした

私はこの問題に取り組んでいます。管理テンプレートがレンダリングされなくなりました。しかし、私はまだ自分のlogout.htmlを使用することができません。自分のlogin.htmlにリダイレクトすることはできますが、logout.htmlではできません。ログアウト自体は機能しています。ユーザーはログインでき、この問題のみをテンプレートで使用できます。私は今だけ1つのブラウザエラーが

を受けるページがでIceweaselは>サーバー>は問題が時々によって引き起こされることができませんcomplete.Thisん方法で、このアドレスに対する要求をリダイレクトしていることを検出しました正常にリダイレクトされていませんクッキーを受け入れることを拒否するか、拒否します。

は、クッキーはCSRFトークンが

私は以下のコード、1つの例外を除いて、すべての作品を使用している場合。私はにリダイレクトされています

:-(エラーなしなしトレースバックを受け付けて見ることができます確認しましたDjango管理のログアウトテンプレートにログアウトし、私自身のlogout.htmlではなく....これは本の中でcoedeを使用しているときです...独自の修正されたコードと別個のログアウト機能も最大recursonエラーを生成しませんでしたURLS.PYを編集すると管理用テンプレートのレンダリングが停止しますが、変更されたコードはURLに問題があるようですすなわち.....

これは動作しません!!!!!

url(r'^logout/$', 'django.contrib.auth.views.logout',{'next_page': '/account/logout'}, name='logout'), 

これは完璧に動作します!!!! BOOK MAIN URLS.PY

から本SETTINGS.PY FROM

from django.core.urlresolvers import reverse_lazy 

LOGIN_REDIRECT_URL = reverse_lazy('dashboard') 
LOGIN_URL = reverse_lazy('login') 
LOGOUT_URL = reverse_lazy('logout') 

BOOK FROM VIEWS.PY

from django.http import HttpResponse 
from django.shortcuts import render, redirect 
from django.contrib.auth import authenticate, login, logout 
from django.contrib.auth.decorators import login_required 
from django.contrib import messages 
from .forms import LoginForm 

@login_required 
def dashboard(request): 
    return render(request, 'account/dashboard.html', {'section': 'dashboard'}) 


def user_login(request): 
    if request.method == 'POST': 
     form = LoginForm(request.POST) 
     if form.is_valid(): 
      cd = form.cleaned_data 
      user = authenticate(username=cd['username'], password=cd['password']) 
      if user is not None: 
       if user.is_active: 
        login(request, user) 
        return HttpResponse('Authenticated successfully') 
       else: 
        return HttpResponse('Disabled account') 
      else: 
       return HttpResponse('Invalid login') 
    else: 
     form = LoginForm() 
    return render(request, 'account/login.html', {'form': form}) 

を次のように

url(r'^logout/$', 'django.contrib.auth.views.logout',{'next_page': '/account/login'}, name='logout'), 

ブックからのコードであります

from django.conf.urls import include, url 
from django.contrib import admin 



urlpatterns = [ 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^account/', include('account.urls')), 
    ] 

MYAPP(アカウント)URLS.PY

from django.conf.urls import url 
from . import views 


urlpatterns = [ 
    # url(r'^login/$', views.user_login, name='login'), 
    url(r'^$', views.dashboard, name='dashboard'), 



    # login/logout urls 
    url(r'^login/$', 'django.contrib.auth.views.login', name='login'), 
    url(r'^logout/$', 'django.contrib.auth.views.logout', name='logout'), 
    url(r'^logout-then-login/$', 'django.contrib.auth.views.logout_then_login', name='logout_then_login'), 

MY MODIFIFED CODE

私は今、私の見解の中に別々のログアウトの定義が含まれており、今も渡してきた:{の{キー値}のペアを'next_page': '/ account/logout'}。

ログアウトDEFをURLで使用され、マッピングされている場合は、それは、このことなく、ラインログアウト(リクエスト)

def logout(request): 
    logout(request) 
    request.session.flush() 
    request.user = AnonymousUser 
    # Redirect to a success page. 
    return HttpResponseRedirect(request,'/account/logout.html',context_instance = RequestContext(request)) 

で最大再帰エラーを生成するファイルのみエラーが発生DEF「「」

あります ページが正しくリダイレ​​クトされていません

"" "Iceweaselはサーバーがこのアドレスの要求を決して完了しないようにリダイレクトしていることを検出しました。

This problem can sometimes be caused by disabling or refusing to accept cookies."""" 

「」」 は、私がブラウザでクッキーをチェックし、csrf_tokenは奇妙なことがある私にとって

を受け付けて参照するコードの場合:{ 『にnext_page』: 『/アカウント/ログアウト』 、見つかったすべての提案を試してみましたが、すべてが完璧に動作 '/アカウント/ログイン'}すべてのヘルプは高く評価損でいます....

MY CODE VIEWS.PY

:。} { 'にnext_page' に変更されます
from django.shortcuts import render 
from django.http import HttpResponse, HttpResponseRedirect 
from django.contrib.auth import authenticate, login, logout 
from .forms import LoginForm 
from django.contrib.auth.decorators import login_required 
from django.template import RequestContext 
from django.contrib.auth.models import User 


# Create your views here. 

@login_required 
def dashboard(request): 
    return render(request, 'account/dashboard.html',{'section': 'dashboard' }) 




def user_login(request): 
    cd = None 
    if request.method=='POST': 
     form = LoginForm(request.POST) 
     if form.is_valid(): 
      cd = form.cleaned_data 
      user = authenticate(username=cd['username'], 
           password=cd['password']) 
      if user is not None: 
       if user.is_active: 
        login(request, user) 
        return HttpResponse('Authenticated successfully') 
       else: 
        return HttpResponse('Disabled Account') 
      else: 
       return HttpResponse('Invalid Login') 
    else: 
     form = LoginForm() 
    return render(request, 'account/login.html',{'form': form},context_instance = RequestContext(request)) 


def logout(request): 
    logout(request) 
    request.session.flush() 
    request.user = AnonymousUser 
    # Redirect to a success page. 
    return HttpResponseRedirect(request,'/account/logout.html',context_instance = RequestContext(request)) 

MY CODE アカウント/ urls.py

from django.conf.urls import url, patterns 
from . import views 



urlpatterns = [ 
       # post views 
       #url(r'^login/$', views.user_login, name='login'), 
       # login/logout urls 
       url(r'^$', views.dashboard, name='dashboard'), 
       url(r'^login/$', 'django.contrib.auth.views.login', name='login'), 
       url(r'^logout/$', 'django.contrib.auth.views.logout',{'next_page': '/account/logout'}, name='logout'), 
       url(r'^logout-then-login/$','django.contrib.auth.views.logout_then_login', name='logout_then_login'), 

       ] 

MY CODE MAIN URLS.PY

from django.conf.urls import include, url 
from django.contrib import admin 


urlpatterns = [ 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^account/', include("account.urls")), 
] 

MYCODE SETTINGS.PY

LOGIN_REDIRECT_URL = reverse_lazy('dashboard') 
LOGIN_URL = reverse_lazy('login') 
LOGOUT_URL = reverse_lazy('logout') 

INSTALLED_APPS = (
    'account', 
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 

) 

MIDDLEWARE_CLASSES = (
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
    'django.middleware.security.SecurityMiddleware', 
) 


# urlpatterns += patterns('django.contrib.auth.views', 
#   #url(r'^login/$', 'login', { 'template_name': 'registration/login.html'}, name='login'), 
#   #url(r'^logout/$', 'logout', { 'template_name': 'registration/logout.html', 'next_page':reverse('index') }, name='logout'), 
# ) 

MYCODE
のlogout.html

あなたの urls.pycontrib.authさん logoutビューを使用している
{% extends "base1.html" %} 

{% block title %}Logged Out{% endblock %} 


{% block content %} 
<h1> 
    Logged Out 
</h1> 
<p> 
    You have been successfully logged out. You can <a href="{% url "login" %}">Log-in again</a> 
</p>{% endblock %} 

MYCODE base1.html

{% load staticfiles %} 
<!DOCTYPE html> 
<html> 
<head> 
    <title>{% block title %}{% endblock %}</title> 
    <link rel="stylesheet" type="text/css" href="{% static 'css/base.css' %}"> 
</head> 
<body> 


<div id="header"> 
    <span class="logo"> 
     BookMarks 
    </span> 
{% if user.is_authenticated %} 
<ul class="menu"> 

<li {% if section == "dashboard" %}class="selected"{% endif %}> 
<a href="{% url 'dashboard' %}">My dashboard</a> 
</li> 
<li {% if section == "images" %}class="selected"{% endif %}> 
<a href="#">Images</a> 
</li> 
<li {% if section == "people" %}class="selected"{% endif %}> 
<a href="#">People</a> 
</li> 
</ul> 
{% endif %} 

{%if user.is_authenticated %} 
<span class="user"> 


Hello {{ user.first_name }} {{ user.last_name }}, 
<a href="{% url 'logout' %}">Logout</a> 

{% else %} 
<a href='{% url "login" %}'>Log-in</a> 
{% endif %} 
</span> 
</div> 

<div id="content"> 
    {% block content %} 
    {% endblock %} 
</div> 

</body> 

</html> 
+0

[django logoutの重複している可能性があるので管理ページにリダイレクトされます](http://stackoverflow.com/questions/15467831)/django-logout-redirects-me-to-administration-page) – Louis

答えて

2

。このビューは'next_page'で指定されたURLにリダイレクトされます。 '/account/logout'next_pageとして提供します。ここでもlogoutビューが呼び出されます。

これは、(無限)につながります。ビューは、それ自身にリダイレクトされます。

ではなく、試してみてください:自分のlogoutビューで:

# no redirecting here! 
return render(request, 'account/logout.html', 
       context_instance=RequestContext(request)) 

account/urls.pyにそのビューのURLを追加します。

url(r'^post-logout/$', logout, name='post-logout'), 
# logout being your own view 

そして、実際の(auth)ログアウトに'next_page'としてそのURLを提供します。

url(r'^logout/$', 'django.contrib.auth.views.logout', 
    {'next_page': '/account/post-logout'}, name='logout'), 
+0

next_pageの値が削除された場合、プロジェクト内のテンプレートではなくDjango管理者のログアウトテンプレートにリダイレクトされます。もしあなたが定義したログアウトビューへのURLマップが最大再帰エラーを生成するならば、 –

+0

あなたは**テンプレートをレンダリングしますが、**リダイレクト**をビューに追加します。したがって、あなた自身の 'logout'(ポストログアウト)ビューを表示するには、テンプレートをレンダリングしてリダイレクトするのではなく、実際のログアウトビューに使用されているものとは異なる 'urls.py'にurlを追加します。提供する'next_page'とします。 – schwobaseggl

0

T彼の解決策は、次のようにURLをマップすることです。

url(r '^ logout/$'、 'django.contrib.auth.views.logout'、{'template_name': 'account/logout.html' 、}、名前は=「)ログアウト」、

+0

@schwobaseggl大変感謝しています。 –

0

私は同じ問題を抱えていたが、あなたの代わりに、独自のログアウトページのDjangoの管理サイトのログアウトページを見ているならば、私は」

を読んだままプロジェクトのINSTALLED_APPS設定を確認し、django.contrib.adminがアカウントアプリケーションの後に来ることを確認してください。両方のテンプレートは同じ相対パスにあり、Djangoテンプレートローダは最初に見つかったものを使用します。 "

関連する問題