Django中是否有内置的登录模板?

sta*_*005 57 django templates login

我想让用户在看到页面之前登录.是否有用户登录的内置模板,以便我不必编写自己的登录页面?

Bra*_*ant 46

是.你可以在这里阅读所有相关内容:https://docs.djangoproject.com/en/1.8/topics/auth/default/#django.contrib.auth.decorators.login_required ...但这里有一些要点:

  • 添加'django.contrib.auth.middleware.AuthenticationMiddleware'MIDDLEWARE_CLASSESsettings.py
  • 添加'django.contrib.auth"和'django.contrib.contenttypes'INSTALLED_APPSsettings.py
  • django.contrib.auth.views.login为视图设置登录的URL ,例如url(r'^login/$', 'django.contrib.auth.views.login',name="my_login")
  • 在您的视图中,包括login_required装饰器并在视图之前添加它.例如...

views.py ...

from django.contrib.auth.decorators import login_required

@login_required
def home(request):
  return HttpResponse('Home Page')
Run Code Online (Sandbox Code Playgroud)

默认情况下,您将模板放入其中my_template_directory/registration/login.html.有关该模板的更多信息可以在本文开头的链接中找到.

  • 谢谢大家.我通过使用普通用户的管理员登录/注销模板解决了这个问题.#内置登录/退出模块(r'^ accounts/logout/$','django.contrib.auth.views.logout'),(r'^ accounts/login/$','django.contrib .auth.views.login',{'template_name':'admin/login.html'}),(r'^ accounts/$','django.views.generic.simple.redirect_to',{'url':' /'}),(r'^ accounts/profile/$','django.views.generic.simple.redirect_to',{'url':'/'}), (39认同)
  • "模板" - 什么模板?这正是问题所在.根据您提供的链接,没有用于身份验证视图的默认模板,如果您不提供,则会出现错误. (6认同)
  • 您是否介意在登录/注销视图中更好地解释您在django管理模板上使用了什么? (2认同)

mrt*_*rts 32

正如作者的评论中所提到的,最简单的方法是将以下行添加到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),
)
Run Code Online (Sandbox Code Playgroud)

据我所知,除非需要用户配置文件管理,否则不需要添加r'^accounts/$'r'^accounts/profile/$'URL.

正如意见建议的@mmatt,设置LOGIN_REDIRECT_URL = '/'settings.py避免默认重定向到/accounts/profile/登录后.请参阅Django设置文档中的LOGIN_REDIRECT_URL.

这应该仍然适用于Django 2.x使用path而不是url适当.

  • 在`URL字符串视图参数支持()`(https://docs.djangoproject.com/en/1.11/releases/1.10/#features-removed-in-1-10)已被使用Django 1.10除去].使用`from import django.contrib.auth.views import login`和`url(r'^ accounts/login/$',login,...`代替(和logout相似). (2认同)

Jon*_*les 14

upvoted响应由@brant在技术上是不正确.Django提供默认视图来处理登录功能,但根据文档不提供模板:

Django没有为身份验证视图提供默认模板.您应该为要使用的视图创建自己的模板.每个视图中都记录了模板上下文,请参阅所有身份验证视图.


Yus*_*hio 7

与 mrts 的回答类似,在最近的 Django 中,您可以使用LoginView。您可以通过设置模板背景一样进一步自定义模板titlesite_title等等,如用于管理/ base.html文件,这样它看起来并不像一个管理员登录。

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'),
]
Run Code Online (Sandbox Code Playgroud)


Sha*_*esh 5

如果您想快速启动和运行,我建议使用提供的 URLConf。

例如:

urlpatterns = [
    url('^', include('django.contrib.auth.urls'))
]
Run Code Online (Sandbox Code Playgroud)

请参阅 django 文档中的更多详细信息:https://docs.djangoproject.com/en/1.8/topics/auth/default/#module-django.contrib.auth.views