我想让用户在看到页面之前登录。是否有用于用户登录的内置模板,以便我不必编写自己的登录页面?
答案 0 :(得分:46)
是。你可以在这里阅读所有相关内容:https://docs.djangoproject.com/en/1.8/topics/auth/default/#django.contrib.auth.decorators.login_required ...但这里有一些要点:
'django.contrib.auth.middleware.AuthenticationMiddleware'
MIDDLEWARE_CLASSES
添加到settings.py
'django.contrib.auth
'django.contrib.contenttypes'
'和INSTALLED_APPS
添加到settings.py
django.contrib.auth.views.login
为视图设置登录网址,例如url(r'^login/$', 'django.contrib.auth.views.login',name="my_login")
... views.py
from django.contrib.auth.decorators import login_required
@login_required
def home(request):
return HttpResponse('Home Page')
默认情况下,您将模板放在my_template_directory/registration/login.html
中。有关该模板的更多信息,请参阅本文开头的链接。
答案 1 :(得分:31)
正如作者的评论中所提到的,最简单的方法是将以下行添加到urls.py
:
from django.contrib.auth.views import login, logout
urlpatterns = patterns('',
url(r'^accounts/login/$', login, {'template_name': 'admin/login.html'}),
url(r'^accounts/logout/$', logout),
)
据我所知,除非需要用户个人资料管理,否则无需添加r'^accounts/$'
和r'^accounts/profile/$'
网址。
正如@mmatt在评论中所建议的那样,在LOGIN_REDIRECT_URL = '/'
中设置settings.py
以避免在登录后默认重定向到/accounts/profile/
。请参阅Django设置文档中的LOGIN_REDIRECT_URL。
这也应该在Django 2.x中使用path
代替url
。
答案 2 :(得分:14)
@brant中upvoted response最多在技术上是不正确的。 Django提供默认视图来处理登录功能,但documentation不提供模板:
Django没有为身份验证视图提供默认模板。您应该为要使用的视图创建自己的模板。模板上下文记录在每个视图中,请参阅所有身份验证视图。
答案 3 :(得分:4)
如果您想快速启动并运行,我建议使用提供的URLConf。
例如:
urlpatterns = [
url('^', include('django.contrib.auth.urls'))
]
请参阅django文档中的更多详细信息:https://docs.djangoproject.com/en/1.8/topics/auth/default/#module-django.contrib.auth.views
答案 4 :(得分:3)
与mrts的答案类似,在最近的Django中,您可以使用LoginView。
您可以通过设置title
中使用的site_title
,from django.contrib.auth.views import LoginView
urlpatterns = [
url(
r'^accounts/login/$',
LoginView.as_view(
template_name='admin/login.html',
extra_context={
'title': 'Login',
'site_title': 'My Site',
'site_header': 'My Site Login'},
name='login'),
]
等模板上下文来进一步自定义模板,以便它看起来不像管理员登录。
^5[1-5]\d{14}$
答案 5 :(得分:0)
又快又脏。
例如,假设您正在开发一个需要登录功能但未实现自己的可重用应用程序。
如果暂时不想打扰自定义登录(视图,表单,模板,URL等),则只需在{{中将管理登录页面指定为LOGIN_URL
1}}(docs):
settings.py
当心:一个严重的缺点是您只能使用职员帐户(或超级用户)登录。