conda create -n polltest python
conda activate polltest
위와같이 가상환경을 만들어준 다음
django-admin startproject mysite
mysite 라는 프로젝트를 만들어줬다
위의 형광펜 부분과 같은 파일들이 생긴다.
여기 아래 mysite 를 하나 더 만들어 주면 실제 프로젝트의 패키지들이 하위 디렉토리에 저장된다.
mysite
├── db.sqlite3
├── manage.py
├── mysite
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-39.pyc
│ │ ├── settings.cpython-39.pyc
│ │ ├── urls.cpython-39.pyc
│ │ └── wsgi.cpython-39.pyc
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
이 안의 파일들을 살펴보자
- __init__.py : 해당 디렉토리를 패키지로 읽어달라는 파일이다.
- settings.py : 현재 django 프로젝트의 환경 셋팅이 포함되어있다.
- urls.py : 현재 django로 작성된 사이트의 목차라고 할 수 있다.
- asgi.py / wsgi.py : 서버 게이트웨이 인터페이스로 해당 파일들이 있어야 서버로써 작동 가능하다.
아래는 Django의 구동 방식이다.
맨위의 client - web browser 에서 request 보내면 urls.py 에서 view 로 해당 request 내용을 보내고 models.py 에 data 를 요청한다. data base 에서 받아온 data 를 view를 통해 template 즉 front server 와 통신하여 해당 데이터가 가시적으로 보이게 되는것이다.
아래와 같이 polls 앱을 생성해주자
python manage.py startapp polls
mysite
├── db.sqlite3
├── manage.py
├── mysite
│ ├── __init__.py
│ ├── __pycache__
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── polls
├── __init__.py
├── __pycache__
├── admin.py
├── apps.py
├── migrations
│ ├── __init__.py
│
├── models.py
├── tests.py
└── views.py
polls 앱이 생성되었다.
앱을 생성해줬으면 django에게 해당 앱의 경로를 알려줘야한다.
settings.py 의 INSTALLED_APPS에 추가 해주면 된다.
polls.apps.PollsConfig
에서 PollsConfig 이 해당 app의 meta data 를 저장하는 class 로 apps.py 에 존재한다.
client 의 request 에 장고가 가장먼저 하는것은 url을 분석하는것
Django가 url을 분석하는 순서를 간단히 정리하면
- setting.py 의 ROOT_URLCONF 에서 URLconf위치를 찾는다.(urls.py)
- URLconf를 로딩해서 urlpatterns 변수에 지정되어 있는 URL 리스트를 검사.
- 위의 urlpatterns 에서 path 경로를 parsing 해서 polls 앱의 urls.py 를 탐색
- 여기서 view.index / view.detail / views.results 를 확인하고 해당 메소드를 호출한다.
- 호출 시 HttpRequest 객체와 매칭할 때 추출된 단어들을 view에 인자로 넘겨준다.
- 만약 매치되는게 없다면 err 페이지를 내보낸다.
ref by
https://docs.djangoproject.com/en/3.2/topics/http/urls/
https://hitd.tistory.com/7
이 설명 처럼
polls>view.py 에 위와 같은 코드를 입력하고
urls.py의 url patterns 해당 경로를 넣어주고 mysite>urls.py 에서 polls>urls.py urlpatterns 까지 작성 완료 됐다면
$ python manage.py runserver
서버를 열었을때
다음과 같은 화면을 볼 수 있다.