
Django 공부하기 ✨
views.py & url.py 관계는?

(1) views.py란 무엇인가?
- Client에서 보낸 Request에 대해서 Response을 보내주는 역할을 한다.
- 세부적으로는 View는 Django 필요한 데이터를 모델에서 가져와서 적절히 가공하여 웹 페이지 결과를 만들도록 한다.
(1) model 작성하기
- view.py를 작성하기 전에 model.py를 만들어 makemigration과 migrate가 먼저 선행되어야 한다.
// 점프 투 장고를 통해 진행하고 있는 예제
from django.db import models
# 질문 모델 정의
class Question(models.Model):
# 질문 주제를 문자열로 저장, 최대 길이는 200자
subject = models.CharField(max_length=200)
# 질문 내용을 텍스트 필드로 저장.
content = models.TextField()
# 질문이 생성된 날짜와 시간을 저장.
create_date = models.DateTimeField()
def __str__(self):
# 객체를 문자열로 표현할 때 주제를 반환.
return self.subject
# 답변 모델 정의
class Answer(models.Model):
# 답변이 어떤 질문에 대한 것인지를 외래 키로 연결, 연결된 질문이 삭제되면 답변도 함께 삭제.
question = models.ForeignKey(Question, on_delete=models.CASCADE)
# 답변 내용을 텍스트 필드로 저장.
content = models.TextField()
# 답변이 생성된 날짜와 시간을 저장.
create_date = models.DateTimeField()
(2) view 작성하기
- views.py에 코드를 작성한다.
// 점프 투 장고를 통해 진행하고 있는 예제
from django.shortcuts import render, get_object_or_404, redirect
from django.utils import timezone
from .models import Question
from .forms import QuestionForm
# 질문 목록을 보여주는 뷰 함수
def index(request):
# 질문을 최신순으로 정렬하여 가져옴.
question_list = Question.objects.order_by('-create_date')
# 질문 목록을 템플릿에 전달할 context 변수를 생성.
context = {'question_list' : question_list}
# question_list.html 템플릿을 렌더링하여 화면에 표시.
return render(request, 'pybo/question_list.html', context)
# 질문 상세 페이지를 보여주는 뷰 함수
def detail(request, question_id):
# 주어진 질문 ID에 해당하는 질문 객체를 가져오거나 404 에러를 반환.
question = get_object_or_404(Question, pk=question_id)
# 질문 상세 정보를 템플릿에 전달할 context 변수를 생성.
context = {'question' : question}
# question_detail.html 템플릿을 렌더링하여 화면에 표시.
return render(request, 'pybo/question_detail.html', context)
(2) urls.py란 무엇인가?
- 아래와 같이 URL 패턴 정의를 통해 Django는 클라이언트 요청을 적절한 뷰 함수로 라우팅하고, 뷰 함수에서 요청을 처리한 후 적절한 응답을 반환한다. 이렇게 URL 패턴을 설정함으로써 Django 애플리케이션은 웹 페이지 및 기능을 쉽게 확장하고 관리할 수 있게 된다.
(1) app 폴더 내 (config/urls.py)
- 프로젝트의 전체 URL 구성을 정의하며, urlpatterns 리스트에 URL 패턴을 추가하여 뷰 함수와 매핑시킨다. 쉽게 말해, 각 패턴은 특정 URL로 들어왔을 때 실행될 뷰 함수를 지정한다.
// 점프 투 장고를 통해 진행하고 있는 예제 (config/urls.py)
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('pybo/', include('pybo.urls')),
]
(2) 프로젝트 폴더 내 (pybo/urls.py)
- 'pybo' 애플리케이션의 URL 패턴을 정의한다.
- app_name 변수를 사용하여 URL 패턴의 네임스페이스를 정의하고, urlpatterns 리스트에 URL 패턴을 추가한다.
// 점프 투 장고를 통해 진행하고 있는 예제 (pybo/urls.py)
from django.urls import path
from . import views
app_name = 'pybo'
urlpatterns = [
path('', views.index, name='index'), # URL 별칭 사용(name='index')
path('<int:question_id>/', views.detail, name='detail'), # URL 별칭 사용(name='detail')
path('answer/create/<int:question_id>/', views.answer_create, name='answer_create'),
path('question/create/', views.question_create, name='question_create'),
]
(3) 예시를 통해 url.py 정리하기
| config/urls.py | pybo/urls.py | 최종 URL | ||
|---|---|---|---|---|
'pybo/' |
+ | '' |
= | 'pybo/' |
'pybo/' |
+ | 'question/create/' |
= | 'pybo/question/create/' |
'Study > Django' 카테고리의 다른 글
| [Django] 폼 (12) (0) | 2023.09.15 |
|---|---|
| [Django] 스태틱 (11) (0) | 2023.09.14 |
| [Django] settings.py (0) | 2023.09.13 |
| [Django] 데이터 저장 (10) (0) | 2023.09.12 |
| [Django] URL 별칭 (9) (0) | 2023.09.12 |