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파일을 만드는..
아래와 같은 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() 꼭 작성해 주어야하며 ..
클래스형 뷰? 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 템플릿 시스템은 템플릿 문법으로 작성된 템플릿 코드를 해석해 템플릿 파일로 결과물을 만들어준다. 템플릿 코드를 템플릿 파일로 해석하는 과정을 장고에서 '렌더링' 이라고 부른다. 템플릿 변수 템플릿 코드에서 변수를 사용할 수 있다. 변수는 아래와 같은 형식을 사용한다. {{ 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 : 데이터 조회 데이터베이스로 부터 데이터를 조회하..
models.py class Question(models.Model): question_text = models.CharField(max_length=200) pub_date = models.DateTimeField(verbose_name='date_published') def __str__(self): return self.question_text 어드민 사이트에 등록할 모델 클래스(models.ModelAdmin상속 받은 클래스)에 search_fields를 추가하면 검색 박스를 표시할 수 있다. 검색 박스에 단어를 입력하면 'LIKE'쿼리를 이용해서 question_text필드를 검색한다. search_fields에 여러 필드를 지정하면 지정된 필드들에 대해 입력된 단어를 검색한다. # Regist..
models.py class Question(models.Model): question_text = models.CharField(max_length=200) pub_date = models.DateTimeField(verbose_name='date_published') def __str__(self): return self.question_text 어드민 페이지에 등록할 모델 클래스에 list_filter속성을 추가하면 우측에 필터 사이드 바를 붙일 수 있다. 이 필터에는 모델의 필드 타입에 따라 적절한 항목들을 보여준다. 아래 예시에서는 pub_date는 DateTimeField이므로 이에 맞게 옵션을 제공하는 것이다.
models.py class Question(models.Model): question_text = models.CharField(max_length=200) pub_date = models.DateTimeField(verbose_name='date_published') def __str__(self): return self.question_text admin사이트에 들어가서 테이블 레코드 리스트를 보면 아래와 같이 나타난다. 여기에 나타나는 제목들은 각 모델들의 __str__()메소드의 리턴값을 레코드 제목으로 사용한다. class Question(models.Model): question_text = models.CharField(max_length=200) pub_date = models.DateT..
models.py 아래와 같이 모델들이 선언되어있다고 하자, Question는 Choice의 Foreign Key이다. 즉 서로 연관된 데이터라는 의미이다. 연관된 데이터인 만큼 데이터 CRUD를 할때 같은 한 페이지에서 관리하면 더 좋다 class Question(models.Model): question_text = models.CharField(max_length=200) pub_date = models.DateTimeField(verbose_name='date_published') def __str__(self): return self.question_text class Choice(models.Model): question = models.ForeignKey(Question,on_delete=m..
views.py & admin.py class Question(models.Model): question_text = models.CharField(max_length=200) pub_date = models.DateTimeField(verbose_name='date_published') def __str__(self): return self.question_text 위와 같은 모델 하나가 정의되어있다고 가정하자 그리고 admin.py에 아래와 같이 입력해 어드민 사이트에 등록했다고 가정하자 admin.site.register(Question) 이 형태에서 기본적으로 아래와 같이 어드민 페이지에 데이터 입력창이 나온다 필드 분리 Document : https://docs.djangoproject.com/..
views.py & admin.py 아래와 같이 views.py에 Question모델 클래스가 정의되어있다고 가정하자 class Question(models.Model): question_text = models.CharField(max_length=200) pub_date = models.DateTimeField(verbose_name='date_published') def __str__(self): return self.question_text 그리고 admin.py에 admin.site.register()를 통해서 모델을 등록하였다 admin.site.register(Question) 이제 admin사이트에 들어가서 새로운 데이터를 추가한다고 가정해보자. 기본적으로 모델의 필드 정의 순서대로인 qu..
Hoplin
'Django' 태그의 글 목록