やったこと

  1. 前回の不具合修正。主にタイポ。
  2. ログアウト機能の実装
  3. サインアップ機能の追加
accounts/urls.py
from django.urls import path
from accounts import views

urlpatterns = [
    path('login/', views.LoginView.as_view(),name='account_login'),
    path('logout/', views.LogoutView.as_view(),name='account_logout'),
    path('signup/', views.SignupView.as_view(),name='account_signup'),
]


accounts/template/accounts/logout.html
{% extends "app/base.html" %}
<!-- {% load widget_tweaks %} -->

{% block content %}
<div class="card card-auth my-5 mx-auto">
    <div class="card-body">
        <p class="card-title text-center">
            ログアウトしますか?
        <form method="post" class="form-auth">
            {% csrf_token %}
            <div class="text-center">
                <button class="btn btn-warning" type="submit">ログアウト</button>
            </div>
        </form>
        </p>
    </div>
</div>


{% endblock %}

accounts/template/accounts/signup.html
{% extends "app/base.html" %}
{% load widget_tweaks %}

{% block content %}
    <div class="card card-auth my-5 mx-auto">
        <div class="card-body">
            <h5 class="card-title text-center">サインアップ</h5>
            <form method="post" class=" form-auth">
                {% csrf_token %}
                <div class="form-label-group">
                    {% render_field form.username class="form-control" placeholder="ユーザー名" %}
                </div>
                <div class="form-label-group">
                    {% render_field form.email class="form-control" placeholder="メールアドレス" %}
                </div>
                <div class="form-label-group">
                    {% render_field form.password1 class="form-control" placeholder="パスワード" %}
                </div>
                <div class="form-label-group">
                    {% render_field form.password2 class="form-control" placeholder="パスワード(確認)") %}
                </div>
                <div class="text-center">
                    <button class="btn btn-primary" class="submit">サインアップ</button>
                </div>
            </form>
        </div>
    </div>


{% endblock %}
app/templates/app/base.html の変更箇所
        <div class="container">
            <a class="navbar-brand" href="/">ブログ</a>
            <ul class="navbar-nav ml-auto">
                <li class="nav-item">
                    <a class="nav-link" href="/">ホーム</a>
                </li>
                {% if user.is_authenticated %}
                    <li class="nav-item">
                        <a class="nav-link" href="{% url 'post_new' %}">投稿</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link" href="{% url 'account_logout' %}">ログアウト</a>
                    </li>
                {% else %}
                    <li class="nav-item">
                        <a class="nav-link" href="{% url 'account_signup' %}">サインアップ</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link" href="{% url 'account_login' %}">ログイン</a>
                    </li>
                {% endif %}
            </ul>
        </div>
accounts/views.py
from operator import is_
from django.shortcuts import render, redirect
from allauth.account import views

class LoginView(views.LoginView):
    template_name = 'accounts/login.html'

class LogoutView(views.LogoutView):
    template_name = 'accounts/logout.html'

    def post(self, *args, **kwargs):
        if self.request.user.is_authenticated:
            self.logout()
        return redirect('/')

class SignupView(views.SignupView):
    template_name = 'accounts/signup.html'

わかったこと
  1. 画面遷移はviews.pyでクラスを作成しviewを継承すればいい
  2. ログイン、ログアウト、サインアップなどの特定の機能の画面遷移はそれ専用のサブクラスがありそれを継承する
  3. viewクラスのselfにはrequest,logoutなどの機能がある
  4. views.pyで作ったクラスにはテンプレートを指定する”template_name”のプロパティがあり、そこにテンプレートのパス指定する。
つぎやること
  1. ひとまずこのシリーズは終わり
  2. ブログサイトのデプロイをGAEでやりたい
  3. 画像を載せるブログもあるようなので、それもやってみたい

コメント

このブログの人気の投稿

Django入門ブログ構築 2日目

Django入門ブログ構築 1日目