앱(App)
이전 포스팅에서는 mysite 프로젝트를 생성했었다. 근데 프로젝트 단독으로 아무런 일도 못하기 때문에, 프로젝트에 기능을 추가하기 위해서는 앱을 만들어 줘야 한다. 게시판 기능을 담당해 줄 pybo 앱을 생성해 볼 것이다.
# 명령 프롬포트에서 django-admin의 startapp 명령을 이용해서 pybo앱을 생성해볼 것이다.
(mysite) 사용자@ MacBookPro mysite % django-admin startapp pybo
(mysite) 사용자@ MacBookPro mysite %
명령을 실행하면 다음줄에 아무런 메시지가 출력 없는 것을 확인할 수 있지만, pybo 앱 관련한 디렉터리와 파일이 생성됨을 에디터에서 확인할 수 있다.
- mygrations : mygrations는 파일이 아닌 디렉토리이고, 장고가 데이터베이스 테이블을 생성하고 수정하기 위한 파일을 여기서 관리한다.
- admin.py : 장고의 관리자 화면을 구성하는 파일이다. 이 파일에 코드를 추가하면 장고 관리자 화면을 제어할 수 있다.
- app.py : 앱의 구성 정보를 정의하는 파일이다.
- models.py : 데이터베이스 모델을 정의하는 파일이다.
- test.py : 앱을 테스트할 때 사용하는 파일이다.
- views.py : 앱의 기능을 구현하는 파일이다. (앞으로 가장 많이 사용할 파일이다.)
이제 장고 프로그램을 만들어볼 것이다. 브라우저에 http://127.0.0.1:8000/pybo 페이지를 요청했을 때 "안녕하세요 오신 것을 환영합니다. "라는 문자열을 출력해보자
1. 로컬 서버 구동
(mysite) sindong-ugwanlija@sindong-uui-MacBookPro mysite % python manage.py runserver
위 그림처럼 page not found 오류가 발생했다. 404는 http 오류이다. 주로 브라우저가 요청한 페이지를 찾을 수 없는 경우에 발생한다. 여기서 장고의 단점은 실행 중 오류가 발생하면 화면에 원인을 자세하게 표시해주기 때문에 파악이 쉽다고 한다. 위 사진에서 오류 내용을 보면 config.urls에 pybo/URL에 대한 매핑이 없다는 것이다. config.urls 모듈은 config/urls.py 파일을 의미한다. 이 오류를 해결하기 위해서는 config/urls.py 파일에 pybo/URL에 대한 매핑을 해주면 될 것 같다.
urls.py 파일은 페이지 요청이 발생하면 가장 먼저 호출되는 파일로 URL 과 뷰 함수를 연결하는 역할을 한다.
urls.py
URL 매핑을 추가하기 위해 config/urls.py 파일을 위 사진 처럼 수정해줘야한다. pybo/ URL이 요청되면 views.index를 호출하라는 매핑을 urlpattens에 추가했다. views.index는 views.py 파일의 index 함수를 의미한다.
urlpatterns & path
urlpatterns : 장고에서 URL과 뷰 함수 간의 매핑을 설정하는 데 사용되는 중요한 변수.
path() : 이 함수는 URL과 뷰를 매핑하는 장고의 함수이다.
urlpatterns에서 실제 URL은 http://127.0.0.1:8000/pybo 이지만 호스트명과 포트가 생략된 pybo/로 매핑 해줘야한다. 이유는 호스트(127.0.0.1)명과 포트(8000)은 서버가 어떤 환경에서 실행되는지에 따라 변하기 때문이다. 참고로 URL 매핑 시 항상 끝에 슬래시를 붙이는 것이 좋다.
페이지를 다시 요청했을 때 사이트에 연결할 수 없다고 오류화면 표시를 확인할 수 있었다. 오류의 원인은 URL 매핑에 추가한 뷰 함수 views.index가 없기 때문이다. 그러면 이제 pybo/views.py 파일에 index 함수를 추가해줘야한다.
HttpResponse는 요청에 대한 응답을 할 때 사용한다. 문자열을 브라우저에 출력하기 위해 사용된다. index 함수의 매개변수 request는 HTTP 요청 객체이다. 다음 포스팅에서는 request 객체에 대해서는 뒤에서 자세히 알아보자.
결과
'Programming > Python' 카테고리의 다른 글
[Python | Django] 장고 개발 흐름 정리하기 - 1 (0) | 2025.01.20 |
---|---|
[Python | Django] 장고 프로젝트 생성하기 (0) | 2025.01.15 |
[Python / Django] 파이썬 가상 환경 구성 (0) | 2025.01.15 |
[Python] Python 기반 웹 페이지 mariaDB로 생성한 데이터베이스 연동 (0) | 2025.01.15 |
[Python] 람다 함수 (0) | 2024.12.29 |