backend/Django&Python

[Django] 프로젝트 생성하기, View, URLconf 만들기.

findTheValue 2021. 8. 24. 03:02

첫 번째 장고 앱 작성하기, Part 1


목표!

  • 설문조사(Polls) 앱 만들기.
    • 사람들이 설문 내용을 보고 직접 투표할 수 있는 사이트
    • 관리자가 설문을 추가, 변경, 삭제할 수 있는 관리용 사이트.

이슈 발생

  • 저는 User name 이 한글인 관계로 anaconda가 제 디렉토리를 찾지를 못해 pip이 안먹힙니다..
  • 때문에 django-admin 을 명령어로 찾을 수 없었고
  • 다음과 같은 방법으로 해결했습니다.
  • pip설치 : https://imspear.tistory.com/21
# django-admin 위치 찾기
find / -name django-admin


# 기존 상대경로 명령어 대신 django-admin startproject mysite
# find로 찾은 절대경로 명령어로 mysite 프로젝트를 생성했습니다.
myHome/.local/bin/django-admin startproject mysite

프로젝트 생성시 주의점

  • 파이썬이나 장고의 built-in 패키지 명은 피하기(django, test..)

  • 코드를 DocumentRoot에 넣으면 안좋음. 웹을 통해 외부인들이 파이썬 코드를 열어 볼 위험.


프로젝트 파일 명들

  • manage.py: 프로젝트를 관리하기 위한 명령줄 유틸리티.

  • mysite/: 프로젝트 python 패키지들을 저장할 디렉토리

  • mysite/init.py: 같은 이름의 다른 디렉토리를 막을 수 있게 한다.

  • mysite/settings.py: 프로젝트의 환경 및 구성을 저장합니다. Django settings참고

  • mysite/urls.py: URL 선언들을 저장합니다. Django 로 작성된 사이트의 《목차》

  • 나머지는 배포하기위한 파일들.


개발 서버 동작

$ python manage.py runserver
  • 개발 서버를 운영 환경에서 사용하지 말 것.
  • 개발 서버는 수정 시 자동 최신화 된다!

포트 변경하기.

python manage.py runserver 8080
python manage.py runserver 0:8000

요청 및 응답의 개요

  • 장고는 requests와 response 객체를 사용해 상태를 전달한다.
  • 페이지가 요청되면 장고는 requests에 HttpRequest에 대한 메타 데이터를 포함하는 객체를 생성한다.
  • 장고는 적절한 뷰를 로드해 뷰 함수의 첫번째 인수로 전달한다. 각 뷰는 HttpResponse객체를 반환할 책임이 있다.

앱 생성

python manage.py startapp polls

뷰 작성 하기.

# polls/view.py
from django.http import HttpResponse


def index(request):
    return HttpResponse("What the hell.")

뷰를 호출하기 위해 연결된 URL을 URLconf 모듈을 통해 구성


URLconf

# polls/urls.py
from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

최상위 URLconf에 연결

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]
  • include()는 다른 URL 패턴이 포함될 때마다 사용해야 한다.(admin.site.urls제외)

Path()!!!

  • 필수 인자 route, view
  • 선택 인자 kwargs, name
route : url 패턴을 가진 문자열. 요청이 오면 장고는 urlpatterns의 첫번째 패턴부터 시작하여, 일치하는 패턴을 찾을 때 까지 요청 된 URL을 각 패턴과 리스트 순서대로 비교.
  • 패턴들은 GET,POST의 매개변수, 도메인 이름에는 관심 가지지 않음 오직 route만 봄
view : 장고에서 일치하는 패턴을 찾으면 HttpRequest 객체를 첫번째 인수로 하고 경로에서 capture 된 값을 키워드로 해서 특정한 view함수를 호출한다.
kwargs : 임의의 키워드 인수들은 목표한 view에 사전형으로 전달된다.
name : URL에 이름을 지으면 템플릿을 포함한 Django 어디에서나 참조가능. ID같은 거. 하나만 수정해도 프로젝트 내 모든 URL 패턴을 바꿀 수 있게 해줌.


내일 공부할 내용.

  • URL dispatcher로 URL 디자인 하는 방법.

  • URL이 깔끔해야하는 이유.

  • URLconf의 함수 path, re_path, include, register_converter, static, url

  • HttpRequest, Response 객체 API