Post

Aivle Til 230510 Django 1

Aivle Til 230510 Django 1

title: AIVLE TIL (‘23.05.10) Django (1) date: 2023-05-10 14:44:19.075 +0000 categories: [에이블스쿨] tags: [‘aivle’] description: 문법은 어짜피 외우기이니 개념 위주로 공부하자 image: /assets/posts/2023-05-10-aivle-til-230510-django-1/thumbnail.png


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 홈페이지에서 직접 검색하여 정확한 이름을 찾아보는 것이 좋다. img

Django 설치

  • conda install django

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

1
2
import django
django.get_version()

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

Django 프로젝트

프로젝트 생성 및 실행

  • django-admin startproject <프로젝트 이름>

지정한 이름의 프로젝트 폴더가 생성된다.

이후 서버를 실행 및 관리하기 위해서는 해당 프로젝트 디렉토리에서 작업을 진행해야 한다.

  • (프로젝트 루트 디렉토리에서) python manage.py runserver

프로젝트 폴더에 있는 파이썬 파일을 바탕으로 서버를 배포하는 명령어이다.

별도로 설정하지 않으면 8000번 포트를 사용한다.

1
2
3
4
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 구조

img

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

img

라우팅 (urls.py)

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

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

1
jango는 view를 사용해 클라

번외 : **args : unpacking

딕셔너리 형태의 변수를 전달할 때 앞에 별표 2개를 붙여서 전달하면 딕셔너리를 풀어서 전달할 수 있다. ex)

1
2
3
args = {a : hello, b : world}
foo(args[a], args[b])
foo(**args)

두 foo 함수는 는 동일하게 작동한다.

정리

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

View (views.py)

View의 동작

1
2
3
4
5
# 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에 담긴 정보를 가져올 수 있다.
This post is licensed under CC BY 4.0 by the author.