본문 바로가기

Backup/Django

[Django #1] Django Web Development with Python Introduction


[본 튜토리얼은 pythonprogramming.net의 Django tutorial을 참고하여참고하여 만들었다.]


Django는 빠른 개발을 가능하게 하고  확장성 측면 유리한 full web framework 이다.

"Web Framework"이라 하면 웹 응용 프로그램을 만드는 목적에 필요한 기능들을 모두 제공한다라는 뜻이다.

예를 들어 Django를 통해서 아래와 같은 기능들을 직접 만들지 않더라도 쉽게 폼을 불러와 적용 할 수있다.

  • Databases
  • Users
  • Content Management
  • Dynamic Pages
  • 등등...

앞으로 진행할 tutorial에서는 Python 3.7 / Django 2.1.4을 사용할 것이며 간단한 게시판의 기능을 가지는 웹페이지 개발을 1차 목표로 하곘다. 기본적인 python3.7을 알아야 하며 django는 아래 명령어로 설치할수있다.



pip install django


최신버전 말고 버전을 지정해서 설치하고자 한다면


pip install django==2.1.4




Django에서는 기능별로의 application(project)를 만들어서 관리하는데 최초의 primary프로젝트는 필수로 있어야 하며 이 tutorial에서는 이를 mysite이름으로 app만들어 진행하겠다.

이 primary app에서는 전체 프로젝트의 settings, urls 같은걸 관리하는 용도로 사용된다.

Django프로젝트 생성을 위해선 아래와 같이 명령어를 친다.


django-admin startproject  mysite



생성된 프로젝트 내의 manage.py를 통해서 django app들을 관리하는데 터미널에 다음과 같이 치면 main이라는 별도의 app이 생긴다.


python3 manage.py startapp main


이러면 main이라는 app 폴더가 생기고 프로젝트는아래와 같은 구조가 된다,

main

-main (directory, your "primary" app) -mysite (directory, this is your new app) -manage.py (helper python script)


test를 위해 다음과 같이 치면 


python3 manage.py runserver


이런 화면이 나온다.


python3 manage.py runserver

Performing system checks... System check identified no issues (0 silenced). You have 15 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions. Run 'python manage.py migrate' to apply them. January 10, 2019 - 18:50:09 Django version 2.1.5, using settings 'mysite.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK.

일단 migration 관련된 에러는 무시하고

http://127.0.0.1:8000. 에 장고앱이 실행되는걸 확인해볼수있고 
browser를 통해 접속하면 아래와 같은 기본 페이지에 접속하게 된다.



python tutorials



자 이제 Django에 대한 기본 철학 및 구조에 대해 알아보자!

Django는  Model View Controller paradigm 가지고 설계하는 구조이다.


1) Model(데이터) - models.py
Candidate 클래스의 형식대로 데이터를 DB에 저장, 불러옴


2) View(화면) - templates
화면에 어떤 장면을 보여줄지를 결정


3) Controller(조율) - views.py
Candidate 모델에서 데이터를 읽어, index.html에 전달


* 장고 웹 프레임워크 개념정리 : https://youtu.be/LYmZB5IIwAI

(동영상에서 잘못된 부분: 장고에서 뷰에 해당하는것이 MVC에서 컨트롤러이고, 템플릿에 해당하는것이 MVC의 뷰

즉, 입력을 처리하는부분은 장고에서 View고 Model과 상호작용을 통해서 최종적으로 Template을 통해서 출력)




MVC(모델, 뷰, 컨트롤러)라고 부르는 반면, 역방향으로 작동하는 것을 더 상상해보자
1. 사용자는 URL을 방문하고 컨트롤러(urls.py)에 접속
2. 컨트롤러는 특정 보기 (views.py).를 가리킬 것이다. 
2. 그런 다음 해당 뷰는 모델과의 인터페이스(꼭 아니여도 되지만)를 제공한다.

이렇게 paradigm이 처음에는 굉장히 귀찮고 가치없는것처럼 보이지만
시간이 지남에 따라 웹사이트에 기능을 계속 추가해갈때

Django는 이 paradigm이 전체적인 구조를 유지하면서 새로운 기능들을 추가할수있게 확장성을 제공해 줄것이다.


python tutorials




이제 홈페이지에 간단한 코드 몇개를 봐보자.

아래와 같이 만들면 모델이 없지만 primary app에서 url이 요청한 결과를 controller에게 넘겨줘야 한다.


그럼 다음 파일로 가보자: mysite/mysite/urls.py:


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

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


여기 URL이 딱 하나 있다. Django는 웹사이트를 앱의 모음으로 본다.
그래서 사실 "기본" 앱 안에 있는 urls.py 파일은 보통 여러분의 앱을 가리킬 것이다.
앱을 어떻게 가리킬까? 단지 그 앱의 urls.py 파일을 가리킬 뿐이다! 이제 다음을 추가해 봅시다.


from django.contrib import admin

from django.urls import path, include urlpatterns = [ path("", include('main.urls')), path('admin/', admin.site.urls), ]


django.urls 로 부터 "include"를 포함시키는걸 잊지말자.

mysite/mysite/urls.py에서 main 이라는 앱의 url.py에 설정된 기능들로 view가 뿌려지게끔 하였으니 

mysite.main.urls.py로 가서 무엇을 보여주게 할건지 수정하자.



mysite/main/urls.py

from django.urls import path from . import views app_name = 'main' # here for namespacing of urls. urlpatterns = [ path("", views.homepage, name="homepage"), ]


아까처럼 path를 추가하고 view도 import 하자. app name도 설정하자.

Django는 매우 모듈형이어서, 아주 쉽게 URL경로를 변경하거나 다른 응용프로그램을 사용하게끔 쉽게 컨트롤 할수있다.

그래서 변수사용이 많다.

이제 controller가 준비되었다. 

누군가 홈페이지를 방문할 때, Django는 먼저 mysite/mysite/urls.py 를 보고 mysite/main/urls.py으로 와서 지정한 views homepage로 가게된다.


mysite/main/views.py
from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
def homepage(request):
    return HttpResponse("pythonprogramming.net homepage! Wow so #amaze.")

python tutorials





'Backup > Django' 카테고리의 다른 글

[Django #6] User Registration  (1) 2019.02.04
[Django #5] CSS  (0) 2019.02.03
[Django #4] Views and Templates  (0) 2019.02.03
[Django #3] Admin and Apps  (1) 2019.02.02
[Django #2] Models  (0) 2019.02.02