【13日目】ログイン機能をつける(Django)
今日はDjangoで作成中のチャートアプリにログイン機能をつけていきたいと思います。
はっきり言って中身分かってないので、間違ってたら指摘してくれ。
ちゃんとプログラミング始めて13日でこれとか、なんか無謀感すごい。
0.すごいエラーが出まくった件
今日の作業を進めてる途中で、すっごいエラーが出まくった。
原因は、なにかがインストールされてなかったみたい?
よくわからんけど手順としては以下で解消できた。
Visual Studio Codeの左下のBaseってなってるとこ押して、fxappに変えた。そしたら、PyLintがインストールされてません、みたいなメッセージが出てきたので、インストールする。
これでエラー解消。
1.アカウント管理用のアプリを追加
では、さっそく本題に戻って。
以下のコマンドでアカウント管理するためのアプリ(機能)をスタートする。
python manage.py startapp accounts
2.全体のアプリの設定に追加したアプリを反映
アプリを作成したら、fxapp/fxapp/settings.pyのファイルを書き換える。
INSTALLED_APPS = [
'accounts.apps.AccountsConfig', # アカウント管理用のアプリを追加
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
3.全体のURL設定に追加したアプリのURLを追加
fxapp/fxapp/urls.pyの中身に以下の2行を変更、追加した
from django.contrib import admin
from django.urls import path, include # 変更
urlpatterns = [
path('admin/', admin.site.urls),
path('accounts/', include('django.contrib.auth.urls')), # Djangoの認証追加
]
4.templatesのフォルダを作成する
fxappの直下に新しくフォルダを作成した
fxapp/templates
5.全体の設定ファイルに追加したフォルダを反映
fxapp/fxapp/settings.pyのファイルを書き換える。
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')], # [追加]
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
6.base.html を作成する
htmlファイルの中身はコピーしただけ。
場所的には fxapp/templates/base.html
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="style.css" />
<title>{% block title %}My amazing site{% endblock %}</title>
</head>
<body>
<div id="content">
{% block content %}{% endblock %}
</div>
</body>
</html>
7.registrationのフォルダを作成する
fxapp/templatesの直下に新しくフォルダを作成した
fxapp/templates/registration
8.login.htmlを作成する
htmlファイルの中身はコピーしただけ。
場所的には fxapp/templates/registration/login.html
{% extends "base.html" %}
{% block content %}
{% if form.errors %}
<p>Your username and password didn't match. Please try again.</p>
{% endif %}
{% if next %}
{% if user.is_authenticated %}
<p>Your account doesn't have access to this page. To proceed,
please login with an account that has access.</p>
{% else %}
<p>Please login to see this page.</p>
{% endif %}
{% endif %}
<form method="post" action="{% url 'login' %}">
{% csrf_token %}
<table>
<tr>
<td>{{ form.username.label_tag }}</td>
<td>{{ form.username }}</td>
</tr>
<tr>
<td>{{ form.password.label_tag }}</td>
<td>{{ form.password }}</td>
</tr>
</table>
<input type="submit" value="login">
<input type="hidden" name="next" value="{{ next }}">
</form>
{# Assumes you setup the password_reset view in your URLconf #}
<p><a href="{% url 'password_reset' %}">Lost password?</a></p>
{% endblock %}
ちなみに一行目の{% extends "base.html" %}ってのは、
6.でつくったbase.htmlの中身を引っ張ってきてるらしい。
だから、いろんなものに共通する設定はbase.htmlに書いとけばいいそうな。
9.logged_out.htmlを作成する
場所的には fxapp/templates/registration/logged_out.html
{% extends 'base.html' %}
{% block title %}Logout{% endblock %}
{% block content %}
<h1>Logged Out</h1>
<p>Thanks for spending some quality time with the Web site today.</p>
<p><a href="{% url 'login' %}">Log in again</a></p>
{% endblock %}
めっちゃ疲れた。何時間やり続けてたんだ…
今日はここまで。
あなたによって僕は生かされている。 私もあなたを生かせられますように。