
https://www.youtube.com/watch?v=xGdUNyVkAto&list=PLuHgQVnccGMDLp4GH-rgQhVKqqZawlNwG&index=2
cmd > pipenv shell > pipenv install djangorestframework > django-adimin startproject myproject .

이처럼 myproject라는 폴더가 생성된 것을 볼 수 있다
settings.py에는 프로젝트를 운영하는데 필요한 설정들이 들어가 있다
urls.py는 사용자가 접속하는 path(경로)에 따라 누가, 어떻게 처리해 줄 것인가를 하는 라우팅을하는 중요한 파일
manage.py는 만든 myproject 바깥에 생성이 되어있는데 이는 프로젝트를 진행하는데 들어잇는 기능이 있는 유틸리티 파일이다
terminal창에서 python .\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.
March 04, 2023 - 12:02:13
Django version 4.1.7, using settings 'myproject.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
http://127.0.0.1:8000/이는 장고 기본서버가 실행이 되고 8000번 포트를 통해서 접속이 가능하다는 뜻

접속을 하면 다음과 같이 사이트가 생성된 것을 확인 가능
ctrl + c를 누르면 서버는 꺼진다
만약 8000번이라는 이름으로 다른 서버를 사용하고 있다면 다음과 같이 포트 실행
python .\manage.py runserver 8888

만든 프로젝트에서 urls.py가 있다. 프로젝트안에서 구현하는 것이 아니라 app이라는 더 작은 단위를 만들어서 사용하는 것. 프로젝트가 복잡해지면 연관된 로직들을 묶어서 그룹핑을 하고 싶은데 여러개의 app들을 만들어서 정리를 해준다. 각각의 app안에는 urls.py라는 것이 존재. app안에는 view가 생성되고 def(함수)가 존재한다
사용자가 접속하면 urls.py에서 경로에 따라 적당한 app으로 위임하고 app안에 urls.py에서 적당한 view 그리고 def에 위임을 진행
구체적인 작업을 하는데 대부분 DB를 사용하는데 직접적으로 DB에 접속하는 것이 아니라 django안에 model이라는 유용한 수단을 통해 model을 통해 DB에 접속하고 이를 통해 고객에게 응답을 해준다. 결과로는 html, json, xml로 응답을 해주는 것이 전체적인 흐름이다
#app을 실행하기 위해서
django-admin startapp myapp
만들어진 myapp 폴더 안에 있는 것들을 가지고 구체적인 application을 만드는 것이다
어떤 웹프로그래밍을 하던 가장 먼저할 것은 routing
사용자가 접속한 각각의 경로를 누가 처리할 것인지 정하는 것이 라우팅이다
myproject > urls.py
from django.contrib import admin
from django.urls import path
# 접속 시나리오
# https://127.0.0.1/
# https://127.0.0.1/app/
# https://127.0.0.1/create/
# https://127.0.0.1/read/1/
urlpatterns = [
path("admin/", admin.site.urls),
]
urlspatterns라는 리스트를 반드시 정의를 해주어야 한다
그 안에는 라우팅과 관련된 정보를 가지고 있어야 한다
admin/ 는 장고가 기본적으로 가지고 있는 관리자 화면으로 이동하기 위한 라우팅 설정이다
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path("admin/", admin.site.urls),
path("", include('myapp.urls')),
]
include사용을 위해 import 하고 myapp아래에 urls.py를 사용해라는 뜻으로 path를 설정한 것이고
admin/으로 접속하지 않는 경우에는 myapp의 urls.py로 위임하라는 의미를 가진 것
만약 사용자가 create/ read/로 접속을 한 경우를 위한 경로 설정
myapp > urls.py // 해당위치에는 urls.py라는 파일이 초기에는 없기에 myproject에 있는 urls.py를 복사해서 사용한다
from django.urls import path
urlpatterns = [
path(''),
path('create/'),
path('read/1/')
] #들어올 경로에 대한 경우의 수를 설정
클라이언트로 정보를 전송할 함수를 생성이는 view.py에서 위임
첫번쨰 파라미터 인자로 요청과 관련된 여러가지 정보로 들어오록 객체를 전달하도록
request라는 파라미터 이름을 설정(대부분 request로 설정)
Http를 통해서 응답을 할 것이라는 객체를 만들어서, 이를 사용하기 위해서는 import가 필요
그안에는 인자로 전송하고 싶은 정보를 입력한다('welcome!')
그렇다면 경로를 지정하고 들어오지 않았을때 index값을 출력하기 위해서는? -> 다시 urls.py로 이동
from django.shortcuts import render, HttpResponse
def index(request):
return HttpResponse('Welcome!')
def create(request):
return HttpResponse('Create')
def read(request):
return HttpResponse('Read')
#def read(request, id):
# return HttpResponse('Read'+id) #1대신 id를 사용하는 경우
from django.urls import path
from myapp import views
urlpatterns = [
path('', views.index),
path('create/', views.create),
path('read/1/',views.read)
#path('read/<id>/',views.read) #1대신 id를 사용하는 경우
]

경로를 지정해준 대로 들어가면 welcome!이 잘 나오는 것을 확인 가능

read 또한 설정한대로 출력이 잘되는 모습
