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를 사용하여 요청을 보냄..
장고의 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..
장고의 모델은 db와 연동되어 데이터에 관한 crud(create,read,update,delete)기능을 수행할 수 있다. crud기능 수행을 위한 장고의 명령어에 관한 포스팅 물론 정말 다양한 명령어가 있겠으나, 보편성이 높은 코어한 것들 위주로 정리함 장고 쉘 장고 & 파이썬 & db를 이것저것 테스트해볼 수 있는 곳 ipython을 설치하면 예쁘게 바뀐다 python manage.py shell 객체와 쿼리셋(query set) django shell에서 안에 담겨져 있는 것은 무조건 객체이거나, 객체가 담긴 쿼리셋이다 객체 : 모델의 인스턴스이자, 한 행의 데이터이자, 하나의 객체 쿼리셋 : 조건식(filter)등으로 db에서 가져온 , 객체가 들어있는 리스트 객체와 쿼리셋에 실행될 수 있는 함..
인프런의 이진석 강사님의 장고 강의를 참고 Django의 admin django.contrib.admin앱을 통해 장고는 admin기능을 제공한다. 모델 클래스를 admin에 등록하여, 조회/추가/수정/삭제를 위한 admin page를 제공 서비스 초기에 관리도구로 사용하기에 매우매우매우 유용하다! 또한 admin페이지는 내부적으로 Django Form을 적극적으로 사용함 Django의 admin페이지에 모델을 등록하는 방법 아래의 세가지 방법은 모두 동일한 기능을 수행한다 첫번째 방법은 별다른 기능의 추가 없이 Post를 admin에 등록할 때 두번째와 세번째는 동일한 기능을 수행함(세번째 방법이 두번째 방법의 숏컷). 가독성을 위해 세번째 방법이 많이 추천된다고 함 #방법1 admin.site.reg..
인프런의 이진석 강사님의 django강의를 참고 장고는 다양한 모델 필드들을 제공하며, 해당 모델필드는 db에서 연동될 수 있다. 기본적으로는 공식문서를 참조하되, 공식문서를 봐도 어려울 것 같은 부분들에 대해서만 적어주려 함 공식문서 : https://docs.djangoproject.com/ko/4.0/ref/models/fields/ 또한 같은 모델필드라 할지라도, DB에 따라 다른 타입이나 SQL문이 적용될 수 있음(DB에 따라 지원하는 기능이 모두 다르다) 파이썬 데이터타입과 데이터베이스의 데이터타입을 매핑 AutoField : int BinaryField : bytes BooleanField : bool CharField/SlugField/URLField/EmailField : str 참고)위..
인프런 이진석 강사님의 장고강의를 참고 장고 모델(ORM) 소개 ORM 애플리케이션의 데이터를 저장하는 방법들로는 파일(로컬, 외부 정적 스토리지), 캐시(memcached,redis), DB(RDBMS,NoSQL)등이 있다 ORM은 본래 양립할 수 없는 프로그래밍 언어와 DB를 매핑시켜주는 것을 의미하며, 이것이 가능한 이유는 프로그래밍 언어가 DB의 내용을 객체적으로 접근하기 때문임 파이썬적으로 설명하면, DB의 필드(테이블)내용과 데이터 한줄한줄을 파이썬이 '클래스'와 '객체'의 힘을 빌려서 정의하는 덕분 Django의 ORM 장고의 ORM은 장고 프로젝트 내부의 모델파일 내용에 따라 RDBMS의 SQL을 자동으로 생성 / 실행 시켜준다. 매우 편리하고 생산성이 높아지며, 장고를 쓴다면 당연히 장고..
회원가입에 대한 처리 앞전의 User(1)에서 이어짐 : https://wannabehumblebee.tistory.com/78 1. 회원가입의 전체흐름 유저가 회원가입을 누름 > 특정 URL로 접근. 이때 접근 Method는 Get임 urls.py에 설정된 대로 , views.py의 특정 view가 호출됨 호출된 view에서 method를 판별 > Get이므로, 회원가입을 위한 폼(빈폼상태임)을 랜더링할 template에 전달 template은 전달받은 form을 보여줌 랜더링. 사용자 입장에서는 비어있는 form을 보게됨 빈폼에 회원가입을 위한 정보를 기입하고 제출하면, 동일한 URL로 POST메소드형태로 데이터가 submit됨 동일한 url이니까 urls.py가 동일하게 view에 호출을 함 vie..
user모델 생성과 관련된 내용을 정리 1. 장고의 User 개요 우선 장고에서는 User를 위하여 필요한 기능들을 구현해둔 User라는 클래스가 존재한다. 따라서, 일반적인 모델을 생성하듯, models.Model 을 상속받아 User모델을 생성하는 건 진짜 악수중의 악수임 왜냐면, 이미 장고내에서 구현해놓은 User에 관한 기능을 아무것도 사용하지 않겠다는 것이기 때문이다. 굳이 장고를 왜쓰냐? 라는 의문이 들정도이다(ㅠㅠ) #매우 좋지 않은 방법 class User(models.Model): pass 장고의 User클래스 체계 그러면 장고가 만들어 놓은 User에 관한 기능을 사용하기 위해 장고의 공식 코드를 한번 뜯어보자. 우선 가장 최상위의 User 클래스는 사실 별것 없다. AbstactUse..
bootstrap5를 프로젝트에 적용시켜고자 함 bootstrap 사용준비 홈페이지 접속(https://getbootstrap.com/) >> download > compiled Css and JS 다운로드 받고 압축풀고, 풀린 파일을 프로젝트에서 설정한 static에 넣어줌 html에 bootstrap 적용 bootstrap을 적용시키려는 html에 다음과 같이 link와 script를 작성해줌 추가)static은 django의 settings.py에서 적용한 STATIC_URL을 사용한다는 의미임 js에 앞서서 jquery도 같이 script를 작성해주는 이유는, bootstrpa이 jqeury에 의존적이기 떄문이라고 함(즉 반드시 먼저 적어줘야 함!) bootstrap Example bootstra..