見出し画像

【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 %}

めっちゃ疲れた。何時間やり続けてたんだ…
今日はここまで。

あなたによって僕は生かされている。 私もあなたを生かせられますように。