web-dev-qa-db-ja.com

Djangoに組み込みのログインテンプレートはありますか?

ページを表示する前にユーザーにサインインさせたい。ユーザーサインイン用の組み込みテンプレートはありますか。そのため、独自のサインインページを記述する必要はありませんか。

56
stanleyxu2005

はい。これについてはすべてここで読むことができます: https://docs.djangoproject.com/en/1.8/topics/auth/default/#Django.contrib.auth.decorators.login_required ... but hereいくつかの箇条書きがあります:

  • _'Django.contrib.auth.middleware.AuthenticationMiddleware'_を_MIDDLEWARE_CLASSES_の_settings.py_に追加します
  • _'Django.contrib.auth_の_'Django.contrib.contenttypes'_に_INSTALLED_APPS_ 'と_settings.py_を追加します
  • url(r'^login/$', 'Django.contrib.auth.views.login',name="my_login")など、ビューに_Django.contrib.auth.views.login_を使用してログイン用のURLを設定します
  • ビューにlogin_requiredデコレーターを含めて、ビューの前に追加します。例えば...

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_内に配置します。このテンプレートの詳細については、この投稿の冒頭のリンクをご覧ください。

46
Brant

著者によるコメントで述べたように、これを行う最も簡単な方法は、次の行を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/$' URLの追加は、ユーザープロファイル管理が必要でない限り必要ありません。

コメントで@mmattが示唆しているように、LOGIN_REDIRECT_URL = '/'settings.pyを設定して、ログイン後の/accounts/profile/へのデフォルトのリダイレクトを回避します。 LOGIN_REDIRECT_URL in Django=設定ドキュメント。

これは、適切にpathの代わりにurlを使用してDjango 2.xでも動作するはずです。

32
mrts

@brantによる pvoted response のほとんどは技術的に間違っています。 Djangoはログイン機能を処理するためのデフォルトのビューを提供しますが、 ドキュメント ではテンプレートを提供しません:

Djangoは、認証ビュー用のデフォルトテンプレートを提供しません。使用するビュー用に独自のテンプレートを作成する必要があります。テンプレートコンテキストは各ビューで文書化されています。すべての認証ビューを参照してください。

14
Jonny Waffles

すぐに起動して実行するためのルートを取りたい場合は、提供されているURLConfを使用することをお勧めします。

例えば:

urlpatterns = [
    url('^', include('Django.contrib.auth.urls'))
]

Django documentation: https://docs.djangoproject.com/en/1.8/topics/auth/default/#module-Django.contrib.auth。 views

4
Shailesh

Mrtsの答えと同様に、最近のDjangoでは、 LoginView を使用できます。 titlesite_titleなどのテンプレートコンテキストを admin/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'),
]
3
Yushin Washio