我有一个名为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中我处理发布数据以验证用户名和密码,但我不知道如何编写代码。
任何帮助都将不胜感激。
谢谢,
答案 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或会话中存储用户名和哈希密码(请不要存储明文密码)。如果用户访问受保护的页面,请检查数据库中是否存在用户名和密码对。如果没有,请将页面重定向到另一个页面。