Python - Django 웹 만들기 (1)

3 분 소요

파이썬 Django 웹 프로그래밍 (1) : 장고 웹 프로젝트 시작하기

Django(장고)란?

파이썬 오픈소스 웹 프레임워크이다.(웹 프레임워크 : 웹 개발에 필요한 기능을 미리 만들어 놓은 것) 장고는 웹 개발에 필요한 기능을 미리 만들어 놓았기 때문에 웹 개발자는 이를 사용하여 웹 사이트를 빠르게 개발할 수 있다. 어플리케이션을 만드는 데 집중할 수 있어서 유연성이 향상될 수 있다. Django(장고)를 사용한 웹의 대표적인 예로는 인스타그램, 핀터레스트, 넷플릭스, 스포티파이, 레딧 등이 있다.

장고의 특징

사용자 인증, 콘텐츠 관리, 사이트 맵, RSS 피드 등의 기능을 제공한다.

아키텍처

장고는 MVT(Model-View-Template) 아키텍처를 사용한다.

  • Model : 데이터베이스에 저장되는 데이터를 관리하는 부분
  • View : 웹 요청을 받고, 전달받은 데이터를 처리해서 가공하는 부분
  • Template : 사용자에게 보여지는 화면을 만드는 부분

이 예제에서는 Django(장고)를 사용하여 웹 페이지를 만들어보자.

예제 순서

  • 예제 (1) 기본적인 서버 구축, 실행
  • 예제 (2) 기본 : 장고 템플릿 시스템을 알아본다. (index.html)
  • 예제 (3) 응용 : 계좌 잔고 확인 페이지를 만들어본다. (balance.html)

1. 장고 설치

설치 : pip install django

경로 : Django/mySite

django-admin : 장고 프로젝트를 생성하거나 관리하는 커맨드라인 도구

django-admin startproject Investar

2. 장고 프로젝트 생성

python manage.py migrate : 데이터베이스 초기화

: 서버 실행

python manage.py runserver 0.0.0.0:8000

프로젝트 생성

django-admin startproject mySite

프로젝트 기본구조

 mySite
     ㄴ mySite
         ㄴ __init__.py : 해당 디렉터리가 패키지의 일부임을 알려주는 역할
         ㄴ settings.py : 웹사이트 설정
         ㄴ urls.py : 웹사이트의 URL과 뷰를 연결하는 URLconf 
         ㄴ wsgi.py : WSGI 호환 웹 서버의 진입점을 작성하는 파일
     ㄴ manage.py : 장고 프로젝트와 다양한 방법으로 상호작용하는 커맨드라인의 유틸리티

여기에서 mySite가 프로젝트의 전반적인 설정을 담당하는 디렉터리이고 manage.py는 프로젝트 관리를 위한 커맨드라인 유틸리티이다.

서버 실행

python manage.py runserver 0.0.0.0:8000

(또는)

python manage.py startapp hello


프로젝트 환경 설정

Host IP 설정

파일 : settings.py

ALLOWED_HOSTS = ['127.0.0.1', 'localhost']

장고 어플리케이션 생성

python manage.py startapp hello

hello 라는 이름의 앱 생성

python manage.py migrate : 데이터베이스 초기화

어플리케이션 등록

파일 : settings.py

INSTALLED_APPS = [...,'hello']

URLconf 설정

파일 : urls.py import : hello/views.py를 import views.py에 있는 sayHello 함수를 사용하기 위해 hello/views.py를 import

from hello import views
urlpatterns = [..., path('hello/', views.sayHello)]

/hello 로 요청이 들어오면 views.sayHello 함수를 호출한다.views.py에 있는 sayHello 함수를 호출한다.

변경 전

from django.contrib import admin
from django.urls import path

urlpatterns = [
    path('admin/', admin.site.urls),
]

변경 후

hello 앱의 views.py에 있는 sayHello 함수를 호출한다. url로 접근할때, re_path를 사용하면 정규표현식을 사용할 수 있다.

^(?P[A-Z][a-z]*)/$ (정규표현식) : 대문자로 시작하고 소문자로 끝나는 문자열

예: http://127.0.0.1:8000/Hello/

URL Path에 대문자로 시작하고 소문자로 끝나는 문자열을 입력하면 views.py에 있는 sayHello 함수를 호출한다.

from django.contrib import admin
from django.urls import path, re_path #re_path : 경로에 정규표현식을 사용하기 위해 추가
from hello import views #hello 추가

urlpatterns = [
    path('admin/', admin.site.urls),
    re_path(r'^(?P<name>[A-Z][a-z]*)/$', views.sayHello), #규칙 : 대문자로 시작하고 소문자로 끝나는 문자열. # P: parameter <name>: name이라는 이름으로 파라미터를 받겠다.
]

접속하기

http://127.0.0.1:8000/Hello/


잠깐! 정규표현식

 ^ : 문자열의 시작
 $ : 문자열의 끝
 . : 임의의 문자 1개
 * : 앞 문자가 0개 이상
 + : 앞 문자가 1개 이상
 ? : 앞 문자가 없거나 1개
 [] : 문자의 집합이나 범위([a-z]: a부터 z까지, [^0-9]: 숫자가 아닌 문자)
 {} : 앞 문자의 개수({2}: 2개, {2,4}: 2개 이상 4개 이하)
 () : 그룹화(1개의 문자처럼 인식)
 | : or 연산
 \d : 숫자([0-9]와 동일). d는 digit의 약자
 \D : 숫자가 아닌 것([0-9]를 제외한 문자)
 \s : 공백 문자(띄어쓰기, 탭, 엔터 등). s는 space의 약자
 \S : 공백 문자가 아닌 것
 \w : 알파벳 대소문자, 숫자([a-zA-Z0-9]와 동일). w는 word의 약자
 \W : non alpha-numeric 문자([a-zA-Z0-9]를 제외한 문자)
 (?P<이름>...) : 그룹에 이름을 지정
 (?P=이름) : 지정한 그룹 참조

view.py 수정 하기

생성된 앱의 기본 코드는 다음과 같다.

render : 템플릿을 로딩할 때 사용하는 함수 파일은 빈 파일이다. 이제 추가해보자.

수정 전

from django.shortcuts import render

# Create your views here.

수정 후

from django.shortcuts import render
from django.http import HttpResponse

def sayHello(request, name):
    html = '<h1>Hello, {}!</h1>'.format(name)
    return HttpResponse(html)

접속해보자.

관리자 페이지

http://local:8000/admin

관리자 계정 생성

python manage.py createsuperuser

  • ID : admin
  • #PW : 1111

http://127.0.0.1:8000/admin/ 접속

댓글남기기