LoginSignup
1
0

More than 1 year has passed since last update.

DjangoとDocker練習O8o2o0 ログインしていないと見れないページ,およびログアウト機能を付けよう!

Last updated at Posted at 2022-03-13

サンプルを見る

📖 この記事のゴール:ログインが必要なページ
📖 この記事のゴール:ログアウト

目標

ログインしているユーザーには 見え、
そうでないユーザーには ログイン ページが出るような
ページを作る練習をする

詳細

とりあえず、見えるページは、以下のように 自分のユーザー情報を出す

Login user.

* id: 1
* username: Muzudho
* email: admin@example.com

情報

この記事は Lesson 1. から順に全部やってこないと ソースが足りず実行できないので注意されたい

What is This is
Lesson 1. 📖 DjangoとDockerでゲーム対局サーバーを作ろう!

この記事のアーキテクチャ:

What is This is
OS Windows10
Container Docker
Auth allauth
Editor Visual Studio Code (以下 VSCode と表記)

ディレクトリ構成を抜粋すると 以下のようになっている

    ├── 📂 src1
    │   ├── 📂 apps1
    │   │   ├── 📂 accounts_vol1o0        # アプリケーション
    │   │   ├── 📂 portal_v1                    # アプリケーション
    │   │   └── 📂 practice_vol1o0                  # アプリケーション
    │   ├── 📂 data
    │   ├── 📂 project1                         # プロジェクト名
    │   │   ├── 📄 __init__.py
    │   │   ├── 📄 asgi.py
    │   │   ├── 📄 settings_secrets_example.txt
    │   │   ├── 📄 settings.py
    │   │   ├── 📄 urls_accounts_vol1o0.py
    │   │   ├── 📄 urls_practice.py
    │   │   ├── 📄 urls.py
    │   │   └── 📄 wsgi.py
    │   ├── 📂 project2
    │   ├── 🐳 docker-compose-project2.yml
    │   ├── 🐳 docker-compose.yml
    │   ├── 🐳 Dockerfile
    │   ├── 📄 manage.py
    │   └── 📄 requirements.txt
    ├── 📂 src1_meta
    │   ├── 📂 data
    │   │   └── 📄 urls.csv
    │   └── 📂 scripts
    │       └── 📂 auto_generators
    │           └── 📄 urls.py
    └── 📄 .gitignore

手順

Step O8o2o0g1o0 Dockerコンテナの起動

👇 (していなければ) Docker コンテナを起動しておいてほしい

# docker-compose.yml ファイルを置いてあるディレクトリーへ移動してほしい
cd src1

# Docker コンテナ起動
docker-compose up

Step O8o2o0g2o0 画面作成 - login_required/ver1o0.html ファイル

👇 以下のファイルを新規作成してほしい

    └── 📂 src1                 # あなたの開発用ディレクトリー。任意の名前
        └── 📂 apps1
            └── 📂 practice_vol1o0              # アプリケーション
                └── 📂 templates
                    └── 📂 practice_vol1o0              # アプリケーションと同名
                        └── 📂 login_required
👉                          └── 📄 ver1o0.html
<html>
    <body>
        Login user.
        <ul>
            <li>id: {{ id }}</li>
            <li>username: {{ username }}</li>
            <li>email: {{ email }}</li>
        </ul>
    </body>
</html>

Step O8o2o0g3o0 ビュー作成 - login_required フォルダー

👇 以下のファイルを新規作成してほしい

    └── 📂 src1
        └── 📂 apps1
            └── 📂 practice_vol1o0              # アプリケーション
                └── 📂 templates
                    ├── 📂 practice_vol1o0
                    │   └── 📂 login_required
👉                  │       └── 📄 ver1o0.html
                    └── 📂 views
                        └── 📂 login_required
                            └── 📂 ver1o0
👉                              └── 📄 __init__.py
# BOF O8o2o0g3o0

from django.contrib.auth import logout
from django.contrib.auth.decorators import login_required
from django.shortcuts import redirect, render


class LoggingIn():
    """O8o2o0g3o0 練習1.0巻 ログイン中"""

    # Template path
    login_required_tp = "practice_vol1o0/login_required/ver1o0.html"
    #                    ------------------------------------------
    #                    1
    # 1. src1/apps1/practice_vol1o0/templates/practice_vol1o0/login_required/ver1o0.html を取得
    #                                         ------------------------------------------

    # 👇 このデコレーターを付けると、ログインしていないなら、 settings.py の LOGIN_URL で指定した URL に飛ばします。
    # インスタンスのメソッドや、クラスメソッドには付けられません。
    # 第一引数が self や clazz でないことに注意してください
    @login_required
    def render(request):
        """描画"""
        return loggingIn_render(request, LoggingIn.login_required_tp)


class LoggingOut():
    """O8o2o0g3o0 練習1.0巻 ログアウト中"""

    def render(request):
        """描画"""
        return loggingOut_render(request)


# 以下、関数


def loggingIn_render(request, login_required_tp):
    """O8o2o0g3o0 ログイン中 - 描画

    Parameters
    ----------
    request : object
        リクエスト
    login_required_tp : str
        Template path
    """

    user = request.user
    context = {
        "id": user.id,
        "username": user.username,
        "email": user.email,
    }
    return render(request, login_required_tp, context)


def loggingOut_render(request):
    """O8o2o0g3o0 ログアウト中 - 描画"""
    logout(request)  # Django の認証機能のログアウトを使う
    return redirect('home')  # ホームに戻る

# EOF O8o2o0g3o0

Step O8o2o0g4o0

Merged to O8o2o0g4o1o0

Step O8o2o0g4o1o0 ルート編集 - urls.csv ファイル

👇 以下の既存ファイルの末尾に追記してほしい

    ├── 📂 src1
    │   └── 📂 apps1
    │       └── 📂 practice_vol1o0              # アプリケーション
    │           └── 📂 templates
    │               ├── 📂 practice_vol1o0
    │               │   └── 📂 login_required
    │               │       └── 📄 ver1o0.html
    │               └── 📂 views
    │                   └── 📂 login_required
    │                       └── 📂 ver1o0
    │                           └── 📄 __init__.py
    └── 📂 src1_meta
        └── 📂 data
👉          └── 📄 urls.csv
...略... file,path,name,comment,module,class,alias,method
...略...


../src1/project1/urls_practice_vol1o0_autogen.py,practice/vol1.0/login-required/ver1.0/,,"O8o2o0g4o1o0 練習1.0巻 ログイン必須ページでログイン中1.0版",apps1.practice_vol1o0.views.login_required.ver1o0,LoggingIn,,render
../src1/project1/urls_practice_vol1o0_autogen.py,practice/vol1.0/logout/ver1.0/,,"O8o2o0g4o1o0 練習1.0巻 ログイン必須ページでログアウト中1.0版",apps1.practice_vol1o0.views.login_required.ver1o0,LoggingOut,,render

Step O8o2o0g4o2o0 ルート編集 - コマンド打鍵

👇 以下のコマンドを打鍵してほしい

cd ../src1_meta
python -m scripts.auto_generators.urls
cd ../src1
docker-compose restart
  • ディレクトリーは、がんばって移動してほしい
  • スクリプトについて See also: O3o2o_1o0g2o0
  • 設定ファイルを変更したら、サーバーの再起動が必要

Step O8o2o0g5o0 Webページへアクセス

👇 ログインしているときは、ログイン情報が見えます。
  ログインしていないときに(ページを開いたり、画面を再更新したりすると)、ログイン画面が出ます

📖 http://localhost:8000/practice/vol1.0/login-required/ver1.0/

👇 ログアウトするにはこちら

📖 http://localhost:8000/practice/vol1.0/logout/ver1.0/

Step O8o2o0g6o0 ランチャーのリンク用データ追加 - finished-lessons.csv ファイル

👇 以下の既存ファイルの最終行に追記してほしい

    └── 📂 src1
        ├── 📂 apps1
        │   ├── 📂 portal_v1                # アプリケーション
        │   │   └── 📂 data
👉      │   │       └── 📄 finished-lessons.csv
        │   └── 📂 practice_vol1o0              # アプリケーション
        │       └── 📂 templates
        │           ├── 📂 practice_vol1o0
        │           │   └── 📂 o1o0
        │           │       └── 📄 login_required.html
        │           └── 📂 views
        │               └── 📂 o1o0
        │                   └── 📄 v_login_required.py
        └── 📂 project1
            ├── 📄 urls_practice.py
            └── 📄 urls.py

👇 冗長なスペース,冗長なダブルクォーテーション,末尾のカンマ は止めてほしい

/practice/vol1.0/login-required/ver1.0/,O8o2o0g6o0 練習1.0巻 ログイン必須ページ1.0版
/practice/vol1.0/logout/ver1.0/,O8o2o0g6o0 練習1.0巻 ログアウト1.0版

👇 ランチャーにリンクが追加されていることを確認してほしい

📖 http://localhost:8000/

次の記事

📖 Djangoでログインしていない人には見えず、ログインしている人には見えるボタンを作ろう!

関連する記事

📖 Using the Django authentication system
📖 Djangoメモ(25) : login_requiredデコレータでビューをログイン済みユーザーのみに制限

User関連

📖 Django check if a related object exists error: RelatedObjectDoesNotExist

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0