Back-End/Python Django

Django의 Model & ORM Django 는 MVT(Model View Template, MVC와 동일한 의미)패턴을 사용하는 프레임워크이다. Django에서는 Model의 디폴트 DB를 sqlite3로 사용하고 있으며, 이 외 RDBMS와 연동하여 사용할 수 있도록 ORM(Object Relation Mapping, 객체-관계 매핑)을 제공한다. 그리고 우리는 Django Application내에 models.py에 ORM 클래스를 작성하여 DB를 생성하여 준다. 그 후 makemigrations 와 migrate를 이용해서 DB를 초기화해준다. 간단히 이 두 명령어의 차이점을 짚고 넘어가면, makemigrations는 models.py에서 변경한 내용을 기반으로 migration파일을 만드는..
static파일 처리하는 과정 static 파일이 포함된 프로젝트에서 서버로 배포하기 위해서는 아래 두가지 과정을 거쳐야 한다. static 파일의 위치를 설정해주기 static파일을 한곳에 모으기 이 과정들을 하기 위해서는 아래와 같은 처리들을 해주어야한다. 앱 내에 static 폴더를 만들어서 위치를 지정해 준다. settings.py에 static폴더 위치를 기재해 주어야한다. python3 manage.py collectstatic 명령어를 통해서 static파일을 모아준다. Django는 Web Application 프레임 워크이다. Web Application은 요청에 맞춰 데이터를 처리한 후 Response를 하는 역할을 한다. static 리소스라는것은, 말 그대로 '정적' 인 컨텐츠이다...
Django를 실제 서비스 상태로 놓을때 settings.py의 DEBUG 변수 값을 False로 바꿔주어야 한다. Django의 runserver는 개발단계에서 단지 일시적으로 웹서버 기능을 하기 위한 것이다. runserver를 실서비스에서 사용하지 않는 이유 Django의 runserver는 보안, 성능의 한계가 있어서 실서비스에는 부적절하다. 그래서 일반적으로 WAS + WSGI 조합을 주로 사용한다. 가장 흔한 조합은 NginX + Gunicorn조합을 많이 사용한다. NginX + Gunicorn + Django에 대한 포스트는 다음에 다루어 보도록 하겠다. DEBUG=False 상태에서 static파일 접근하기 DEBUG=False상태에서 static 파일에 접근하기 위해서는 runserve..
아래와 같은 VIew가 있다고 가정하자. 이 View는 함수형 View로 작성이 되어있다. 이 함수형 View를 클래스형 View로 바꿔보자 from django.shortcuts import get_object_or_404, render,redirect from django.http import HttpResponseRedirect from django.urls import reverse from polls.models import Choice, Question def index(request): latest_question_list = Question.objects.all().order_by('-pub_date')[:5] context = {'latest_question_list': latest_qu..
Class View를 작성하다 보면 Template에게 context변수들을 전달하기 위해서 get_context_data()메소드를 오버라이딩 하여 사용한다. 그리고 주의할 점은 get_context_data()를 오버라이딩 한 후 super().get_context_data()를 꼭 작성해 주어야한다. 기본 타입은 아래와 같은 형태를 띄고 있다. class TestView(TemplateView): def get_context_data(self, **kwargs): context = super().get_context_data() return context 그렇다면 이 get_context_data()는 어떤 방식으로 작동하며 왜 super().get_context_data() 꼭 작성해 주어야하며 ..
apps.py? django application을 생성하면 여러 파일들이 생기는데 그중 apps.py라는 파일이 있다. 이 파일은 프로젝트 디렉토리의 settings.py에 INSTALLED_APPS에 디폴트 app 클래스를 등록하여 프로젝트 애플리케이션을 등록해 사용하곤 한다. 아래와 같이 말이다. 위 사진을 보면 Books.Config라는 클래스를 INSTALLED_APPS에 등록해주어 사용한다. apps.py의 활용 그렇다면 단지 apps.py는 이러한 용도만 있을까? 이외 용도가 더 있다. 예를 들어 홈화면을 만드는 코드라고 가정하자. 홈화면에는 각 모델들의 index페이지로 들어가는 링크들이 있다고 가정하자. # Project Directory's : views.py from django.vi..
클래스형 뷰? View는 요청을 받아 응답을 반환해주는 호출 가능한 "객체"이다. 함수로도 뷰를 작성할 수 있지만, 클래스로도 작성을 해줄 수 있다. 클래스로 작성된 뷰를 "클래스형 뷰"라고 부르며, 이를 사용하면 상속과 믹스인 기능을 사용해 코드를 재사용할 수 있고, 뷰를 체계적으로 작성할 수 있다. 클래스형 뷰의 시작점 앞에서 함수형으로 뷰를 작성할 때는 아래와 같은 형태로 작성을 하였다. urlpatterns = [ path('', views.index,name = 'index'), path('/',views.detail,name='detail'), path('/results/',views.results,name='results'), path('/vote/',views.vote,name='vote'..
Django에서는 form을 생성하는 클래스를 제공한다. 이는 django.forms.Form클래스를 상속해서 만들 수 있다. class NameForm(forms.Form): # CharField타입의 디폴트는 TextInput위젯이다. 만약 textarea로 변경하려면 widget=forms.Textarea로 변경해주어야한다. your_name = forms.CharField(label="Your Name",max_length=100) your_name2 = forms.CharField(label="Your Name 2", max_length=100, widget=forms.Textarea) 위 예제는 두개의 필드가 있는 폼 클래스이다. 기본적으로 label속성은 각 별 태그의 값을 의미하고, 이는 ..
Django는 템플릿을 상속시킬 수 있는 기능을 가지고 있다. 템플릿 상속의 장점은 템플릿 코드를 재사용할 수 있다 사이트의 룩 앤 필을 일관성있게 보여줄수 있다 와 같은 장점들이 있다. 부모 템플릿은 뼈대를 만들고, {% block %}태그를 통해 하위로 상속해줄 부분을 지정해 주면, 자식 템플릿은 부모 템플릿의 뼈대를 그대로 재사용하고 {% block %}부분만 채워주면 된다. 채워줄때는 부모 템플릿에서 지정한 블럭 이름을 block 옆에 붙여 채우고자 하는 블럭을 지정해주면 된다. {% block sidebar %} Home {% endblock %} {% block content %} {% endblock %} {% extends "inheritTest/parent.html" %} {% block..
Django 템플릿 시스템은 템플릿 문법으로 작성된 템플릿 코드를 해석해 템플릿 파일로 결과물을 만들어준다. 템플릿 코드를 템플릿 파일로 해석하는 과정을 장고에서 '렌더링' 이라고 부른다. 템플릿 변수 템플릿 코드에서 변수를 사용할 수 있다. 변수는 아래와 같은 형식을 사용한다. {{ variable }} 변수 속성에 접근하기 위해서 '.' 연산자가 있는데 이 연산자 해석은 아래와 같다. Dictionary타입인지 확인한다. 딕셔너리 타입인 경우 key값으로 해석한다 변수의 속성을 찾는다. 있다면 해당 변수의 속성으로 해석한다 리스트 속성인지 확인한다. 리스트 속성이면 인덱싱을 한다 위 세가지 모두 아닌경우 빈 문자열로 반환한다. 만약 이 반환되는 문자열을 바꾸고 싶다면 settings.py의 TEMPL..
Django는 파이썬 쉘을 이용해 데이터를 관리할 수 있는 API를 제공한다. ORM을 통해서 데이터에 대한 CRUD를 실습해보자 CRUD는 아래 네가지를 일컫는 말이다. Create Read Update Delete Django 쉘을 사용하기 위해서는 아래 명령어를 입력해 준다. python3 manage.py shell Create : 데이터 생성 / 입력 테이블에 레코드를 생성하는 것이다. 레코드를 생성하기 위해서는 필드값을 지정해 객체를 생성한다. 레코드를 생성해준 뒤에는 꼭 save()메소드를 호출해 주어야 한다. 이 이유는 save()명령을 실행하기 전에는 메모리에서만 변경이 되기 때문이다. 이는 SQL용어의 INSERT랑 동일하다. Read : 데이터 조회 데이터베이스로 부터 데이터를 조회하..
기본적으로 생성되는 장고 어드민 페이지 title은 아래와 같이 Django administration이라는 값으로 설정되어있다 이 값을 바꾸기 위해서는 프로젝트 디렉토리의 urls.py에서 설정해주면 된다. django.contrib 의 admin을 import 해준다. 그 다음 admin site의 site header, index title, site title변수를 오버라이딩 해서 재정의해주면 된다. // 프로젝트 디렉토리의 urls.py from django.contrib import admin from django.urls import path,include admin.site.site_header = "Simple Vote System" admin.site.index_title = "Adm..
Hoplin
'Back-End/Python Django' 카테고리의 글 목록