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

python3 Djyango 超初心者の備忘録

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. ログインページの作成と設定(今回の記事)

Related Posts