예제로 배우는 Django 4
저자

안토니오멜레

저자:안토니오멜레

ICAIUniversidadPontificiaComillas컴퓨터공학석사

Nucuro의공동창립자,CTO

AI기반디지털투자플랫폼ExoInvestingCTO

2006년부터장고프로젝트를개발.2009년ZenxIT설립

여러스타트업에서CTO및기술컨설턴트로근무

대규모디지털비즈니스프로젝트구축개발팀관리및스타트업멘토링



역자:김성원

2000년부터컴퓨터응용프로그램개발분야에서다양한경험을쌓아왔다.다양한언어로,다양한애플리케이션개발과개발관리에대한깊은통찰을얻었고,이를토대로소프트웨어개발과관련된많은책을번역하면서항상새로운기술과도전에생각이열려있도록노력해왔다.현재프리랜서개발자로활동하면서다양한프로젝트에참여하는한편,평소에는자유롭게아이디어를현실로구현해보고자노력하고있다.

주요역서

Node.js디자인패턴바이블(영진닷컴,2021)

코딩테스트로시작하는파이썬프로그래밍(영진닷컴,2022)

파이브라인스오브코드(위키북스,2023)

목차

서문

1장블로그애플리케이션만들기
1.1파이썬설치하기
1.2파이썬가상환경만들기
1.3장고설치하기
1.4장고개요
1.5주요프레임워크컴포넌트
1.6장고아키텍처
1.7첫번째프로젝트만들기
1.8블로그데이터모델만들기
1.9모델용관리사이트만들기
1.10QuerySet과관리자로작업하기
1.11목록과상세뷰만들기
1.12뷰에맞는템플릿생성하기
1.13요청/응답주기
1.14추가자료
1.15요약

2장고급기능으로블로그향상하기
2.1모델에표준URL사용하기
2.2검색엔진최적화(SEO)에부합하는게시물URL만들기
2.3URL패턴수정하기
2.4뷰수정하기
2.5게시물의표준URL수정하기
2.6페이징추가하기
2.7클래스기반뷰만들기
2.8이메일로게시물추천하기
2.9댓글시스템만들기
2.10추가자료
2.11요약

3장블로그애플리케이션확장하기
3.1태깅기능추가하기
3.2유사한게시물조회하기
3.3커스텀템플릿태그및필터생성하기
3.4사이트에사이트맵추가하기
3.5블로그게시물용피드만들기
3.6블로그에전문(full-text)검색추가하기
3.7추가자료
3.8요약

4장소셜웹사이트구축하기
4.1소셜웹사이트프로젝트만들기
4.2장고인증프레임워크사용하기·
4.3사용자등록및사용자프로필
4.4커스텀인증백엔드구축하기
4.5추가자료
4.6요약

5장소셜인증구현하기
5.1사이트에소셜인증추가
5.2추가자료
5.3요약

6장웹사이트에서콘텐츠공유하기
6.1이미지북마크웹사이트만들기
6.2다른웹사이트의콘텐츠게시하기
6.3이미지상세뷰만들기
6.4easy-thumbnails를사용해이미지썸네일만들기
6.5JavaScript로비동기액션추가하기
6.6이미지목록에무한스크롤페이징추가하기
6.7추가자료
6.8요약

7장사용자활동추적하기
7.1팔로우시스템구축하기
7.2일반적인활동스트림애플리케이션구축하기
7.3카운트역정규화를위한시그널사용하기
7.4장고디버그도구모음
7.5Redis로이미지노출카운트하기
7.6추가자료
7.7요약

8장온라인상점구축하기
8.1온라인상점프로젝트만들기
8.2쇼핑카트만들기
8.3고객주문등록하기
8.4비동기작업
8.5추가자료
8.6요약

9장결제및주문관리하기
9.1전자결제게이트웨이통합하기
9.2주문을CSV파일로내보내기
9.3커스텀뷰로관리사이트확장하기
9.4동적으로PDF인보이스생성하기
9.5추가자료
9.6요약

10장온라인상점확장하기
10.1쿠폰시스템만들기
10.2추천엔진구축하기
10.3추가자료
10.4요약

11장온라인상점에국제화추가하기
11.1장고로국제화하기
11.2국제화를위한프로젝트준비하기
11.3파이썬코드번역하기
11.4템플릿번역하기
11.5Rosetta번역인터페이스사용하기
11.6퍼지번역
11.7국제화를위한URL패턴
11.8사용자가언어를바꿀수있게허용하기
11.9django-parler로모델번역하기
11.10지역에따라서식변경하기
11.11django-localflavor로폼필드유효성검사하기
11.12추가자료
11.13요약

12장e-러닝플랫폼구축하기
12.1e-러닝프로젝트환경설정
12.2미디어파일서비스하기
12.3강좌모델만들기
12.4다형성콘텐츠를위한모델생성하기
12.5인증뷰추가하기
12.6추가자료
12.7요약

13장콘텐츠관리시스템만들기
13.1CMS생성하기
13.2강좌모듈과해당콘텐츠관리하기
13.3추가자료
13.4요약

14장콘텐츠렌더링과캐시
14.1강좌표시하기
14.2학생등록기능추가하기
14.3강좌콘텐츠에접근하기
14.4캐시프레임워크사용하기
14.5추가자료
14.6요약

15장API구축하기
15.1RESTfulAPI만들기
15.2추가자료
15.3요약

16장채팅서버구축하기
16.1채팅애플리케이션만들기
16.2채널을이용한실시간장고
16.3채널설치하기
16.4컨슈머작성하기
16.5라우팅
16.6웹소켓클라이언트구현하기
16.7채널레이어활성화하기
16.8컨슈머를완전한비동기로만들기
16.9채팅애플리케이션을기존의뷰와통합하기
16.10추가자료
16.11요약

17장실서비스화
17.1프로덕션환경만들기
17.2DockerCompose사용하기
17.3WSGI와NGINX를통해장고서비스하기
17.4SSL/TLS로보안연결적용하기
17.5장고채널에Daphne사용하기
17.6커스텀미들웨어만들기
17.7커스텀관리명령구현하기
17.8추가자료
17.9요약

출판사 서평

Django연습에최적!프로젝트4개로배우는Django4
Django를익히는제일좋은방법은무엇일까요?이책에서는‘좋은예제많이만들어보기’를그답으로정했습니다.블로그,소셜웹사이트,온라인상점,e-러닝플랫폼등활용도넘치는4가지예제와함께Django를차근차근배워봅니다.파이썬을갓뗀분에게도좋고,이미Django를배웠지만레퍼런스급예제를연습하고다른기술과연계하여나만의Django앱을확장하고자하는용도로읽기에도좋습니다.

이도서는실습파트로만이루어진완전실습형도서로,처음부터예제프로그램을만들며Django의사용법을자연스럽게익힐수있도록구성한도서입니다.다행히처음1~3장부터어려운예제프로그램을만들지는않고,간단한블로그를만듭니다.물론Django로만드는만큼웹페이지부분만을만들지는않습니다.기본적인MTV패턴부터쿼리셋,데이터베이스를이용한전문검색기능과같이백엔드의요소또한다룹니다.

그뒷장부터는본격적으로다양한프로그램을만듭니다.온라인상점,e-러닝플랫폼과같은앞으로의프로젝트의기초로사용하기좋은실용성좋은예제가준비되어있습니다.단순히겉모습만묘사하는선에서배우지않고,소셜웹사이트라면소셜인증,온라인상점이라면외부결제모듈사용법,e-러닝플랫폼이라면학생등록시스템구현등실제개발시알아두어야할중요관련기술이나구현법도함께알려줍니다.

감이잘오지않는다면,깊게고민하지말고우선책을펼쳐예제를타이핑해보기를바랍니다.중간중간커피한모금곁들이면더좋습니다.800페이지이상의분량에걸쳐4개의프로젝트를쉴새없이만들다보면어느새Django가확실히손에익어있을것입니다.

*주요내용

1장블로그애플리케이션만들기
블로그애플리케이션을통해프레임워크를소개합니다.블로그게시물을표시하기위한기본블로그모델,뷰,템플릿및URL을생성합니다.장고객체관계형매퍼(ORM)를사용하여QuerySet을빌드하는방법을배우고,장고관리사이트를구성합니다.

2장고급기능으로블로그향상하기
블로그에페이징을추가하는방법과장고클래스기반뷰를구현하는방법을설명합니다.‘장고로이메일보내기’에서는장고로이메일을보내고폼과모델폼을처리하는방법을배웁니다.또한블로그게시물에댓글을다는시스템을구현합니다.

3장블로그애플리케이션확장하기
서드파티애플리케이션을통합하는방법을살펴봅니다.이장에서는태그시스템을만드는과정을안내하고,유사한게시물을추천하기위해복잡한QuerySet을구축하는방법을배웁니다.그후커스텀템플릿태그와필터를만드는방법을설명합니다.또한사이트맵프레임워크를사용하고게시물에대한RSS피드를만드는방법도배웁니다.마지막으로PostgreSQL의전문검색기능을사용해서검색엔진을구축함으로써블로그애플리케이션을완성합니다.

4장소셜웹사이트구축하기
소셜웹사이트를구축하는방법을설명합니다.장고인증프레임워크를사용하는방법을배우고커스텀프로필모델로사용자모델을확장합니다.또한이장에서는메시지프레임워크를사용하는방법을배우고커스텀인증백엔드를빌드합니다.

5장소셜인증구현하기
파이썬소셜인증과함께OAuth2를사용해구글,페이스북,트위터에서소셜인증을구현하는방법을다룹니다.그후장고확장(Extensions)을사용해서HTTPS를통해개발서버를실행하고소셜인증파이프라인을사용자정의해서사용자프로필생성을자동화하는방법을알아봅니다..

6장웹사이트에서콘텐츠공유하기
소셜애플리케이션을이미지북마크웹사이트로변환하는방법을설명합니다.그후모델에대한다대다관계를정의하고프로젝트에통합되는JavaScript북마클릿을생성합니다.또한이장에서는이미지썸네일을생성하는방법을보여줍니다.마지막으로JavaScript와장고를사용해비동기HTTP요청을구현하는방법과무한스크롤페이징을구현하는방법을배웁니다.

7장사용자활동추적하기
사용자를위한팔로워시스템을구축하는방법을보여줍니다.사용자활동스트림애플리케이션을만들어이미지북마크웹사이트를완성합니다.모델간에일반관계를생성하고QuerySet을최적화하는방법을배웁니다.신호로작업하고비정규화를구현합니다.장고디버그도구모음을사용해서관련디버그정보를얻습니다.마지막으로,이미지조회수를계산하기위해Redis를프로젝트에통합하고Redis로가장많이조회된이미지의순위를생성합니다.

8장온라인상점구축하기
온라인상점을만드는방법을살펴봅니다.제품카탈로그에대한모델을빌드하고장고세션을사용해서쇼핑카트를생성합니다.쇼핑카트를위한콘텍스트프로세서를빌드하고고객주문을관리하는방법을배웁니다그리고이장에서는Celery와RabbitMQ를사용해서비동기알림을보내는방법을설명합니다.Flower를사용해Celery를모니터링하는방법도배웁니다.

9장결제및주문관리하기
결제게이트웨이를스토어에통합하는방법을설명합니다.StripeCheckout을통합하고애플리케이션에서비동기결제알림을수신합니다.관리사이트에서커스텀뷰를구현하고주문을CSV파일로내보내도록관리사이트를커스터마이징할수도있습니다.PDF인보이스를동적으로생성하는방법도배웁니다.

10장온라인상점확장하기
쿠폰시스템을생성해서카트에할인을적용하는방법을알아봅니다.쿠폰할인을구현하기위해StripeCheckout연동기능을업데이트하고주문에쿠폰을적용합니다.마지막으로Redis를사용하여일반적으로함께구매하는제품을저장하고이정보를사용하여제품추천엔진을구축합니다.

11장온라인상점에국제화추가하기
프로젝트에국제화를추가하는방법을보여줍니다.번역파일을생성및관리하고파이썬코드와장고템플릿에서문자열을번역하는방법을배웁니다.Rosetta를사용해서번역을관리하고언어별URL을구현합니다.django-parler를사용해서모델필드를번역하는방법과ORM에서번역을사용하는방법을배우게됩니다.마지막으로django-localflavor를사용하여현지화된폼필드를생성합니다.

12장e-러닝플랫폼구축하기
e-러닝플랫폼을만드는과정을안내합니다.프로젝트에픽스처(fixtures)를추가하고콘텐츠관리시스템을위한초기모델을생성합니다.모델상속을사용해서다형성콘텐츠에대한데이터모델을생성합니다.객체를주문하는필드를작성해서커스텀모델필드를만드는방법을배웁니다.또한CMS에대한인증뷰를구현합니다.

13장콘텐츠관리시스템만들기
클래스기반뷰와믹스인을사용해서CMS를만드는방법을설명합니다.장고그룹및권한시스템을사용해서뷰에대한접근을제한하고폼셋을구현해강좌콘텐츠를수정합니다.또한드래그앤드롭기능을만들고JavaScript및장고를사용해서강좌모듈과해당콘텐츠를재정렬합니다.

14장콘텐츠렌더링과캐시
강좌카탈로그에대한공개뷰를구현하는방법을보여줍니다.학생등록시스템을생성하고강좌에서학생등록을관리합니다.강좌모듈에대해다양한유형의콘텐츠를렌더링하는기능을생성합니다.장고캐시프레임워크를사용해서콘텐츠를캐시하는방법을배우고,프로젝트에대한Memcached및Redis캐시백엔드를구성합니다.마지막으로관리사이트를사용해서Redis를모니터링하는방법을배웁니다.

15장API구축하기
장고REST프레임워크를사용해서프로젝트용RESTfulAPI를구축하는방법을살펴봅니다.모델의시리얼라이저를만들고커스텀API뷰를만드는방법을배웁니다.API인증을처리하고API뷰권한을구현합니다.API뷰셋과라우터를빌드하는방법을배웁니다.이장에서는requests라이브러리를사용해서API를사용하는방법도알려줍니다.

16장채팅서버구축하기
장고채널을사용해학생들을위한실시간채팅서버를만드는방법을설명합니다.웹소켓을통해비동기통신에의존하는기능을구현하는방법을배우게됩니다.파이썬으로웹소켓컨슈머를생성하고JavaScript로웹소켓클라이언트를구현합니다.Redis를사용해채널레이어를설정하고웹소켓컨슈머를완전히비동기식으로만드는방법을배웁니다.

17장실서비스화
여러환경에맞는설정을생성하는방법과PostgreSQL,Redis,uWSGI,NGINX,Daphne를사용해프로덕션환경을설정하는방법을DockerCompose와함께보여줍니다.그후HTTPS를통해프로젝트를안전하게서비스하는방법과장고시스템검사프레임워크(systemcheckframework)를사용하는방법을배우게됩니다.이장에서는커스텀미들웨어를빌드하고커스텀관리명령을만드는방법도알려줍니다.

*추천사

마감에쫓기는완벽주의자들을위한웹프레임워크,장고
저는이슬로건을참좋아합니다.개발자가제시간에실행가능한코드를제공해야할때완벽주의에빠지기쉽기때문입니다.
시중에는훌륭한웹프레임워크가많이있지만,프로젝트를적절하게구성해야하고,적합한플러그인을찾아야하며,기존추상화를우아하게사용해야하는등개발자에게너무많은것을요구하는경우가있습니다.
장고는프레임워크를결정할때발생하는이러한종류의피로를대부분덜어주고,훨씬더많은기능을제공합니다.하지만방대한프레임워크이기때문에처음부터배우는것이부담스러울수는있습니다.
저는2017년에장고를배웠습니다.그당시CodeChalleng.es라는제파이썬코딩
플랫폼의핵심기술로선택했기때문에배울필요가있어서였습니다.저는플랫폼개설이래로부터수천명의파이썬개발자지망생과숙련된개발자에게제공해왔던실제로코딩중에벌어지는주요문제에관한솔루션을계속만들면서동시에장고를배워야했습니다.
이러던중어느날이책의초판을발견했습니다.이책은보물창고와도같았습니다.
이책에서는흥미로우며실제로존재할만한수준의애플리케이션을구축하는방식으로장고를가르칩니다.뿐만아니라,저자인안토니오가프로젝트를구현하는방법에서알수있듯이실제경험과지식이풍부합니다.
안토니오는Postgres를사용하여데이터베이스쿼리를최적화하는방법,djangotaggit과같은유용한패키지,다양한플랫폼을사용한소셜인증,(모델)매니저,템플릿태그등덜알려진기능을소개하는기회를놓치지않습니다.
이번4판에서는여러장에스키마,이미지,메모를추가하고jQuery에서바닐라
JavaScript로전환했습니다(멋지네요!).
이책은잘설명된깔끔한코드예제를사용해서장고를철저히다룰뿐만아니라
모든장고개발자에게필수적인관련기술도설명합니다.장고REST프레임워크,django-debug-toolbar,프론트엔드/JS,그리고마지막으로Docker도그중하나
입니다.
더중요한것은전문적인환경에서효과적인장고개발자가되기위해필요한많은양의디테일과모범사례를찾을수있다는것입니다.
이렇게다방면에걸친리소스를찾기란쉽지않은데,이책을최신상태로유지하기위해꾸준히노력한안토니오에게감사의말을전하고싶습니다.
장고를많이사용하는파이썬개발자로서이책은제책상에가까이두고싶은필수가이드가되었습니다.이책을여러번읽었고5년동안장고를사용하였음에도매번이책을다시볼때마다새로운것을배웁니다.
이여정을시작한다면손을놀릴생각을하지마세요.이책은실용적인가이드이므로맛있는커피를마시면서많은장고코드를타이핑하게될것이라고각오하세요!하지만그게가장좋은학습방법이기도합니다.그렇지않나요?