>백엔드 개발 >파이썬 튜토리얼 >내 블로그 앱 시작하기 주간

내 블로그 앱 시작하기 주간

WBOY
WBOY원래의
2024-07-19 15:32:17753검색

Week  Getting Started with My Blog App

배움과 어려움 등을 기록하면 지식을 더 많이 얻을 수 있다고 합니다. 그래서 2024년 7월 15일 오늘부터 코드를 생성할 수 있는 ChatGPT, Gemini 및 기타 AI 챗봇을 사용하지 않고 블로그 앱을 개발하여 Django 학습 진행 상황을 문서화하기로 결정했습니다.

지난 몇 년 동안 저는 코드 생성을 위해 ChatGPT의 도움으로 애플리케이션을 만들어 왔고 결과는 좋았습니다. 애플리케이션을 구축할 수 있었습니다. 그러나 나는 ChatGPT에 너무 많이 의존하고 프로그래밍의 개념을 깊이 이해하지 못합니다. 애플리케이션을 개발할 때 ChatGPT의 도움 없이는 처음부터 코딩하는 방법을 모르고 쓸모가 없다고 느낍니다. 그래서 지금부터 이 Simple Blog App을 만들기 위해 최선을 다해 문서를 읽고 이해하겠습니다.

이번 주에는 간단한 블로그 앱을 만들어 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에서 볼 수 있듯이 template/html.py 대신 user:login을 사용합니다. 이를 통해 대규모 프로젝트를 만들 경우 어떤 앱에 뷰 기능을 리디렉션할지 쉽게 결정할 수 있다는 것을 배웠습니다.

도전과 교훈

이번 주에는 다음과 같은 몇 가지 문제에 직면했습니다.

  • Django의 프로젝트 구조 이해
  • Django 앱 만들기 및 양식 맞춤설정

하지만 Django의 기본과 프로젝트 구성 방법에 대해 많은 것을 배웠습니다. 또한 설명서를 철저하게 읽는 것이 중요하다는 것을 깨달았습니다. 글쎄요, 제가 만난 오류에 대해 질문하기 위해 여전히 ChatGPT를 사용하는 것을 멈출 수는 없지만 단순한 설명보다는 예제 코드를 제공하지 않도록 메시지를 표시합니다.

다음 주 목표

다음을 계획하고 있습니다.

  1. 블로그 게시물에 대한 관리자 패널 설정
  2. 블로그 게시물 나열 및 표시를 위한 보기 및 템플릿 만들기
  3. 사용자가 블로그에 글을 올릴 수 있도록 구현합니다.

다음 주 업데이트를 기대해 주세요!

위 내용은 내 블로그 앱 시작하기 주간의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.