如何防止用户在没有登录的情况下访问网页

时间:2017-06-22 02:17:03

标签: django python-3.x django-forms django-views

我有一个名为jobboard.html的页面,我只希望超级用户访问。

现在我创建了用户可以转到url / login /的位置,输入用户名和密码,然后将它们重定向到/ 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 url:

LOGIN_REDIRECT_URL = '/activejobs/'

activejobs / urls.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中我处理发布数据以验证用户名和密码,但我不知道如何编写代码。

任何帮助都将不胜感激。

谢谢,

4 个答案:

答案 0 :(得分:1)

from django.contrib.auth.mixins import LoginRequiredMixin

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

如果您的用户正在登录,则用户将通过会话身份验证进行身份验证,只需在用户访问作业列表时检查用户is_authenticated

答案 1 :(得分:1)

@loginrequired

或其他相关内容(该函数必须在以下函数之前运行)

2路,只需检查(应该在休息api中使用用户)

request.user.(bla bla)

答案 2 :(得分:1)

使用装饰器。

在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)

答案 3 :(得分:0)

在cookie或会话中存储用户名和哈希密码(请不要存储明文密码)。如果用户访问受保护的页面,请检查数据库中是否存在用户名和密码对。如果没有,请将页面重定向到另一个页面。