Django설치 후 부터의 과정
미니콘다 가상환경 구축 후 실행
cd 명령으로 코드를 저장할 디렉토리로 이동 한 후, 다음의 명령을 수행
$ django-admin startproject mysite
👉현재 디렉토리에서 mysite라는 디렉토리를 생성
외부 mysite/
root디렉토리 즉, 프로젝트의 컨테이너 (원하는 이름써도된다.)manage.py
Django 프로젝트와 다양한 방법으로 상호작용 하는 커맨드라인의 유틸리티mysite/
디렉토리 내부에는 프로젝트를 위한 실제 Python 패키지들이 저장 mysite/__init__.py
Python으로 하여금 이 디렉토리를 패키지처럼 다루라고 알려주는 용도(단순한 빈 파일)mysite/settings.py
현재 Django 프로젝트의 환경 및 구성 저장mysite/urls.py
현재 Django project 의 URL 선언 저장(목차같은 느낌)mysite/asgi.py
프로젝트에 사용할 ASGI 호환 웹 서버의 시작부분mysite/wsgi.py
현재 프로젝트를 서비스하기 위한 WSGI 호환 웹 서버의 시작부분 manage.py이 들어있는 디렉토리에서 명령
$python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
June 01, 2022 - 10:14:50
Django version 4.0.4, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
http://127.0.0.1:8000/ 을 통해 접속가능
포트변경하는 법
$ python manage.py runserver 8080
👉8080으로 시작하겠다
manage.py 가 들어있는 디렉토리에서 명령실행
->여기서는 mysite
$python manage.py startapp polls
📍첫 번째 뷰 작성하기
$vi view.py
#polls/view.py
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
views.py
👉 요청 처리하기
views는 웹 클라이언트로부터 HTTP요청을 수신하고 HTTP응답을 반환하는 웹 어플리케이션의 중심!!
뷰를 호출하기위해 이와 연결된 URL필요
📍위 디렉토리와 같은 곳에 URLconf생성하기_urls.py
$touch urls.py
#polls/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
urls.py
👉 요청을 알맞은 view로 전달
📍최상위 URLconf에서 polls.urls모듈 바라보게하기
mysite/urls.py
파일에서 jango.urls.include를 import 하고, urlpatterns
리스트에 include() 함수추가
#mysite/urls.py
from django.contrib import admin
from django.urls import include, path #include 추가
urlpatterns = [
path('polls/', include('polls.urls')), #추가
path('admin/', admin.site.urls),
]
urlpatterns
맵퍼는 경로들(특정 URL 패턴들)과 해당하는 뷰 함수에 대한 맵핑 목록들을 정의urlpatterns 객체는 path()함수와 re_path() 함수를 항목으로 가지는 리스트
path('polls/', include('polls.urls'))
첫 번째 인수polls/
는 일치시킬 경로(패턴)
다.
두 번째 인수include('polls.urls')
는 패턴이 일치할 때 호출되는 다른 함수
위 코드의 내용은 함수는 urls()
이며 polls
모듈 안에서 찾을 수 있다는 것(즉, polls.py라는 파일안에서)
💁♂️include( )
다른 템플릿 파일들을 포함해서 재사용할 수 있게 해주는 기능
include()를 사용하여 여러 템플릿에서 중복되어 사용할 수 있는 부분을 분리하여 각자 include로 포함해 렌더링하도록 할 수 있다.
Django가 함수 include()를 만나게 되면, URL의 그 시점까지 일치하는 부분을 잘라내고, 남은 문자열 부분을 후속 처리를 위해 include 된 URLconf로 전달
polls 앱에 그 자체의 URLconf(polls/urls.py)가 존재하는 한, 《/polls/》, 또는 《/fun_polls/》, 《/content/polls/》와 같은 경로, 또는 그 어떤 다른 root 경로에 연결하더라도, 앱은 정상적으로 동작한다.
include()는 다른 URL 패턴을 포함할 때마다 항상 사용해야함. 예외)admin.site.urls
$python manage.py runserver
http://localhost:8000/polls/
🚫Error: That port is already in use.
다시들어가보려고 하니 무한 로딩...되길래
$python manage.py runserver
다시 명령해봤지만 이미 서버가 구동중이라며 에러가 뜬다
이럴땐 관련 프로세스를 모두 죽이고 다시 명령하기!
포트8000 관련된 모든 프로세스 죽이기
$sudo lsof -t -i tcp:8000 | xargs kill -9
다시명령
$python manage.py runserver
urlpatterns
의 첫 번째 패턴부터 일치하는 패턴을 찾을 때 까지 요청된 URL 을 각 패턴과 리스트의 순서대로 비교패턴들은 GET 이나 POST 의 매개 변수들, 혹은 도메인 이름을 검색하지 않는다
https://www.example.com/myapp/
URLconf 는 오직 myapp/
부분만 https://www.example.com/myapp/?page=3,
URLconf 는 역시 myapp/
부분만
view
일치하는 패턴을 찾으면 HttpRequest 객체를 첫번째 인수로 지정
경로로 부터 값을 키워드 인수로하여 특정한 view 함수를 호출(?)
kwargs
임의의 키워드 인수들은 목표한 view 에 사전형으로 전달(?)
name
URL에 이름을 지으면, Django 어디에서나 명확하게 참조있다.
이 기능은 단 하나의 파일만 수정해도 project 내의 모든 URL 패턴을 바꿀 수 있도록 한다.
https://docs.djangoproject.com/ko/3.1/intro/tutorial01/
https://developer.mozilla.org/ko/docs/Learn/Server-side/Django/Introduction