首頁  >  文章  >  後端開發  >  我的部落格應用程式入門週

我的部落格應用程式入門週

WBOY
WBOY原創
2024-07-19 15:32:17721瀏覽

Week  Getting Started with My Blog App

他們說,當你記錄你的學習、奮鬥等等時,你會獲得更多知識。因此,從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的專案結構
  • 建立 Django 應用程式並自訂表單

但是,我學到了很多關於 Django 的基礎知識以及如何建立專案的知識。我也意識到徹底閱讀文件的重要性。好吧,我仍然無法停止使用 ChatGPT 來詢問我遇到的錯誤問題,但我會提示它,這樣它就不會給我範例程式碼,而只是簡單的解釋。

下週目標

我計畫:

  1. 設定部落格文章的管理面板
  2. 建立用於列出和顯示部落格文章的視圖和範本
  3. 實作以便使用者可以發布部落格。

請繼續關注下週的更新!

以上是我的部落格應用程式入門週的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn