他們說,當你記錄你的學習、奮鬥等等時,你會獲得更多知識。因此,從2024年7月15日這一天開始,我決定透過開發部落格應用程式來記錄我學習Django的進度,而不使用ChatGPT、Gemini和其他可以產生程式碼的AI聊天機器人。
過去幾年,我一直在 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 步:新增網址
然後我新增了用戶的網址。首先,我在 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 中看到的,我使用 user:login 而不是 templates/html.py。我了解到,有了這個,如果我要創建一個大型項目,我可以輕鬆確定我將視圖功能重定向到哪個應用程式。
這週,我遇到了一些挑戰,例如:
但是,我學到了很多關於 Django 的基礎知識以及如何建立專案的知識。我也意識到徹底閱讀文件的重要性。好吧,我仍然無法停止使用 ChatGPT 來詢問我遇到的錯誤問題,但我會提示它,這樣它就不會給我範例程式碼,而只是簡單的解釋。
我計畫:
以上是我的部落格應用程式入門週的詳細內容。更多資訊請關注PHP中文網其他相關文章!