- 가상환경 만들고, 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에 오신것을 환영합니다.")
<정리>
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
docs.djangoproject.com/ko/3.2/ref/request-response/#django.http.HttpResponse
'여니의 프로그래밍 study > 파이썬' 카테고리의 다른 글
[Python] ImportError: DLL load failed: 지정된 모듈을 찾을 수 없습니다. (2) | 2021.05.11 |
---|---|
[Python] lambda 함수 정리 (0) | 2021.04.27 |
[Python] sort, sorted, key 매개변수 이용한 정렬 (0) | 2021.04.27 |
[파이썬] 여러 개의 버튼을 각자 작동하게 하는 법 (Qt designer로 UI 구현) (0) | 2021.02.04 |
[파이썬] 람다 lambda 함수 (0) | 2021.02.02 |