인프런의 이진석 강사님의 장고강의를 참고 ModelForm 장고 Form을 상속받음 지정된 Model로부터 필드정보를 읽어들여, Form Fields를 세팅할 수 있다. 내부적으로 Model instance 생성하여 저장(create)하거나 업데이트(update)함 유효성 검증에 통과한 값들로, 지정된(연결되어 있는) Model instance로의 저장(save)이 가능. 저장된 객체가 이미 존재한다면(pk가 이미 있다면) update되고, 그렇지 않으면 create됨 일반 Form과 Model Form의 차이 일반 Form은 만들 field를 일일이 설정하고(title,content..), 그 field들의 속성도 설정해줘야 함(Charfield같은 것) 모델 Form은 어떤 모델과 연결할지, 그리고 ..
인프런 이진석 강사님의 장고 강의를 참고 1. HttpRequest HttpRequest 객체 현재 요청에 대해, 클라이언트로부터의 모든 요청 내용을 담고 있음. 즉 요청 메세지 전체를 parsing해서 가지고 있다고 보면 됨 FBV와 CBV둘 모두 당연히 접근가능하며, 접근 방식은 다르다 FBV : 매 요청 시마다 뷰 함수의 첫번째 인자 request로 전달됨 CBV : 매 요청 시마다 self.request를 통해 접근 Form 처리 관련 속성들 . request.method : 요청의 종류에 대한 정보. "GET","POST","PUT" 등으로 모두 대문자형태임 request.GET : GET 인자 목록 (QueryDict타입) . request.POST : POST 인자 목록 (QueryDict타..
인프런 이진석 강사님의 장고 강의를 참고 django Form의 SERIALIZER와의 유사점 결국 현업에서는 웹 api생성을 위해 drf를 만드는데, 그때 serializer를 사용하게 된다. 그 serializer와 지금 포스팅의 주제인 Form의 전체적인 메커니즘이 굉장히 유사하다! 따라서 장고 form을 잘 이해한다면 drf도 쉽게 배울 수 있다! 1. HTML Form 그냥 진짜 일반적인 HTML Form 클라이언트에서 사용자에게 입력폼을 제공하고, 이를 서버로 전송하고자 할 때 사용함 HTML Form 필수 속성 action : 요청을 보낼 주소. 빈값("")으로 두면 현재 페이지 url로 요청을 보낸다 method : 전송 방식으로 Get(데이터 조회)과 Post(생성,수정,삭제)에 주로 사..
인프런의 이진석 강사님의 장고강의를 참고 몇 가지 장고의 기본 decorator django.views.decorators.http require_http_methods : 인자로 get, post등의 메서드를 받는다. 지정된 메서드가 아니면 405 에러를 반환 require_get, require_post : get 혹은 post메서드만 허용 require_safe : 리소스의 변화를 일으키지 않는 안전한 메서드(Get, Head..)등만 허용 django.views.decorators.http login_required : 로그아웃 상황에서 해당 데코레이터가 적용된 뷰가 호출되려하면 바로 login_url로 redirect됨 참고 : login_url은 settings에서 설정가능하며, default..
인프런의 이진석 강사님의 장고강의를 참고 GenericDateViews 날짜 관련된 필터링이 제공되는 CBV 각 CBV명에 부합되는 값을 인자로 받는다 ex) YearArchiveView: YEAR인자를 받음 일반적으로 urls.에서 '/'와 같은 식으로 인자를 제공함 allow_future 모든 genericdateviews들이 가지고 있는 공통옵션 현재 시간 이후의 record를 queryset에서 제외시킬지에 관함 디폴트는 false GenericDateViews 종류 ArchiveIndexView : 지정 날짜필드 역순으로 정렬된 목록 YearArchiveView : 지정 year년도의 목록 MonthArchiveView : 지정 year/month 월의 목록 WeekArchiveView : 지정..
인프런 이진석 강사님의 강의를 참고 Generic display views 장고의 CBV중 두번째 카테고리에 속하는 Generic display views DetailView와 ListView가 있음 1.DetailView 기능 1개 모델의 1개 Object에 대한 템플릿 처리 모델명의 소문자 이름의 model instance를 템플릿에 전달. 아래 예시에서도 post라는 Post모델의 인스턴스를 템플릿에 전달한다 #views.py post_detail=DetailView.as_view(model=Post) 상속 BaseDetailView를 상속받음 얘는 SingleObjectMixin , View를 상속받음 SingleObjectTemplateResponseMixin을 직접 상속받음 TemplateRe..
django의 view함수를 활용하여, json기반의 api통신을 만들어 봄 1:N관계와 M:M관계를 모델로 만들고, get과 post를 통해 정보를 조회함 json기반의 api통신 백엔드 입장에서의 클라이언트는 프론트임. 그리고 프론트와의 통신은 (특히 3세대 SPA방식의 웹에서)주로 json형태의 파일을 주고 받는 것임 특히 프론트가 react를 사용할 경우, 'patch'를 사용해 json파일을 요청하거나 받아서 처리함 따라서 백엔드에서 프론트와 소통을 하는 것의 거의 대부분이 이 json을 다루는 것임 결국 장고 개발자가 drf로 까지 뻗어나갈 수 없는 이유이기도 하다! 0. 서버에 요청보내기 : Httpie server에 Http request를 보낼 수 있는 Httpie를 사용하여 요청을 보냄..
인프런 이진석 강사님의 강의를 참고 URLpatterns 우선 url로 접근이 오면 settings.py에 있는 ROOT_URLCONF에 적혀있는 urls.py파일로 보내진다 첫번째 urls.py에서는 /를 앞에도 뒤에도 붙이지 않는다. 자동으로 '/'를 붙여주기 때문 따라서, '127.0.0.1:8000/owners'와 같이 접근이 들어오면 아래예시에서 owners.urls로 전달된다 #첫번째 urls.py from django.urls import path, include urlpatterns = [ path('owners', include('owners.urls')), path('products', include('products.urls')), path('movies', include('movie..
장고의 CBV들 중, Baseview에 관함 인프런 이진석 강사님의 장고강의(장고 기본 CBV API BaseViews)를 참고 장고 restframework와 CBV 실제 현업에서는 보통 웹 API를 구현하기위해 django restframework를 사용하게 됨. 그러면 CBV몰라도 되지 않나? 싶지만 , 이미 장고 restframework에도 cbv컨셉이 들어가 있음. 따라서 CBV를 잘알면 장고 restframework에서도 충분히 활용할 수 있다 Baseviews 장고의 모든 클래스view들의 모체들 views, templateview, redirectview가 있음 View(클래스) baseview들의 모체. 즉 정말 글자그대로 모든 장고뷰의 모체이다. 이 view클래스를 cbv로서 쓸 일 자..
이진석 강사님의 장고강의를 참고 CBV 클래스 기반으로 만들어진 view 공통 기능이 존재한다면, 부모 클래스를 만들고 부모클래스를 다시 자식 클래스들에게 상속시켜주는 방식을 사용한다 참고로 FBV는 공통 기능에 장식자 문법을 적용한다. as_view()라는 클래스 함수를 사용해 클래스 기반 뷰 함수를 생성할 수 있다 장고의 기본 CBV 패키지 : django.views.generic에 있음(https://github.com/django/django/tree/main/django/views/generic) FBV와 CBV 함수 기반 뷰를 알아야 CBV가 어떻게 돌아가는지 알 수 있다! >> FBV도 사용할 것 FBV 예시. pk=pk인 Post를 들고와서 랜더링하고, 만약 일치하는 pk가 없어서 못들고오..
인프런의 이전석 강사님의 강의를 참고 View 1개의 HTTP 요청에 대해 1개의 뷰가 호출되어, 웹 클라이언트로부터의 HTTP 요청을 처리 함수의 형태로 구현하여, urls.py/urlpatterns에서 매핑시켜서 호출함(함수도 호출가능하다는 파이썬의 특성!) 크게 2가지 형태의 뷰 함수 기반 뷰(FBV) : 장고 뷰의 기본. 호출 가능한 객체 그 자체 클래스 기반 뷰(CBV) : 클래스.as_view()를 통해 함수같은 호출가능한 객체를 생성하여 리턴. 함수 기반 뷰에 비하여 상속이나 오버라이딩 등을 통해 훨씬 더 파편적으로(즉 일부만) 커스터마이징이 가능하다 아래는 FBV와 CBV예시. 추가 커마를 진행하지 않는 다면 CBV는 마술처럼 짧게 구현이 가능하다. CBV에서 커마를 진행할 경우, 장고의 ..
인프런 이진석 강사님의 강의를 참고 Migration 모델의 변경내역을 데이터베이스 스키마(실제 DB 내역)으로 반영시키는 효율적인 방법을 제공 모델 필드 관련된 어떠한 조그마한 변경이라도(실제로 Db Scheme에 가해지는 변화가 없더라도)발생 시에 마이그레이션 파일 생성 명령어. 맨 뒤에 을 붙이지 않으면 전체 프로젝트를 대상으로 실행됨 python manage.py makemigratins : 마이그레이션 파일 생성 python manage.py migrate : 마이그레이션을 db에 적용 미적용 마이그레이션 파일(makemigrations만 있고 migrate되지 않은 파일)부터 최근의 마이그레이션 파일까지 정방향으로 순차적으로 migrate진행 ex)5까지 migrate되었고, 7까지 migra..
인프런 이진석 강사님의 장고강의를 참고 그외에 다음 사이트를 참고함 https://velog.io/@jiffydev/Django-9.-ManyToManyField-1 DB테이블들의 관계는 1:1 , 1:M , M:M(Many to Many)가 있으며, 이를 장고 모델에서 표현하는 방식에 관한 포스팅 RDBMS에서의 관계 예시 1:1 models.OneToOneField 1명의 유저는 1 개의 프로필을 가짐 어느쪽에 FK를 설정해주든 별로 상관이 없다. 1:N models.ForeignKey 1명의 유저가 쓰는 다수의 포스팅과 댓글 1개의 포스팅에 달린 다수의 댓글 N측에 1에 대한 외래키(FK)를 심어야 함 M:N관계 models.ManyToMaynField 1개의 포스팅에 다수의 태그 & 1개의 태그에..
인프런의 이진석 강사님의 장고강의를 참고 Static file과 Media file static 파일 개발 리소스로서의 정적인 파일. 즉 프론트와 관련된 파일이라고 생각하면 편함(js,css,image..) 앱/프로젝트 단위로 저장 및 서빙 장고뿐 아니라 다른 언어 프레임워크에도 존재하는 개념 Media 파일 장고에만 있는 개념. 장고에서 media파일을 다루려면 pillow 라이브러리가 필요하다 모델의 FileField/ImageField를 통해 저장한 모든 파일 DB필드에는 저장경로를 저장하며, 파일은 파일 스토리지에 저장. 즉 실제로는 저장경로를 문자열로 저장하는 필드임! 프로젝트 단위로 저장 및 서빙이됨(앱 단위x) Media file 처리 순서 HttpRequest.Files를 통해 views단..
인프런의 이진석 강사님의 장고강의를 참고 queryset기능을 views.py에서 활용하여, 간단한 검색을 구현함 흐름 template에서 q라는 이름의 검색창을 form을 활용해 구현 해당 검색창에서 검색된 내용은, 'q'라는 값에 담겨서 views로 전달됨 views에서 해당 검색내용을 메세지에 포함하고 있는 객체들에 대한 queryset을 구현 구현된 queryset과 template으로 받은 q값을 , template을 다시 랜더링하면서 template에 전달 template은 받은 queryset과 q값을 적절하게 사용함 models.py Post에 대한 정보를 담고 있는 평범한 모델 #models.py from django.db import models class Post(models.Mode..