[Django] #1.장고 앱 작성하기

Jimin_Note·2022년 6월 1일
0

🌱Django

목록 보기
3/13
post-thumbnail

Django설치 후 부터의 과정
미니콘다 가상환경 구축 후 실행

  • 사람들이 설문 내용을 보고 직접 투표할 수 있는 개방된 사이트
  • 관리자가 설문을 추가, 변경, 삭제할 수 있는 관리용 사이트

프로젝트 만들기

cd 명령으로 코드를 저장할 디렉토리로 이동 한 후, 다음의 명령을 수행
$ django-admin startproject mysite
👉현재 디렉토리에서 mysite라는 디렉토리를 생성

  • 외부 mysite/ root디렉토리 즉, 프로젝트의 컨테이너 (원하는 이름써도된다.)
  • manage.py Django 프로젝트와 다양한 방법으로 상호작용 하는 커맨드라인의 유틸리티
  • mysite/ 디렉토리 내부에는 프로젝트를 위한 실제 Python 패키지들이 저장
  • mysite/__init__.py Python으로 하여금 이 디렉토리를 패키지처럼 다루라고 알려주는 용도(단순한 빈 파일)
  • mysite/settings.py 현재 Django 프로젝트의 환경 및 구성 저장
    Django settings에서 환경설정이 어떻게 동작하는지 확인가능
  • 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 패턴들)과 해당하는 뷰 함수에 대한 맵핑 목록들을 정의
  • 지정된 URL 패턴과 일치하는 HTTP 요청이 수신된다면 관련된 view 함수가 요청을 전달

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

index 뷰가 URLconf에 연결완료

$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


path() 인수

  • route
    URL 패턴을 가진 문자열
    Django 는 요청이 처리될 때 리스트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

profile
Hello. I'm jimin:)

0개의 댓글