Programming Guide/Django

Django 시작하기

발효홍삼 2023. 1. 5. 07:16
728x90

What is Django?

Django는 Python 웹 프레임워크로 웹개발에 필요한 대부분의 모든 기능을 가지고 있고 커뮤니티 또한 굉장히 활발한 프레임워크이다.

 

ORM(object relational mapper)이라는 것을 가지고 있다. ORM은 파이썬과 SQL 사이의 통역사 같은 역할로 SQL 문법을 따로 배울 필요 없이 파이썬만으로 데이터 베이스를 사용할 수 있다. 

기본적으로 어드민 패널을 가지고 있으므로 따로 조작이 필요하지 않다.

또 유저 승인(user authentication), 비밀번호 암호/해석/체크 등의 기능을 가지고 있으며 URL dispatcher을 갖고 있다.

그 외에도 다양한 기능을 제공하고 있으므로 셋업을 빠른 속도 안에 끝낼 수 있다.

 

Django는 Model(데이터 관리), Template (화면), View (중간관리자), 총 3가지 구조로 구성되어 있다.

 

웹 서버에서 요청이 오면 Django로 전달된다. Django urlesorver는 웹 페이지의 주소를 가져와 무엇을 할지 확인한다.(urlesorver는 웹 사이트 주소인 URL을 통해 이해한다.) urlesorver는 단순히 패턴 목록을 가지고 와 URL과 일치하는지 처음부터 하나씩 대조해 식별한다. 만약 일치하는 패턴이 있다면 Django는 해당 요청을 관련된 함수(View)에 넘겨준다. View에서는 받은 요청을 확인하고, Model에 해당 지시를 내린다. Model은 데이터 베이스에서 요청된 데이터를 찾아 View에게 전달하고 View는 다시 데이터를 Template에 전달하여 Template에 정의된 HTML 파일과 조합해 사용자에게 데이터를 보여준다.

Quick Start

1. 파이썬 설치

https://www.python.org/

 

Welcome to Python.org

The official home of the Python Programming Language

www.python.org

Python 공식 사이트의 Download 메뉴에 들어간 후 본인의 운영체제에 적합한 설치파일을 다운로드 받을 수 있다.

Add Python 3.5 to Path를 체크하면 커맨트창 모든 경로 상에서 Python 명령어를 사용할 수 있게 된다. (버전마다 문구가 상이함)

 

설치가 완료되었다면 CMD 창을 열고 pip -V를 입력한다. 아래와 같이 출력되면 정상적으로 설치되었다.

2) Django 설치

2-1) Python 가상 환경 생성

python -m venv 가상환경이름

Django 프로젝트를 시작할 빈 디렉토리에서 먼저 위 명령어를 통해 파이썬 가상환경을 생성한다.

위 명령어를 실행하면 설정한 가상환경 이름의 디렉토리가 만들어진다.

 

2-2) 가상환경 진입

source 가상환경이름/Scripts/activate

※가상환경 벗어나는 방법

deactivate

가상환경을 벗어나고 싶아면 위 명령어를 통해 벗어날 수 있다.

2-3) Django 설치

pip install django

2-4) Django 프로젝트 생성

django-admin startproject 프로젝트명
# OR
python -m django startproject 프로젝트명

위 명령어를 사용해 Django 프로젝트를 생성할 수 있다.

cd 프로젝트명

만들어진 Django 프로젝트 디렉토리 내에서 모든 개발 과정을 진행하게 되기 때문에 프로젝트 내부로 들어간다.

2-5) Django 프로젝트 데이터베이스 마이그레이션

python manage.py migrate

Django 프로젝트가 처음 생성되면, 기본적으로 한번 Django의 데이터베이스를 마이그레이션 해준다.

2-6) Django 프로젝트 서버 실행

python manage.py runserver

위 명령어를 통해 Django 프로젝트를 실행할 수 있다.

[127.0.0.1:8000] 혹은 [localhost:8000]으로 접속하면

위와 같이 Django 프로젝트가 잘 실행된 모습을 볼 수 있다.

https://velog.io/@mijin60/Django-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0

Django Template grammar

Django의 템플릿 시스템은 템플릿 코드를 해석해서 템플릿 파일을 만드는데, 이 과정을 렌더링이라고 하며, 결과물인 템플릿 파일은 HTML, XML, JSON 등의 텍스트 파일이다.

 

■ 템플릿 변수

  • 사용 형식 : {{ variable }}
  • 변수명은 일반 프로그래밍처럼 문자, 숫자, 밑줄(_) 사용하여 정의
  • 변수 속성 접근도 도트(.)표현식으로 가능

■ 템플릿 필터

  • 필터는 파이프(|) 문자 사용
  • Django는 약 60여가지의 필터를 제공하고 있으며, 사용자 정의 필터도 만들 수 있다.

{{ name|lower}}  # name 변수값의 문자를 소문자로 변경

{{ text|escape|linebreaks }}  # (필터 체인 가능) text 변수값 중 특수문자를 이스케이프하고, 
그 결과 스트링에 <p>태그 적용

{{ bio|truncatewords:30 }}  # (인자있는 필터) bio 변수값 중 앞에서 30개 단어만 보여주고, 
줄바꿈 문자는 모두 없애줌

{{ list|join:" // " }}  # list 변수값에 join 적용, 필터 인자의 빈칸은 따옴표로 묶어줌
list가 ['a', 'b', 'c']인 경우, "a // b // c"

{{ value|default:"nothing" }}  # value 변수값이 False이거나 없는 경우, "nothing"으로 보여줌

{{ value|length }}  # value 변수값의 길이 반환(스트링이거나 리스트인 경우도 가능)

{{ value|striptags }}  # value 변수값에서 HTML tag 없애줌 

{{ value|pluralize }}  # 복수 접미사 필터, value 변수값이 1이 아니면 복수 접미사 s 붙임

다른 복수 접미사 es, ies는 필터에 인자를 사용함
{{ value|pluralize:"es" }} 또는 {{ value|pluralize:"ies" }}

{{ value|add:2 }}  # 더하기 필터, value 변수값이 4이면, 결과는 6
* 정수가 아닌 경우, 더하기를 시도하고, 실패하면 빈 문자열 반환

 

■ 템플릿 태그

  • 텍스트 결과물을 만들기도 하고, 템플릿 로직 제어, 외부 파일을 템플릿 내 로딩 등의 기능
  • 사용 형식 : {% tag %}   # 시작 태그와 끝태그가 있는 태그가 있다.

{% for %} {% endfor %}

리스트에 담겨 있는 항목을 순회하면서 출력 가능

<ul>
{% for athlete in athlete_list %}
	<li>{{ athlete.name }}</li>
<% endfor %}
</ul>

※ {% for %} 태그 loop 사용할 수 있는 변수

 

{% if %} {% endif %}

  • 변수를 평가하여 True이면 바로 아래 문장 실행
  • 중첩 if문 {% if %} {% elif %} {% else %} {% endif %} 가능
  • {% if %} 태그에 필터와 연산자 사용 가능
  • 필터가 스트링 반환 시 산술연산 안됨
  • and, or, not, and not, >, >=, <, <=, ==, !=, in, not in 연산 가능

 

{% csrf_token %}

  • CSRF 공격 방지 위한 태그이며, Django 내부적으로 CSRF 토큰값의 유효성을 검증함
  • <form> 태그 바로 첫 줄에 넣어줌

 

{% url %}

  • html 소스에 URL 하드코딩하는 것을 방지하기 위함
  • 사용 형식 {% url 'namespace:view-name' arg1 arg2 %}
    ※ namespace 는 include() 함수 또는 app_name 변수에 정의한 공간의 이름

 

{% with %}

with ~ endwith 내에서 특정 값을 변수에 저장해두는 기능

{% with total = business.employees.conut %}
	{{ total }} people works at business
{% endwith %}

 

{% load %}

  • 필터 및 사용자 정의 태그를 로딩해줌

 

#템플릿 주석

  • {# #} # 한 문장의 전부 또는 일부 주석 처리
  • {% comment %} # 여러 줄 주석문

 

# XSS 공격 방지 위한 자동 이스케이프 기능

  • > (less than)     &lt;
  • < (greater than)  &gt
  • ' (single quote)  &#39
  • " (double quote)  &quot
  • & (ampersand)     &amp

※ 자동 이스케이프 기능 비활성화 필요 시

safe 필터 사용 {{dat|safe }} 
autoescape 태그 사용 {% autoescape off %}

 

# 템플릿 상속

  • 상속하는 부모 템플릿에서는 {% block %} {% endblock %} 태그 사용
  • 상속 받는 자식 템플릿에서는 {% extends %} 태그를 상단에 표시
728x90