설문조사 어플리케이션
설문조사 어플리케이션을 작성한다.
두 파트로 구성되어있다.
- 사람들이 접근하여 직접 투표할 수 있는 사이트
- 관리자가 설문을 관리할 수 있는 관리용 사이트
python -m django --version # 장고 버전 확인가능
- 프로젝트 작성
- 개발 서버
- 설문조사 앱 만들기
- 뷰 작성하기
1. 프로젝트 작성
cd {프로젝트를 생성하기 원하는 디렉토리} # cd /Users/Username/Desktop/Django
django-admin startproject {생성하고 싶은 프로젝트 이름}
# django-admin startproejct mysite
위 명령어를 작성하게 되면 아래와 같은 파일들이 아래의 구조대로 생성이 됨
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
mysite가 두 개 존재하는 것을 볼 수 있다. 상위에 있는 디렉토리 mysite는 이름 변경해도 상관이 없는데 하위에 있는 디렉토리는 이름을 변경하지 않는 것을 추천한다. (바꿔야하는 설정이 많음)
mysite/
: 최상위 디렉토리 (장고와 아무 상관이 없는 위치라 이름 변경 해도됨)
manage.py
mysite/
: 하위 디렉토리 (이름변경하면안됨) 이 디렉토리 내의 이름을 이용해서 프로젝트 어디서든 Python 패키지 임포트 가능
mysite/—init—.py
: 이 파일이 속해있는 디렉토리를 패키지처럼 다루라고 알려주는 빈 파일
mysite/settings.py
: 현재 Django 프로젝트의 환경 및 구성을 저장
mysite/urls.py
: 현재 Django프로젝트의 URL 선언을 저장(스프링으로 치면 컨트롤러)
mysite/asgi.py
: 배포를 위한 파일 (asgi 방식)
-
mysite/wsgi.py
: 배포를 위한 파일 (wsgi 방식)
2. 개발 서버
최상위 디렉토리로 이동후 아래와 같은 명령어 입력
python manage.py runserver
아래와 같은 출력이 나올것
Performing system checks...
System check identified no issues (0 silenced).
You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.
4월 28, 2023 - 15:50:53
Django version 4.2, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
일단 공식문서에서 migrate
관련은 무시하고 진행하라고 나와있으니 그대로 진행 (데이터베이스 관련임)
이후 크롬에서 http://127.0.0.1:8000
을 입력해서 접속하면 환영 화면이 뜸
위와 같은 화면이 떴다면 정상적으로 서버가 띄워진것임
참고로 아래와 같은 명령어로 포트와 아이피를 변경할 수 있음
python manage.py runserver 8080 # 8080포트로 서버 열기
python manage.py runserver 0.0.0.0:8080 # IP접근가능하게 변경
- 기본적으로 제공되는
127.0.0.1
과 같은경우, 다른 시스템에서 액세스 불가능
- 네트워크의 다른 시스템에서 개발 서버를 볼 수 있게 하려면
0.0.0.0
으로 접근가능한 IP로 변경해주어야함
runserver
는 요청이 들어롤 때마다 Python 코드를 자동으로 다시 불러와줌. 하지만 완벽하진 않기 때문에 가끔 서버를 끄고 다시 기동해야 될 때가 있음(파일 추가라던가..)
3. 설문조사 앱 만들기
- 장고는 하나의 프로젝트에 여러개의 앱을 둘 수 있음. 이 앱들은 다른 프로젝트에서 재사용이 가능함
- 이런 앱들을 구조적으로 자동생성 가능함
python manage.py startapp polls
위 명령어를 실행하면 아래와 같은 디렉토리가 최상위 디렉토리 하위에 생성됨
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
4. 뷰 작성하기
views.py
- 새로 만든 앱 디렉토리에
urls.py
생성 및 새로 만든 뷰 등록
mysite/
urls.py
파일에서 새로 만든urls.py
추가
- 잘 동작하는지 확인
1. views.py에 코드작성
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
2. urls.py 앱디렉토리에 생성
polls
디렉토리에는urls.py
가 없다. 생성해준다.
- 뷰와
url
을 연결하기 위한 파일이다. (프로젝트의 디렉토리에는 이미 생성되어있음)
- 아래와 같이 작성한다.
from django.urls import path
from . import views
urlpatterns = [
path("",views.index,name="index")
]
3. mysite/urls.py 파일에서 새로 만든 urls.py 추가
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path("polls/", include("polls.urls")),
path("admin/", admin.site.urls),
]
include
를 통해 url
을 연결하면, polls
앱에 urls.py
가 있는 한, 어떻게 url을 변경하도 동작한다
- “polls/”, “fun_pollls/” 등 원하는 url경로를 만들 수 있다
4. 잘 동작하는지 확인
이후 크롬 주소창에 http://127.0.0.1/polls/ 를 입력하면 우리가 생성한 view페이지가 보인다.
path() 함수
- 필수인수
route
,view
- 선택 가능한 인수
kwargs
,name
route
route
는url
을 정하는 인수 -urlpatterns
의 첫 번째 부터 찾음. 일치하는 패턴을 찾을 때까지 요청된url
을 비교함
- 도메인 이름이나, GET, POST의 매개변수 이런거 신경안쓰고, url의 뒷부분만 신경씀
https://www.exam.com/myapp/
이 요청되었으면myapp/
부분만 신경쓴다는 소리임
view
- 일치하는 패턴을 찾으면 HttpRequest 객체를 첫번째 인수로 하고, 경로로부터 받은 값을 키워드인수로 특정한 뷰함수를 호출함
kwargs
키워드 인수 (사용자가 임의로 전달할 수 있는 인수) 뷰에 사전형으로 전달됨
name
url에 이름을 지으면 어디에서나 이 url에 연결된 뷰를 참조할 수 있게됨(또는 연결할 수 있게됨)
Uploaded by N2T