갬미의 성장일기

[Django] 웹페이지 만들기 - APP 추가하기, HTML 실행하기 본문

Algorithm/Web(django)

[Django] 웹페이지 만들기 - APP 추가하기, HTML 실행하기

갬미 2022. 1. 10. 18:11

오늘은 Django를 사용해보았다 

Pyrhon - 3.10.0

Django - 3.1.3

IDE - PyChame


네이버 사이트 = project

그 안의 메일, 카페, 블로그 .. = app(앱)

전체 사이트 , 각각의 기능 = project , app

전체를 만들고 앱을 구현해야 함

 

APP 추가하기

Django 프로젝트를 만들 폴더에 가서 cmd창을 열고 APP을 추가한다

> django-admin startapp app_name

코드 입력시 app이름과 같은 폴더가 생성됨

이때

http://127.0.0.1:8000/basic1 에 접근하면 Page not found404 오류가 발생한다

/basic1 에 맞는 url 매핑이 되어있지 않기 때문 -> config/urls.py에서 매핑 필요

 

1. basic1 view.py 에 함수 추가

url 매핑 전 해당 url에서 어떤 작업을 할 것인지 코드를 작성해야한다

from django.http import HttpResponse
def hello(request):
    return HttpResponse("안녕 django!")

HttpResponse - 페이지 요청에 대한 응답할때 사용하는 장고 클래스

함수 매개변수 request - 장고에 의해 자동으로 전달되는 HTTP 요청

 

2. config/urls.py에서 url 매핑

  1. basic1앱의 view 파일 import
  2. /basic1/hello에 접근하면 basic1 -> view.py -> hello함수를 실행하라는 의미

3. http://127.0.0.1:8000/basic1/hello/ 접속

 

장고 실행 흐름

  1. 사용자가 주소창에 링크 주소 입력 (http://127.0.0.1:8000/basic1/hello/)
  2. Local server에서 urls.py -> 링크 주소에 맵핑된 앱 함수 연결
  3. 연결된 함수 실행

HTML 실행하기

- 프로젝트 파일 하위에 templates 폴더를 만들고 app과 동일한 폴더를 templates 폴더 하위에 생성

- config/setting.py의 TEMPLATES에 templates 폴더 경로를 입력

html파일을 template라고 하며 이는 모두 templates 하위 디렉토리에서 처리하겠다는 의미이다

장고에서는 앱 하위 디렉토리 중 templates가 있으면 이를 자동으로 템플릿 디렉토리로 인식하지만, 모든 앱의 template는 모아서 관리하는것이 좋다

 

- HTML 파일 만들기

 

 

templates 하위 디렉터리 중 해당 앱 아래에 원하는 html 파일을 추가한다

 

- view.py 추가 (APP - views.py)

def name_input(request):
    return render(request, 'basic1/name_input.html')

html을 열기위한 메서드 = render

이때 html 경로에 templates/ 를 붙이지 않는 이유는 이미 setting.py에서 경로를 잡아주었기 때문이다

def name(request):
    input = request.POST.get("my_name")
    return HttpResponse(f"내 이름은 {input}")

http://127.0.0.1:8000/basic1/name/에서 실행할 함수도 추가한다

request안의 POST는 딕셔너리 형태로 이루어져있다 

 

- urls.py 추가 (config - urls.py)

urlpatterns = [
    path('admin/', admin.site.urls),
    path('basic1/hello/', basic1.views.hello),
    path('basic1/name_input/', basic1.views.name_input),
    path('basic1/name/', basic1.views.name),
]

 

Comments