django는 파이썬으로 만들어진 웹 프레임워크로 빠르고 효율적으로 백엔드 시스템을 구현할 수 있다.
이번 과정에서는 django 프로젝트를 anaconda가 제공하는 가상 환경에서 관리할 것이다.
각 프로젝트는 프로젝트마다 필요한 라이브러리와 그 버전이 다르다.
그런데 동일한 환경에서 각 프로젝트를 관리한다면 버전 호환 문제 및 라이브러리 간 충돌 문제가 발생할 수 있다.
이를 해결하기 위해 프로젝트 별로 격리된 환경을 생성한 것이 가상 환경이다.
가상환경에 필요한 패키지(라이브러리)를 쉽게 환경에 설치하는 기능을 제공한다.
가상환경의 생성, 복제 등 관리 기능을 제공해주기도 한다.
conda
명령어를 anaconda prompt 외 프롬프트에서 사용하기 위한 과정Add Anaconda3 to my PATH environmental value
를 체크하고 설치해야한다.conda search python
: conda를 통해 설치 가능한 파이썬 버전 확인conda create -n <가상환경 이름> python=3.10.11
: 지정한 이름의 환경 생성conda activate <가상환경 이름>
으로 가상환경에 접속할 수 있다.conda install <패키지이름>
설치하기 위한 패키지 이름은 보통 import에서 사용하는 패키지 이름과 동일하다.
하지만 다른 경우도 있기 때문에 conda 홈페이지에서 직접 검색하여 정확한 이름을 찾아보는 것이 좋다.
conda install django
성공적으로 django가 설치되었는지 확인하고 싶다면 파이썬 쉘을 실행해서 아래의 스크립트를 실행하면 된다.
import django
django.get_version()
만약 버전 정보가 정상 출력된다면 성공적으로 import 한 것이다.
django-admin startproject <프로젝트 이름>
지정한 이름의 프로젝트 폴더가 생성된다.
이후 서버를 실행 및 관리하기 위해서는 해당 프로젝트 디렉토리에서 작업을 진행해야 한다.
python manage.py runserver
프로젝트 폴더에 있는 파이썬 파일을 바탕으로 서버를 배포하는 명령어이다.
별도로 설정하지 않으면 8000번 포트를 사용한다.
May 10, 2023 - 12:23:41
Django version 4.2.1, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
manage.py
는 django 프로젝트를 진행하고 관리하는데 필요한 유틸리티를 제공하는 프로그램이다.
MVT 구조는 Model-Viewer-Template 구조의 약자이며, Django 프로젝트의 구조이다.
Django 프로젝트 폴더의 구성은 MVT 구조를 기반으로 한다.
라우팅 기능을 제공하는 django 함수에는 다음과 같은 것들이 있다.
urlpatterns
path
re_path
urlpatterns = [
path("admin/", admin.site.urls),
path("", index),
path("videos/<video_id>/", video),
path("user/", include('users.urls')),
re_path(r'^search/(?P<year>[0-9]{4})/$', search_by_year),
re_path(r'^search/(?P<keyword>\w+)/$', search_by_keyword),
]
path("", index)
: 아무 url을 입력하지 않았을 경우 index 함수 실행path("videos/<video_id>/", video)
: videos/문자열/
형태의 입력을 받았을 때 <아무 문자>를 video_id
변수에 담아 video 함수 실행path("user/", include('users.urls'))
: user/
url 요청을 받았을 때 users 폴더의 urls.py에서 처리하도록 지정re_path(r'^search/(?P<year>[0-9]{4})/$', search_by_year)
: search/<4자리 숫자>/
형태의 입력을 받았다면 4자리 숫자를 year
변수에 담아 search_by_year 함수 실행기본적으로 장고에서 urls.py
에서 호출되어 실행하는 함수들은 views.py
라는 별도 파일에서 관리한다. (MVT 모델 참고)
이를 위해 views.py
를 import 하여, view에 선언된 함수들과 연결하는 방식을 취한다.
jango는 view를 사용해 클라
번외 : **args : unpacking
딕셔너리 형태의 변수를 전달할 때 앞에 별표 2개를 붙여서 전달하면 딕셔너리를 풀어서 전달할 수 있다.
ex)args = {’a’ : ‘hello’, ‘b’ : ‘world’} foo(args[’a’], args[’b’]) foo(**args)
두 foo 함수는 는 동일하게 작동한다.
# views.py
from django.http import HttpResponse
# urls.py에서 views.index가 실행될 경우 아래 페이지가 실행됨
def index(request):
return HttpResponse("hello")
req.GET
?q=hello&a=bye
형식으로 입력된 쿼리가 있다면 print(req.GET)
로 정보를 받았을 때 {q:hello, a:bye}
이 반환된다.req.POST