Python+Django ログインページ作成と設定

このブログではアフィリエイト・アドセンス広告を利用しています

当ブログでは、アドセンス・アフィリエイト広告を掲載しています。
消費者庁が発表しているルールに沿って記事を作成していますが、問題のある表現を見つけた際にはご連絡ください。

Djangoでログインページを作成し、表示されるように各種プロジェクトファイルを追加・修正していきます。

目次(読みたいところへジャンプ!)

    ログインページを作成するまでの手順

    1. 必要なモジュールのインストール
    2. accountsアプリケーションのインストール
    3. settings.pyの修正
    4. templatesフォルダ作成
    5. urls.pyの修正

    必要なモジュールのインストール

    $ pip install django-bootstrap4
    $ pip install django-widgets-improved

    pipを使って、プロジェクト内に必要なモジュールをインストールしていきましょう。

    見た目を簡単に整えるために「bootstrap4」
    ログインフォームを使用するために「widgets-improved」
    の2つのモジュールをインストールします。

    accountsアプリケーションのインストール

    ターミナルから、ログイン認証用のアプリケーション「accounts」をプロジェクト内にインストールします。

    次に、ユーザ認証機能をマイグレーション(データベースにテーブルを作成することを マイグレーションという)し、テスト用のユーザーとパスワードも設定しておきます。

    $ python manage.py startapp accounts
    $ python manage.py makemigrations
    $ python manage.py migrate
    $ python manage.py createsuperuser
    ユーザー名 (leave blank to use 'sinfo'): test001
    メールアドレス: 
    Password:
    Password (again):
    Superuser created successfully.

    settings.pyの修正

    言語・タイムゾーン変更

    settings.pyファイル内の言語を日本語(ja)
    タイムゾーンを東京に修正します(Asia/Tokyo)。

    LANGUAGE_CODE = 'ja'
    TIME_ZONE = 'Asia/Tokyo'

    インストールアプリケーション追加

    インストールしたBootstrap4をINSTALLED_APPSの末尾に追加しておきます。

    INSTALLED_APPS = [
    
        'bootstrap4',
    ]

    Templatesフォルダパス指定

    Templatesフォルダへのパスも変更しておきます。

    次の手順でtemplatesフォルダをこれから作成していく複数のアプリケーション(ログイン用accounts他)で共通で使えるように、プロジェクト直下に作成します。そのため、テンプレートフォルダへのパスをBASE_DIRの直下に指定するのです。 

    TEMPLATES = [
        {
            'DIRS': [os.path.join(BASE_DIR,'templates')],
        },
    ]

    ログイン・リダイレクトパス指定

    最終行に、ログイン画面のURLパス、ログイン成功した時のリダイレクトURLパス、失敗した時のリダイレクト先URLを指定しておきます。

    LOGIN_URL = '/login' 
    LOGIN_REDIRECT_URL = '/pdfmr/top'
    LOGOUT_REDIRECT_URL='/login'

    templatesフォルダ作成

    前のステップにて、settingsに指定したtemplatesフォルダとファイルを実際に作成していきます。
    最初に、プロジェクト直下に「templates」フォルダを作成し、その中に「accounts」フォルダを作ります。
    そして、accountsフォルダ内に「login.html」ファイルを作成しましょう。

    {% load static %}
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="utf-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <title>Text001</title>
      <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
    </head>
    <body class="hold-transition login-page">
      <div class="login-box">
        <div class="login-logo">
          <b>Smics Login</b>
        </div>
        <!-- /.login-logo -->
        <div class="login-box-body">
          <p class="login-box-msg"></p>
    
          <form action="" method="POST">
            {% csrf_token %}
            {% for field in form %}
              <div class="form-group has-feedback">
                {{ field }}
              </div>
            {% endfor %}
            <div class="row">
    
              {% for error in form.non_field_errors %}
                <div class="alert alert-danger" role="alert">
                  <p>{{ error }}</p>
                </div>
              {% endfor %}
              <!-- /.col -->
              <div class="col-xs-4">
                <button type="submit" class="btn btn-primary btn-block btn-flat">Login</button>
              </div>
              <!-- /.col -->
            </div>
          </form>
        </div>
        <!-- /.login-box-body -->
      </div>
      <!-- /.login-box -->
    </body>
    </html>

    forms.pyの作成

    作成したaccountsアプリケーションフォルダ内にforms.pyファイルを新規作成していきます。

    from django.contrib.auth.forms import AuthenticationForm 
    
    
    class LoginForm(AuthenticationForm):
        """ログオンフォーム"""
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            for field in self.fields.values():
                field.widget.attrs['class'] = 'form-control'
                field.widget.attrs['placeholder'] = field.label

    urls.pyの修正

    from django.urls import path, include
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('', include('accounts.urls')),
    ]
    

    今回の作業が成功したかチェック

    runserverコマンドで実行してみましょう。

    $ python manage.py runserver

    ブラウザーで、http://127.0.0.1:8000/login/を入力し、ログイン画面が表示されたら、今回の作業は完了です。お疲れ様でした。

    参考にしたサイト

    >>>3-1 ログイン・ログアウト機能の作成(前編)|Teckpit

    今までの手順まとめ

    1. PythonとDjangoをインストール
    2. Google Cloud Platformでプロジェクト作成
    3. ログインページの作成と設定(今回の記事)

    同じカテゴリの関連記事リスト