0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Django 初期開発

Posted at

conda を使用して Django プロジェクトを作成するには、以下の手順を行ってください。

新しい Conda 環境を作成: Django 開発用の新しい環境を作成し、Python バージョンを指定します。

conda create -n my_django_env python=3.10

環境を有効化: 作成した環境を有効化します。

conda activate my_django_env

Django をインストール: 環境がアクティブな状態で Django をインストールします。

conda install -c conda-forge django

Django プロジェクトを作成: インストールが完了したら、django-admin コマンドを使用してプロジェクトを作成します。

image.png

django-admin startproject myproject

プロジェクトフォルダに移動: プロジェクトフォルダに移動して、開発を始めます。

cd myproject

これで、conda 環境内で Django プロジェクトを作成し、開発を始める準備が整いました。

image.png

Django プロジェクト内で新しいアプリケーション(accounts)を作成

bash

conda create -n my_django_env python=3.10

python manage.py startapp accounts というコマンドは、Django プロジェクト内で新しいアプリケーション(accounts)を作成するためのものです。

詳しい説明:
python manage.py: Django プロジェクト内で使用する管理用のスクリプトです。Django プロジェクトにおいて、様々なコマンドを実行するために使用します(例: サーバーの起動、マイグレーションの実行、アプリの作成など)。

startapp accounts: startapp は新しいアプリを作成するためのコマンドです。accounts は新しく作成するアプリケーションの名前です。この名前は自由に設定できますが、今回はユーザー管理に関連する機能を実装するので accounts という名前を使用しています。

アプリとは?
Django ではプロジェクトは複数のアプリケーションから構成されます。アプリケーションは特定の機能や目的を持ったまとまりで、プロジェクト内で再利用可能です。例えば、ユーザー管理用のアプリ、ブログ機能用のアプリなどを個別に作成し、プロジェクト内で組み合わせて使用できます。

このコマンドの実行後に行われること:
このコマンドを実行すると、Django プロジェクトのディレクトリ内に accounts という新しいフォルダが作成され、その中に以下のような初期ファイルが自動的に生成されます。

init.py:Python パッケージとして認識されるためのファイル。
admin.py:管理画面に関連する設定を行うためのファイル。
apps.py:アプリケーションの構成を定義するファイル。
models.py:データベースのモデルを定義するためのファイル。
tests.py:テストコードを書くためのファイル。
views.py:ビュー関数を記述するためのファイル。
このアプリを作成することで、ユーザー関連の処理(新規登録、ログイン、ログアウトなど)を accounts アプリ内で実装できるようになります。

image.png

django_1/myproject ディレクトリに Django プロジェクトがあり、その中に accounts というアプリが作成されています。これにより、ユーザー関連の機能を実装する準備が整っています。ここからの説明では、accounts アプリで新規ユーザー登録とログインページを作成するために行うべき具体的なステップを、さらにわかりやすく説明します。

accounts アプリで新規ユーザー登録とログインページを作成

  1. accounts アプリの役割

accounts アプリは、ユーザー関連の機能(新規登録、ログイン、ログアウトなど)を担当します。各アプリは独立して機能を持ち、プロジェクト全体で利用できる構造になっています。

ここから実施予定

  1. 次に行うべきこと

a. accounts/views.py の編集

ビューは、ユーザーがリクエストを送ったときに返されるページや処理を定義します。

ここでは、新規登録ページとログインページを表示・処理するビューを作成します。

コードの説明:

register 関数: ユーザーが新規登録するための処理を担当。
user_login 関数: ユーザーがログインするための処理を担当。

以下は views.py に追加するコードです。

from django.shortcuts import render, redirect
from django.contrib.auth import login, authenticate
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm

def register(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            user = form.save()
            login(request, user)
            return redirect('home')  # ホームページにリダイレクト。必要に応じて変更。
    else:
        form = UserCreationForm()
    return render(request, 'accounts/register.html', {'form': form})

def user_login(request):
    if request.method == 'POST':
        form = AuthenticationForm(data=request.POST)
        if form.is_valid():
            user = form.get_user()
            login(request, user)
            return redirect('home')  # ホームページにリダイレクト。必要に応じて変更。
    else:
        form = AuthenticationForm()
    return render(request, 'accounts/login.html', {'form': form})

b. テンプレートファイルの作成
テンプレートは HTML ページのようなものです。Django では、
テンプレート内に Python コードを埋め込んで動的なページを作成できます。

プロジェクト内に templates/accounts/ フォルダを作成してください。
templates/accounts/ フォルダの中に、register.html と login.html ファイルを作成します。

register.html の例:

html

<h2>Register</h2>
<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Register</button>
</form>

login.html の例:

html

<h2>Login</h2>
<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Login</button>
</form>

c. URL ルーティングの設定

Django の URL ルーティングは、特定の URL にアクセスしたときにどのビュー関数を呼び出すかを決定する役割を持っています。これは、ユーザーがウェブサイトで異なるページにアクセスできるようにするための仕組みです。初心者の方でも理解しやすいように、具体的な説明をします。

URL ルーティングの基本

Django の URL ルーティングは、URL パターンをビュー関数と結び付ける設定です。例えば、ユーザーが /accounts/register/ にアクセスしたときに register ビュー関数を呼び出して登録ページを表示するように設定します。

accounts アプリ内に urls.py を作成
アプリケーションごとに urls.py を作成し、そのアプリのビュー関数と URL を結びつけます。

accounts/urls.py を作成し、ルーティングを定義します。

# 必要なモジュールをインポート
from django.urls import path  # path 関数をインポート
from .views import register, user_login  # 自分のアプリ内のビュー関数をインポート

# URLパターンのリストを定義
urlpatterns = [
    path('register/', register, name='register'),  # /accounts/register/ にアクセスすると register 関数を呼び出す
    path('login/', user_login, name='login'),  # /accounts/login/ にアクセスすると user_login 関数を呼び出す
]

path 関数の説明:
path('register/', register, name='register') は、/accounts/register/ にアクセスしたときに register ビュー関数を呼び出す設定です。
name='register' は、この URL パターンに名前を付けています。これにより、テンプレート内でこの URL を名前で参照できます。

プロジェクト全体でのルーティング設定

プロジェクトの urls.py ファイルで、accounts アプリの urls.py をインクルードして、プロジェクト全体で認識されるようにします。

myproject/urls.py ファイルを開いてください。
accounts.urls をインクルードするために、以下のようにコードを編集します。
myproject/urls.py の内容:

python

from django.contrib import admin  # Django の管理サイト用
from django.urls import path, include  # URL 設定用の関数をインポート

# URLパターンのリスト
urlpatterns = [
    path('admin/', admin.site.urls),  # 管理画面への URL 設定
    path('accounts/', include('accounts.urls')),  # /accounts/ 以下の URL は accounts/urls.py に委任
]

include 関数の説明:
include('accounts.urls') は、accounts アプリ内の urls.py をプロジェクトの urls.py にインクルードします。これにより、/accounts/ で始まる URL パターンはすべて accounts/urls.py に委ねられます。

include 関数は、Django の URL ルーティングでとても重要な役割を果たしますが、最初は少しわかりづらいかもしれません。具体的に、include 関数がどのように動作するかを説明します。

include の基本的な役割

include 関数は、Django の URL ルーティングにおいて「別の URL 設定ファイルを読み込む」という役割を持っています。プロジェクトの中にある複数のアプリケーションそれぞれに独自の urls.py を持たせ、その URL 設定をプロジェクト全体に追加するために使います。

これにより、Django プロジェクト全体で URL のルーティングを管理しやすくし、各アプリごとに URL のパターンを分けて記述できます。

include の具体例

例えば、accounts というアプリにユーザー登録やログインのページを持つ場合、accounts アプリ内にある urls.py にそれらの URL 設定をまとめて記述できます。そして、プロジェクト全体の URL ルーティングを管理する myproject/urls.py で accounts の URL 設定を「インクルード(読み込む)」することで、accounts 内の URL パターンをプロジェクト全体に適用します。

render を使ったビュー関数の説明
Django の render 関数は、指定されたテンプレートを HTML ページとして表示します。テンプレート内で表示したいデータも一緒に渡すことができます。

register ビュー関数での render の使い方:

def register(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            user = form.save()
            login(request, user)
            return redirect('home')  # ユーザーが登録後にリダイレクトするページを指定
    else:
        form = UserCreationForm()  # フォームを空の状態で表示
    return render(request, 'accounts/register.html', {'form': form})  # 'register.html' をレンダリングして表示

render(request, 'accounts/register.html', {'form': form}) の説明:
request: クライアントからの HTTP リクエスト。
'accounts/register.html': 表示するテンプレートのパス。
{'form': form}: テンプレートに渡すコンテキスト(ここではフォーム)。

user_login ビュー関数での render の使い方:

def user_login(request):
    if request.method == 'POST':
        form = AuthenticationForm(data=request.POST)
        if form.is_valid():
            user = form.get_user()
            login(request, user)
            return redirect('home')
    else:
        form = AuthenticationForm()  # フォームを空の状態で表示
    return render(request, 'accounts/login.html', {'form': form})  # 'login.html' をレンダリングして表示

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?