自分の学びや苦労などを文書化すると、より多くの知識が得られると言われています。そこで、2024 年 7 月 15 日のこの日から、ChatGPT、Gemini、およびコードを生成できるその他の AI チャットボットを使用せずにブログ アプリを開発することで、Django の学習の進捗状況を文書化することにしました。
ここ数年、私は ChatGPT を使用してコードを生成してアプリケーションを作成してきました。結果は素晴らしく、アプリケーションを構築することができました。しかし、私は ChatGPT に依存しすぎており、プログラミングの概念を深く理解できていません。アプリケーションを開発するときにChatGPTの助けがないと、ゼロからコーディングする方法がわからず役に立たないと感じます。したがって、この時点から、このシンプルなブログ アプリを構築するために、ドキュメントを読んで理解することに全力を尽くします。
今週、私は簡単なブログ アプリを作成することから Django を学ぶ旅を始めました。私の目標は、プロセスの各ステップを文書化し、私の経験と学習を示すことです。
プロジェクトのセットアップ
ステップ 1: 仮想環境を作成する
まず、プロジェクトの依存関係を管理するための仮想環境を作成しました。
python -m venv <myenv> source myenv/bin/activate # On Windows use `myenv\Scripts\activate`
ステップ 2: Django をインストールし、新しい Django プロジェクトを作成する
次に、django をインストールし、blog_app
という新しいプロジェクトを作成します。
pip install django # Create new django project django-admin startproject blog_app cd blog_app
ステップ 1: アプリのセットアップ
最初に作成したのは、ユーザー認証
# Either of the two django-admin startapp user python manage.py startapp user
次に、新しいアプリを settings.py の INSTALLED_APPS リストに追加しました。
ステップ 2: ユーザーのログイン フォームとサインアップ フォームを作成する
ユーザーのアプリフォルダーにforms.pyファイルを作成しました。 Django の組み込み AuthenticationForm と UserCreationForm をカスタム クラスに継承して利用します。こうすることで、後からユーザー情報をカスタマイズできると思います。
# user/forms.py from django.contrib.auth.forms import AuthenticationForm, UserCreationForm from django.forms.widgets import PasswordInput, TextInput from django.forms.fields import EmailField from django import forms class LoginForm(AuthenticationForm): username = forms.CharField(widget=TextInput()) password = forms.CharField(widget=PasswordInput()) class SignUpForm(UserCreationForm): username = forms.CharField(max_length=150, required=True) email = forms.EmailField(required=True) password1 = forms.CharField(widget=forms.PasswordInput, required=True) password2 = forms.CharField(widget=forms.PasswordInput, required=True) def save(self, commit=True): user = super().save(commit=False) user.email = self.cleaned_data["email"] if commit: user.save() return user
ステップ 3: views.py を作成する
次に、ホーム、ログイン、ログアウト、サインアップのビューを作成しました。このプロジェクトでは html、css、javascript をどのように作成したかについては説明しません。確認したい場合は、以下に私の Github リポジトリをリンクします。
# user/views.py from django.shortcuts import render, redirect from django.contrib.auth.decorators import login_required from django.contrib.auth import logout, authenticate, login from .forms import * from django.contrib.auth.models import auth # I use the decorator `login_required` in order for the application to navigate to the login page if the user has not login or sign up yet. @login_required def homeView(request): return render(request, "home.html") def loginView(request): ''' First, I initialized my custom LoginForm then it will check the request of the user. The user will then input it's username and password. Then it will check if the form is valid then it will get the user's input credential and it will authenticate it by using the built-in Django `authenticate` method. It will then check if the user correctly input it's credential and it will call the `login` method of Django and redirect the user to the homepage. ''' form = LoginForm() if request.method == "POST": form = LoginForm(request, data=request.POST) if form.is_valid(): username = request.POST.get("username") password = request.POST.get("password") user = authenticate(request, username=username, password=password) if user is not None: auth.login(request, user) return redirect("user:home") return render(request, "login.html", {"form": form}) def signupView(request): ''' We will get the request from the user and check if the form is valid the we wills ave the user information in our SignUpForm ''' if request.method == "POST": form = SignUpForm(request.POST) if form.is_valid(): form.save() return redirect("user:login") else: form = SignUpForm() return render(request, "signup.html", {"form": form}) def logoutView(request): ''' I use the Django built-in `logout` method to logut the user ''' logout(request) return redirect("user:login")
ステップ 4: URL を追加しました
次に、ユーザーの URL を追加しました。まず、blog_app/urls.py に home/empty URL を追加しました。
# blog_app/urls.py from django.contrib import admin from django.urls import path, include urlpatterns = [ path("", include("user.urls", "user")), path("admin/", admin.site.urls), ]
次に、ユーザー ディレクトリに urls.py を追加しました。
# user/urls.py from django.urls import path, include from .views import * app_name = "user" urlpatterns = [ path("", homeView, name="home"), path("signup/", signupView, name="sign-up"), path("login/", loginView, name="login"), path("logout/", logoutView, name="logout"), ]
変数 app_name を作成し、ユーザーを割り当てました。ここでは、上記の views.py でわかるように、templates/html.py の代わりに user:login を使用しています。これで、大規模なプロジェクトを作成する場合に、ビューの機能をどのアプリにリダイレクトするかを簡単に判断できることが分かりました。
今週、私は次のようないくつかの課題に遭遇しました。
しかし、Django の基本とプロジェクトの構成方法については多くのことを学びました。また、ドキュメントを徹底的に読むことの重要性も認識しています。そうですね、発生したエラーについて質問するために ChatGPT を使用することをやめることができませんが、コード例を表示せず、単純な説明だけを表示するようにプロンプトを表示します。
次のことを計画しています:
以上がブログ アプリを始める週の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。