ブログ アプリを始める週

WBOY
WBOYオリジナル
2024-07-19 15:32:17782ブラウズ

Week  Getting Started with My Blog App

自分の学びや苦労などを文書化すると、より多くの知識が得られると言われています。そこで、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 のプロジェクト構造を理解する
  • Django アプリの作成とフォームのカスタマイズ

しかし、Django の基本とプロジェクトの構成方法については多くのことを学びました。また、ドキュメントを徹底的に読むことの重要性も認識しています。そうですね、発生したエラーについて質問するために ChatGPT を使用することをやめることができませんが、コード例を表示せず、単純な説明だけを表示するようにプロンプ​​トを表示します。

来週の目標

次のことを計画しています:

  1. ブログ投稿用の管理パネルを設定します
  2. ブログ投稿をリストおよび表示するためのビューとテンプレートを作成する
  3. ユーザーがブログを投稿できるように実装します。

来週の更新をお楽しみに!

以上がブログ アプリを始める週の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。