我们可以使用Django中/admin的登录页面来自己使用吗?

2024-05-07 23:01:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我是否可以使用位于:/admin的登录页让非工作人员用户登录?我在django设置文件中使用以下设置:

LOGIN_URL = '/admin/'
LOGIN_REDIRECT_URL = '/'

当我登录时,它不会将我重定向到根文件夹。我这样做对吗?

注意:我在视图上使用decorator@login_required

编辑

它用这个URL将我登录到管理站点:http://127.0.0.1:8000/admin/?next=/


Tags: 文件django用户文件夹视图url编辑admin
2条回答

非工作人员无法通过“管理”视图登录,因此您不能

但是,有一个Django视图可以完全满足您的需要:django.contrib.auth.views.login

您可以轻松地将其添加到您的urlconf

from django.contrib.auth.views import login

urlpatterns = ('',
    #snip
    url(r'^login/$', login)
)

查看文档以了解如何自定义其行为:https://docs.djangoproject.com/en/dev/topics/auth/#limiting-access-to-logged-in-users

您只需要为视图定义一个模板即可使用,默认情况下,该模板应该位于registration/login.html,但可以重写。

更新

1)对于django 1.11+更好地使用LoginView(即from django.contrib.auth.views import LoginView),因为login代码实际上使用了LoginView,而login的代码甚至有一条警告消息:

warnings.warn(
    'The login() view is superseded by the class-based LoginView().',
    RemovedInDjango21Warning, stacklevel=2
)

2)您可能需要更改管理员登录页面的默认页眉。这可以通过在上下文中提供site_header来实现。

所以更新版本如下:

from django.contrib.auth.views import LoginView

urlpatterns = [
   # your patterns here,
    url(r'^login/$',
        LoginView.as_view(
            template_name='admin/login.html',
            extra_context={
                'site_header': 'My custom header',
            })),
]

使用Django 1.6,我可以使用Django自己的管理员登录模板进行以下设置。 然后当我打开“/”时,它会将我重定向到登录屏幕,登录后它会将我发送回“/”

设置.py

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'core',
    'south',
)

LOGIN_URL = '/login'

url.py

from django.conf.urls import patterns, include, url
from django.contrib import admin
from django.contrib.auth.views import login

admin.autodiscover()
urlpatterns = patterns(
    '',
    url(r'^', include('core.urls')),
    url(r'^admin/', include(admin.site.urls)),
    url(r'^login/$', login, {'template_name': 'admin/login.html'})
    # I didn't create this 'admin/login.html' template
    # Django will use the one from the admin application ;-)
)

核心/url.py

from django.conf.urls import patterns, url
urlpatterns = patterns(
    'core.views.web_views',
    url(r'^$', 'home'),
)

核心/视图/网络视图.py

from django.shortcuts import render_to_response
from django.template.context import RequestContext

__author__ = 'tony'

from django.contrib.auth.decorators import login_required

@login_required
def home(request):
    return render_to_response('home.html', {}, context_instance = RequestContext(request))

相关问题 更多 >