2016-09-04 9 views
0

私のページにログアウト機能を作成しようとしています。しかし、この再帰エラーを取得するたびに、ログアウトURLを指すリンクをクリックします。ログアウト(要求)で最大再帰深度を超えました

以下は、コンテンツを表示すると思われるコードと、ユーザーがログインしている場合はログアウト機能です。それ以外の場合は、ログインフォームを表示します。

ビューメソッド

def login(request): 

    username = request.POST.get('username') 
    password = request.POST.get('password') 

    user = authenticate(username=username, password=password) 

    context = { 

    } 

    if user is not None: 
     print('Correct user' 
    else: 
     print('Wrong user') 

     return render(request, 'index.html', context) 

def logout(request): 
    print('logged out') 
    logout(request) 

    return redirect('index') 

URL

urlpatterns = [ 
      url(r'^$', views.index, name='index'),   

      url(r'^login/$', views.login, name='login'), 

      url(r'^logout/$', views.logout, name='logout'), 
] 

index.htmlを

{% if user %} 
     <h3>Hello {{user.username}}</h3> 
     <a href="{% url 'crowd:logout' %}">Logout</a> 
    {% else %} 
     <form action="{% url 'crowd:login' %}" method='post'> 
     {% csrf_token %} 
      <input class='logintext' type='text' placeholder='Username' name='username'> 
      <input class='logintext' type='password' placeholder='Password' name='password'><br> 
      <input class='loginbutton' type='submit' value='Login'> 
      <a class='loginforgotpassword' href="{% url 'crowd:register' %}"> Forgot password?</a> 
      <a class='loginregister' href="{% url 'crowd:register' %}"> Register</a> 
     </form> 
    {% endif%} 

コンソールエラー:

File "C:\Users\Rasmus\workspace\Crowd\src\Cr\views.py", line 48, in logout 
    logout(request) 
    File "C:\Users\Rasmus\workspace\Crowd\src\Cr\views.py", line 48, in logout 
    logout(request) 
    File "C:\Users\Rasmus\workspace\Crowd\src\Cr\views.py", line 48, in logout 
    logout(request) 
    File "C:\Users\Rasmus\workspace\Crowd\src\Cr\views.py", line 47, in logout 
    print('logged out') 
RecursionError: maximum recursion depth exceeded 
[04/Sep/2016 23:35:59] "GET /Crowd/logout/ HTTP/1.1"436 

答えて

1

あなたのログアウトビューの名前を変更してください。

def logout(request): 
    print('logged out') 
    logout(request) 

    return redirect('index') 

ビュー名はリクエストパラメータでログアウトしますと

エラーです。したがって、ビューでログアウト(要求)を呼び出すと、Djangoのログアウト機能ではなくログアウトビューが呼び出されます。それは再帰を引き起こしています。

+0

ああ愚かな間違い。ありがとう! – vandelay

+0

問題ありません。私たちはすべて私たちの生活の中でここにいます:) –

関連する問題