Python+Django ログインページ作成と設定
このブログではアフィリエイト・アドセンス広告を利用しています
当ブログでは、アドセンス・アフィリエイト広告を掲載しています。
消費者庁が発表しているルールに沿って記事を作成していますが、問題のある表現を見つけた際にはご連絡ください。
Djangoでログインページを作成し、表示されるように各種プロジェクトファイルを追加・修正していきます。
目次(読みたいところへジャンプ!)
ログインページを作成するまでの手順
必要なモジュールのインストール
$ 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