본문 바로가기

파이썬 장고

장고(python 웹 프레임워크)

장고란?

  • 파이썬으로  작성된 오픈소스 웹 애플리케이션 프레임워크
  • 장고는 일반적으로 MTV(Model-Template-View)에 따른 일정한 룰에 의해 진행됨
  • MVC패턴에서 컨트롤러 역할을 장고에서는 뷰가 담당
  • 뷰의 역할을 장고에서는 템플릿이 담당
  • 가상환경 만들어야 함 

각 파일들

  • Manage.py : 장고 앱을 관리하기 위한 각종 명령어 내장하고 있는 스크립트 파일.
  • <프로젝트 폴더> → startproject
  • Setting.py : 프로젝트 전반에 걸친 각종 설정 파일
  • Urls.py : 프로젝트를 실행시킬 때 어떤 웹 앱의 페이지를 어떤 주소에 연결시킬 지를 정의하는 파일
  • Wsgi.py : 배포
  • <웹 앱 폴더> -> startapp
    -admin.py : 장고 관리자 웹을 구성하기 위해 필요한 파일
    -app.py : 장고 웹 앱에 대한 설정을 위한 파일
    -models.py : 데이터베이스에 정의하기 위한 모델들을 정의해두는 코드를 위한 파일
    - view.py : 웹 페이지나 웹 요청 등을 처리하는 파일(라우팅)

장고의 흐름

  • 클라이언트가 요청을 보내면 URL을 파악해 urls.py에서 찾게 됨
  • Urls.py에는 특정 함수와 연결된 부분 존재한다.
  • URL에 해당하는 함수를 views.py에 찾아 실행한다.
  • Views.py에 있는 함수는 데이터를 처리해 사용자에게 보내게 된다.
  • Templates에 존재하는 html을 응답에 담거나, models.py에 존재하는 데이터를 응답에 담아 클라이언트에게 전달한다.

HttpResponse: views.py

  • HttpResponse라는 객체를 넘겨준다. (html파일을 사용하지 않고 클라이언트에게 유사한 response를 던짐)

path('',views.index,name='index')

 

Þ‘ ‘ urlroute에서 사용된 경로 지정 : ‘ ‘ -> 기본 웹 페이지를 요구했을 때 views.py파일의 index함수를 호출해라.
Þ두번째 파라미터: 해당 URL에 상응하는 view지정
Þ세번째 파라미터: 아규먼트 옵션(URL의 이름)
 

템플릿 기본

path('',include('first.urls')) : 하나의 프로젝트 내에 여러 앱이 존재할 수 있기 때문에 각 앱에 base path를 지정하고 유지보수를 용이하게 하기 위해서

  • templates: html문서 안에 python 코드를 집어넣어 동적으로 html페이지를 작성하도록 하는 것
  • 디렉토리에 templates를 만들면 장고는 템플릿을 찾게 됨
  • 장고 템플릿을 사용해서 html파일과 views.py를 연동
Þ웹 앱 폴더(first) 내에 templates폴더를 생성하면 폴더 내의 경로에 html파일을 두고 views.py와 연결할 수 있다.!!!!!!!
ÞSettings.pyINSTALLED_APPS에 추가!!!!!!
Þ추가해야만 templates에서 인식할 수 있음
 

render

Render는 html을 활용하여 responses를 생성하는 메소드

Def home(request):
      return render(request, ‘home.html’)

Render함수로 home.html을 응답에 포함시켜 던져준다.
request객체를 첫번째 인수로 받고, template이름을 보통 두번째 인수로 받으며, context사전(딕셔너리)형 객체를 세번째 인수로 받는다.

 

<a href="{% url 'select'%}">시작하기~</a>

: {%    %} 템플릿 언어

템플릿 언어를 사용해 실제 주소가 아닌 urls.py에 정의된 name으로 코딩할 수 있다.

 

스태틱 파일 띄우기

  • js, css, 이미지 등의 파일을 사용하는데, 장고에서는 static파일이라고 부른다.

 

템플릿 확장

  • Static파일을 체계적으로 관리하기 위해 settings.py의 BASE_DIR밑에 “static”이라는 서브 폴더를 만들어 static파일들을 넣는다.
  • {% load static %}코드를 추가해 스태틱 모듈을 불러올 수 있다.

 

장고 모델

모델링(model)
Ex) 맛집(주소(문자열), 명칭(문자열), 전화번호, 사진…)
평가(별점, 글쓰기, 글쓴이)
평가인(아이디, 이메일)
모델 클래스 : 어떠한 형태의 정보가 저장될 지 정의
장고에서는 모델 클래스를 데이터베이스의 실제 테이블로 생성하는 명령어를 제공

 

MTV 패턴

Model : 모델 클래스, 데이터 객체 정의와 그 데이터(models.py)
Template : 사용자에게 보여지는 인터페이스 화면

(templates/ * .html)

View : 데이터를 가져와 가공하여 그 결과를 템플릿에 전달

(views.py)

 

Form:

<form action="{% URL 'login' %}" method="get">

        age : <input type="text" name="age"> <br>

        <button type="submit">결과</button>

</form>

Þ장고에서는 폼을 구성하기 쉽도록 지원하고 있음
Þ모델 클래스의 모델 정보들과 연동
ÞValidation 체크가 수월해짐
Þ악의적인 데이터 필터링 가능
Þ짧은 코드로 폼 인터페이스 구현 가능
  • Form : 직접 필드를 정의하고 위젯 설정 할 수 있다.
  • BooleanField, CharField, DateField, EmailField, FileField
  • 위젯 속성으로 화면에 보여질 입력 칸의 형태를 정하게 된다.
  • 위젯 속성을 따로 지정 안 하면 기본 위젯은 input type=“text”

 

Model Form

Form만으로도 데이터를 받아서 추가할 수 있지만, 이렇게 할 경우 속성이 추가되면 form도 그 때마다 수정을 해줘야 한다. Form으로 받은 데이터를 다시 꺼내서 모델 클래스의 인스턴스에 넣어 줘야 하는 번거로움..!!
 
ÞModel Form : 모델, 필드를 지정해주면 ModelFormForm필드를 생성해준다.
ÞMeta 클래스 :  모델에 대한 다양한 사항을 정의하는데 사용할 수 있다.
 

ORM(Object-Relational Mapping)

  • 객체와 관계형 데이터베이스를 연결해주는 것