2017-03-10 94 views
1

我目前正試圖讓我的Django登錄/註銷正常工作,但在登錄和註銷一次後出現問題。如果我以同一用戶或另一用戶的身份再次登錄,則無法再次註銷。我很好奇,如果有人曾經遇到過這種情況,因爲我目前無法弄清楚發生了什麼,並且我嘗試了contrib.auth.logout以及我自己的註銷視圖,它們調用註銷(請求)。第二個Django註銷不起作用

謝謝

- 編輯1 -

我開始認爲這可能是一個緩存的問題,但我很懷疑。

程序my_app/urls.py:

from django.conf.urls import url 
from django.contrib.auth import views as auth_views 

from . import views 

urlpatterns = [ 
    url(r'^$', views.index, name = 'index'), 
    #url(r'^login/$', auth_views.login, name = 'login'), 
    #url(r'^logout/$', auth_views.logout, name = 'logout'), 
    url(r'^login/$', views.login_view, name = 'login_view'), 
    url(r'^logout/$', views.logout_view, name = 'logout_view'), 
    ... 
] 

程序my_app/views.py:

... 

def index(request): # Main login page 
    if request.user.is_authenticated: 
     user = request.user 
     gen_prof = General_Profile.objects.get(user_id = user.id) 
     return redirect('home_page', permanent = True) 

    return redirect('login_view', permanent = True) 


def login_view(request): 
    if request.method == 'POST': 
     form = LoginForm(request.POST) 
     if form.is_valid(): 
      cleaned = form.cleaned_data 
      username = cleaned['username'] 
      password = cleaned['password'] 
      user = authenticate(username = username, password = password) 
      if user is not None: 
       login(request, user) 
       gen_prof = General_Profile.objects.get(user_id = user.id) 
       # Redirect to a success page. 
       return redirect('home_page', permanent = True) 
      #else: 
       # return HttpResponse("user is None") 
       # Return an 'invalid login' error message. 
    else: 
     form = LoginForm() 

    template = loader.get_template('cloud/login.html') 
    context = {'form': form} 

    return HttpResponse(template.render(context, request)) 


def logout_view(request): 
    logout(request) 

    return redirect('login_view', permanent = True) 

... 

和我用的是logout_view作爲URL的退出按鈕模板。

- EDIT 2 -

我的urls.py現在是這樣的:

urlpatterns = [ 
    url(r'^$', views.index, name = 'index'), 
    url(r'^accounts/login/$', auth_views.login), 
    url(r'^login/$', auth_views.login, name = 'login_view'), 
    url(r'^logout/$', auth_views.logout, name = 'logout_view'), 
    #url(r'^login/$', views.login_view, name = 'login_view'), 
    #url(r'^logout/$', views.logout_view, name = 'logout_view'), 
    ... 
] 

我也用我的功能@login_required裝飾。我想我想知道的是如何實現由Django提供的登錄和註銷視圖以及我目前擁有的視圖。

+1

顯示一些代碼,比如'logout'查看 – Bijoy

+0

剛剛編輯@Bijoy – Evachine

回答

2
return redirect('login_view', permanent = True) 

您在登錄和註銷視圖中使用永久重定向。這意味着您的瀏覽器直接進入目標頁面,因此服務器不會將用戶登錄或註銷。

即使在刪除permanent = True後,瀏覽器可能會存儲永久重定向。您可以使用其他瀏覽器測試您的代碼是否爲workibg。

Django帶有登錄和註銷視圖。我建議你使用它們來避免這個錯誤或其他錯誤。

+0

謝謝你的幫忙!我嘗試過,但在計算如何使用Django登錄和註銷視圖時遇到了一些麻煩。請參閱**編輯2 **以獲取您的評論後的更改 – Evachine