2017-06-22 111 views
0

我有一個叫jobboard.html,我只希望超級用戶訪問頁面。如何防止用戶訪問一個網頁,而不登錄

現在我已經創建了的地步,用戶可以到網址/登錄/,輸入自己的用戶名和密碼,然後他們將被重定向到/ activejobs /。

然而,任何人都可以手動輸入/ activejobs /到瀏覽器中以及在那裏被引導。我不確定如何將瀏覽器中輸入/ activejobs /的用戶(沒有權限)重定向到登錄頁面。我已經使用POST數據和獲取用戶名和密碼,將其與內置的用戶數據庫Django提供了身份驗證的一些想法,但我不知道如何使用我的當前設置做到這一點。

urls.py:

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

    urlpatterns = [ 
     url(r'^admin/', admin.site.urls), 
     url(r'^login/$', auth_views.login, {'template_name': 'activejobs/login.html'}, name='login'), 
     url(r'^logout/$', auth_views.logout, {'template_name': 
     url(r'^activejobs/', include('activejobs.urls')), 
    ] 

的login.html:

{% extends 'activejobs/base.html' %} 

{% block content %} 
    <h2>Login</h2> 
    <form method="post"> 
    {% csrf_token %} 
    {{ form.as_p }} 
    <button type="submit">Login</button> 
    </form> 
{% endblock %} 

settings.py包含此行,使其重定向到activejobs網址:

LOGIN_REDIRECT_URL = '/activejobs/' 

activejobs /網址的.py:

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

    app_name = 'activejobs' 

    urlpatterns = [ 
     url(r'^$', views.BoardView.as_view(), name='board'), 
     url(r'^(?P<contactId>[0-9]+)/$', views.ViewContactDetails, name='detail'), 
    ] 

activejobs/views.py:

from django.shortcuts import render 
from django.views import generic 
from getrate.models import ContactInfo 
from django.contrib.auth import authenticate, login 

class BoardView(generic.ListView): 

    template_name = 'activejobs/jobboard.html' 
    context_object_name = 'all_jobs' 

    def get_queryset(self): 
     return ContactInfo.objects.filter(isActive = True) 

我覺得在BoardView是我處理後的數據來驗證用戶名和密碼,但我不知道如何代碼,在

。任何幫助,將不勝感激。

感謝,

+0

嘗試使用中間件 – GeekSilva

回答

1
from django.contrib.auth.mixins import LoginRequiredMixin 

class BoardView(LoginRequiredMixin, generic.ListView): 
    login_url = '/login/' 
    redirect_field_name = 'redirect_to' 

如果你的用戶登錄,用戶將通過會話身份驗證身份驗證,只需要檢查用戶在訪問作業列表

+0

完美的作品!我最喜歡你的解決方案,因爲我所要做的就是將這些東西附加到當前的設置中,而不是重做任何事情。 –

0

存儲在cookie或會話的用戶名和散列密碼(請不要存儲明文口令)。如果用戶訪問受保護的頁面,請檢查數據庫中是否存在用戶名和密碼對。如果沒有,則將頁面重定向到另一個頁面。

0
@loginrequired 

什麼關聯(功能is_authenticated具有以下功能之前運行)

2路,只是檢查(應使用用戶在REST API)

request.user.(bla bla) 
1

使用decorat ORS。

在urls.py:

url(r'^about/$', login_required(TemplateView.as_view(template_name="secret.html"))), 

在課堂上,

class ProtectedView(TemplateView): 
    template_name = 'secret.html' 

    @method_decorator(login_required) 
    def dispatch(self, *args, **kwargs): 
     return super(ProtectedView, self).dispatch(*args, **kwargs) 
+0

這也適用於如果我的意見是功能,但我使用LoginMixin工作的通用視圖類。感謝您向Google提供確切的條款,並在文檔中查看。 –

+0

當然:)很高興能有所幫助。 – mikep

相關問題