AIVLE TIL ('23.05.10) Django (1)

cjkangme·2023년 5월 10일
0

에이블스쿨

목록 보기
69/81
post-thumbnail
post-custom-banner

Django 개요

django는 파이썬으로 만들어진 웹 프레임워크로 빠르고 효율적으로 백엔드 시스템을 구현할 수 있다.

Django 특징

장점

  • 매우 복잡하고 다양한 기능을 제공하기 때문에, 비교적 큰 백엔드 서비스도 단기간에 구현하는 것이 가능하다.
  • 이미 만들어진 모듈을 상속받아 커스터마이징 할 수 있어 어느정도의 유연성을 갖고 있다.
  • 관리자 인터페이스를 기본 제공한다.

단점

  • 기능이 많고 복잡한 만큼 익혀야하는 개념이 많고, 문법이 다소 복잡하고 까다로운 편이다.

가상 환경

이번 과정에서는 django 프로젝트를 anaconda가 제공하는 가상 환경에서 관리할 것이다.

가상 환경

가상환경이 필요한 이유

각 프로젝트는 프로젝트마다 필요한 라이브러리와 그 버전이 다르다.
그런데 동일한 환경에서 각 프로젝트를 관리한다면 버전 호환 문제 및 라이브러리 간 충돌 문제가 발생할 수 있다.

이를 해결하기 위해 프로젝트 별로 격리된 환경을 생성한 것이 가상 환경이다.

언어별 오픈소스 라이브러리 저장소

가상환경에 필요한 패키지(라이브러리)를 쉽게 환경에 설치하는 기능을 제공한다.
가상환경의 생성, 복제 등 관리 기능을 제공해주기도 한다.

  • python : pip, conda
    • pip은 가상환경 관리 기능이 없고
    • conda는 가상환경 관리 기능이 있다.
  • nodejs : npm
  • php : composer
  • ruby : gems

환경 설정

아나콘다 설치 및 환경변수 등록

  • conda 명령어를 anaconda prompt 외 프롬프트에서 사용하기 위한 과정
  • 설치 시 Add Anaconda3 to my PATH environmental value를 체크하고 설치해야한다.
    • 만약 이렇게 안했다면 설치 경로를 환경 변수에 직접 등록해야함

conda 가상환경 세팅

  • conda search python : conda를 통해 설치 가능한 파이썬 버전 확인
  • conda create -n <가상환경 이름> python=3.10.11 : 지정한 이름의 환경 생성
    • 처음에 환경에 설치될 패키지를 함께 지정할 수 있다.
    • conda activate <가상환경 이름> 으로 가상환경에 접속할 수 있다.

conda를 통한 패키지 설치

  • conda install <패키지이름>

설치하기 위한 패키지 이름은 보통 import에서 사용하는 패키지 이름과 동일하다.
하지만 다른 경우도 있기 때문에 conda 홈페이지에서 직접 검색하여 정확한 이름을 찾아보는 것이 좋다.

Django 설치

  • conda install django

성공적으로 django가 설치되었는지 확인하고 싶다면 파이썬 쉘을 실행해서 아래의 스크립트를 실행하면 된다.

import django
django.get_version()

만약 버전 정보가 정상 출력된다면 성공적으로 import 한 것이다.

Django 프로젝트

프로젝트 생성 및 실행

  • 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 구조

MVT 구조는 Model-Viewer-Template 구조의 약자이며, Django 프로젝트의 구조이다.
Django 프로젝트 폴더의 구성은 MVT 구조를 기반으로 한다.

라우팅 (urls.py)

라우팅 기능을 제공하는 django 함수에는 다음과 같은 것들이 있다.

  • urlpatterns
    • url과 view의 연결 목록을 리스트 형태로 저장하는 변수
    • 프레임워크 문법이기 때문에 변수명을 그대로 사용해야 한다.
  • path
    • url 문자열과 view를 연결해주는 함수
  • re_path
    • 정규표현식(regex)를 이용하여 url 문자열과 view를 연결해주는 함수
    • user/awesome_nickname 과 같이 게시글번호, 유저아이디 별로 패턴화된 url을 사용해야할 때 사용한다.
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 함수 실행

view와 연결

기본적으로 장고에서 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 함수는 는 동일하게 작동한다.

정리

  • 라우팅은 url path와 함수를 연결한다.
  • 경로의 일부를 파라미터로 함수에 전달하는 방법이 있다.
  • 함수는 사용자에게 전송할 문자열(HTML 코드 등)을 완성해서 응답한다.

View (views.py)

View의 동작

# views.py
from django.http import HttpResponse
# urls.py에서 views.index가 실행될 경우 아래 페이지가 실행됨
def index(request):
	return HttpResponse("hello")
  • Django는 view를 사용해 클라이언트의 요청을 처리하고, 응답을 만들어 반환한다.
  • view에는 두가지 종류가 있다.
    • Function-Based View : 함수로 구현한 뷰
      • 간단하고 직관적이지만, 대부분의 구현을 직접해야한다.
    • Class-Based View : 클래스로 구현한 뷰
      • 패턴화 된 뷰 구조를 쉽게 구현한다.
      • 높은 추상화로 구조나 코드의 이해가 어렵다.
    • 이번 과정에서는 Function-Based View만 다룰 것이다. 이를 잘 다룰 수 있어야 나중에 Class-Based View 도 잘 다룰 수 있다.

Response 함수의 종류

  • HttpResponse: 문자열 형식의 응답 반환
  • JsonResponse: JSON 형식의 응답 반환
  • HttpResponseRedirect : 다른 url 주소로 이동시킴 (Redirect)
  • HttpResponseNotFound : 404 Not Found 에러를 응답

Requests의 종류

  • GET : url을 통해 정보를 담아 전송 (쿼리 스트링)
    • 보안에 취약하다는 단점이 있다.
    • 보통 유저가 얻고 싶은 정보를 필터링하기 위해 사용한다.
  • POST : 요청 데이터의 body 부분에 데이터를 담아 전송한다.
    • 데이터가 직접적으로 노출되지 않고 암호화를 통해 데이터를 보호할 수 있다.
  • PUT, PUSH, DELETE 등 다른 방식도 존재한다.

Django에서 Request를 받는 방법

  • GET 방식 : req.GET
    • GET 메소드로 전송된 쿼리스트링을 딕셔너리 형태로 반환한다.
    • 예를 들어 ?q=hello&a=bye 형식으로 입력된 쿼리가 있다면 print(req.GET)로 정보를 받았을 때 {q:hello, a:bye}이 반환된다.
  • POST 방식 : req.POST
    • GET과 마찬가지로 딕셔너리를 반환하므로, GET 방식과 동일하게 body에 담긴 정보를 가져올 수 있다.
post-custom-banner

0개의 댓글