여니의 프로그래밍 study/파이썬

[Django] 프로젝트 생성하기

여니's 2021. 5. 11. 11:36

- 가상환경 만들고, django 패키지 설치 후 진행 -


1. mysite 프로젝트 생성하기 (장고 프로젝트를 담을 디렉터리 생성)

터미널에서 작업

> django-admin startproject mysite



2. pybo 앱 생성하기

>  cd mysite (mysite 디렉터리 안에서 생성할 것)

> django-admin startapp pybo


3. 서버 구동하기

python manage.py runserver

 


4. localhost:8000/pybo에 접속하기

 

404 에러 발생!

파이참 터미널 창에서도 Not Found 에러 발생한 걸 확인할 수 있다.

 

404 에러가 왜 나는 것일까..?

> 내가 요청한 페이지를 찾지 못했기 때문에 오류가 발생하는 것이다.

> 서버에서 내가 요청한 페이지를 찾지 못했으니까, 

장고가 찾을 수 있도록 처리를 해줘야한다.

 

config/urls.py 를 수정해야 한다.

이 과정을 URL 매핑을 추가한다고 한다.

urls.py 파일은 어떤 역할을 하나..?

> 페이지 요청 시 가장 먼저 호출되고 요청 URL과 뷰 함수를 1대 1로 연결해준다

뷰함수는 또 뭐지..?

> 뷰 함수는 화면을 보여주기 위한 함수이다.

 

path 함수를 이용해서 pybo/url과 views.index를 매핑!!

 

아까는 분명 localhost:8000/pybo라고 입력했는데,

위에서 포트번호를 생략하는 이유는

장고가 실행되는 환경에 따라서 포트 번호가 계속 변화하기 때문이다.

그래서 호스트명과 포트번호는 입력을 하지 않는 것

 


5. index 함수 생성하기

views.py 파일에다가!

from django.http import HttpResponse
from django.shortcuts import render

# Create your views here.
def index(request):
    return HttpResponse("안녕하세요 pybo에 오신것을 환영합니다.")

출처 https://wikidocs.net/70649

 

<정리>

1. localhost:8000/pybo 사이트로 연결시도

2. urls.py가 가장 먼저 호출되고, 미리 매핑해놓은 대로 흘러간다.

pybo/ -> views.index , 즉 index 함수가 실행된다.

3. index 함수에 입력한 문구가 웹페이지에 표기된다.

 


HttpResponse

클라이언트로부터 들어오는 모든 요청을 담고 있다.

html, 이미지, 텍스트 등 다양한 응답을 해줄 수 있다.

# 방법1
def index(request):
    return HttpResponse("안녕하세요 pybo에 오신것을 환영합니다.")
    
# 방법2
def index(request):
	response=HttpResponse()
    response.write("안녕하세요 pybo에 오신것을 환영합니다.")

pybo/ - views.index를 매핑한 것은 프로젝트의 짜임새를 전혀 고려하지 않은 것이다.

pybo와 urls.py를 따로 구성하는 방법은!?

mysite에 있는 urls.py를 pybo에도 만들어주면 된다.

 

include 함수를 import해서 수정한다.

#path('pybo/',views.index),
path('pybo/',include(pybo.urls))

> pybo/로 시작하는 페이지 요청은

모두 pybo/urls.py 파일에 있는 URL 매핑을 참고하여 처리하라는 의미이다.

하지만 현재는 mysite 폴더에 urls.py만 있지, 

pybo 폴더 안에는 없으니까

하나 생성해줘야함.

 

#pybo\urls.py

from sys import path

from django.urls import include

from mysite.pybo import admin, views

urlpatterns = [
    path('', views.index),
]

 

< 과정 정리 >

mysite\urls.py 

path('pybo/', include(pybo.urls))

 

-> 

 

pybo\urls.py

path('',views.index)

> 여기서 첫 번째 매개변수가 빈 문자열인 이유는,

이미 mysite urls.py에서 pybo/에 대한 처리를 했고,

그 이후에 pybo/urls.py 파일이 실행되었기 때문에

똑같은 작업을 2번 이상 할 필요 없어서 생략함

그래서 빈 문자열이니까, 첫 번째 매핑으로 뷰 함수를 요청!

 

->

 

pybo\views

index 함수 실행

 


참고 출처 : wikidocs.net/70649

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

docs.djangoproject.com/ko/3.2/ref/request-response/#django.http.HttpResponse

 

Request and response objects | Django 문서 | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com