1) > 가상 환경-프로젝트 아래 instagram 앱을 만들어주고 프로젝트 앱의 settings와 urls에 이를 등록해준 다음, -python manage.py runserver 실행 >> path('instagram/', include('instagram.urls')), NameError: name 'include' is not defined 오류 발...
1) > "admin/로 시작하는 주소 요청에 대해서는 django.contrib에 있는 admin 앱에서 처리하겠다." 2) > instagram 앱에서 만든 모델을 admin에서 사용하기 위해서는 admin.py에 따로 등록을 해줘야한다. 3) > autonowadd는 Post 모델을 통해서 record가 db에 insert될 때 자동으로 입력...
1) > 장고에서 모델의 FileField/ImageField를 이용해 저장한 모든 파일을 media 파일이라고 한다. css, js 등 개발 리소스로서 우리가 흔히 사용하는 정적인 static 파일과 대조할 수 있다. 2) > Post 클래스에 ImageField를 넣어주고 해당 필드가 내부적으로 사용하는 pillow 라이브러리를 설치했다.(과거 pil...
1) > 쿼리셋의 특징은 게으르다는 것이다. all() 객체를 만들자마자 db에 select 쿼리를 하는 것이 아니다.(쿼리셋을 만드는 동안에는 db에 접근하지 않는다. 데이터를 쿼리할 준비만 하고있다가 실제로 데이터가 필요한 시점인 세 번째 줄 qs 시점에 쿼리한다. 2) > .get은 하나의 객체를 얻는다. >> lt: less than, lte...
1) > urls.py 소스에 해당 코딩을 구현했다. 네이버에 처음 들어갔을 때 검색창이 뜨는 것처럼, "아무것도 없는 ''주소로 접근한다면 views.py 소스의 post_list 함수와 연결해줄게"로 이해하면 좋다. 2) > 호출 당시의 요청의 모든 내역인 request를 첫 번째 인자로 갖는 함수 post_list를 작성하겠다. request는 ...
1) ... > sql을 요청해서 확인했을 때 LIMIT(stop-start), OFFSET(start) 두 가지만 있는 것을 확인할 수 있다. step 값을 넣지 않으면 Out[8]에서 QuerySet을 반환하고 넣으면 Out[9]에서 리스트 타입을 반환함을 알 수 있는데, 따라서 step 값은 sql이 아닌 장고의 쿼리셋이 처리하면서 새로운 리스트를...
1) > 기본적으로 장고 웹에서 요청을 처리하는 함수를 view라고 할 때, 그 전/후로 호출되는 함수를 middleware라고 한다. 2) > "_debug/로 시작하는 주소는 debugtoolbar에서 처리하도록 path를 변경해달라."
1) > post 같은 경우는 post_id 형식으로 필드를 생성하기 위한 가상의 필드라서 실제 db 필드와는 다르다. 2) > post_id 값을 확인하고 이를 다시 pk에 할당해서, Post 모델의 객체에서 이와 맞는 것을 찾는 방식보다 Comment 모델을 정의할 때 "Post와 관련있어~" 라고 걸고 넘어간 부분을 통해 comment.post(...
1) > 만약 Post 모델에 author 필드를 추가한 상황이라면 기존에 db 테이블에 있던 요소들에도 non-nullable 요소(예를 들면 외래키의 id 값)를 넣어줄 것인지 물을 것이다. (나는 tagset 필드에서 blank = True로 바꿔주며 이를 해결한 적이 있다.) author는 외래키 필드이고 해당 필드는 settings.AUTHUSE...
1) > FBV는 호출 가능한 객체 그 자체로서 장고 뷰의 기본이고 CBV는 클래스.as_view()를 통해 호출 가능한 객체를 '생성해서 리턴한다.' 2) > path(-pk-)와 repath(-pk-)의 결과는 같다. repath에서는 모든 인자가 str 타입으로 전달되는 반면, path에서는 매핑된, 그 자체가 하나의 작은 클래스인 정규 표현식, ...
1) > custom converter를 만들어 줄 때 urlpatterns에서 앞의 year은 컨버터 이름이고 뒤의 year은 view로 넘어가는 인자이다.
1) > "GET 요청이 왔는데 >> /instagram/3 주소에 대해서 처리했고 >>> HTTP 프로토콜은 HTTP/1.1와 같으며 >>> 서버에서는 500이라는 상태 응답을 주었으며 >>>> 응답의 크기는 109 바이트이다." 2) > class method를 먼저 확인해보면 첫 번째 인자로 class 자기 자신이 넘어오며 그다음 두 번째 인자인...
1) > 여태까지 html 파일을 instagram 앱의 templates/instagram에 저장해왔다. template loader는 app directory loader, file system template loader로 구분할 수 있다. 특정 앱에 속하지 않은 html 파일은 프로젝트 settings.py의 DIRS에 저장하는 편이 좋다. 2) ...
1) > reverse, resolve_url, redirect 같은 경우는 파이썬 함수이다. 앞에 2개는 url 문자열을 생성하는 반면 redirect는 HttpResponse의 instance를 만들어준다. 이를 뷰에서 바로 쓸 수 있다고 한다. 2) > url reverse를 수행하기 위해서는 app name을 반드시 입력해야 한다. url pa...
1) > HTML에서 CSS, JS 파일을 분리했을 때의 장점은 웹 브라우저의 캐싱 기능에 기인한다. 최초 방문 시 css, js 파일을 읽겠지만, 내용이 그대로라면 다음 방문부터는 캐시에 저장된 내용을 가져오므로 동작이 좀 더 가볍다.(다시 읽도록 세팅할 수도 있다. 2) > 부트스트랩에는 그리드 시스템이란 것이 있다. 해당 요청은 small devi...
1) > forms의 method의 enctype은 POST 타입에서 유효하다. GET 타입에서는 urlencoded 방식이 강제되기 때문이다. urlencoded라 하면, 예를 들어 네이버 검색창에 특정 검색어를 입력했을 때, 주소창에서 query string이 ? 다음에 key=value& 조합이 반복되는 인코딩 방식을 말한다. 강사님께서 '인코딩된 문...
1) > 장고의 가장 주목할만한 기능은 model, form, REST framework라고 한다. 여기서 model과 form은 유사한 구성을 갖는데 form은 클라이언트-유저 영역에 집중돼있고, model은 서버-db 영역에 집중돼있다. >> model은 "db에 이런식으로 저장할래." 정도로 생각하면 되는데 form을 model에 맞춰 설계하는 경우가...
1) > validator는 되도록 모델에 정의하고, 모델-폼을 만들 때 자연스럽게 가져오는 것이 좋다. 2) > validator는 필드 값을 변경할 수 없으므로 보다 고압적이고, clean은 값을 변경할 수 있고 일회성 검사나 필드 값 변경을 허용하기 때문에 보다 유연하다. 3) > 템플릿에서 사용하는 값은 보통 views.py에서 렌더 시에 ...
1) > static, media 파일을 정적 파일이라하며 데이터가 가공돼서 보여지는 동적 파일과 달리, 미리 저장되어 있어서 페이지가 렌더링될 때 제공된다. >> static은 이미지,css,js 개발자가 심어둔 파일로 같이 식당의 기본 세팅과 같고, media는 model의 파일 필드나 이미지 필드를 통해 저장된 파일, 즉 사용자가 업로드할 수 있는 파...
1) > 커스텀 유저를 만들고 회원가입/로그인 기능을 구현하기 위한 accounts 앱을 만들었다. 앱을 만듦과 동시에 내부 urls.py 파일 생성과 설정을 동시에 해주는 것이 좋다. >> 앱도 있고 귀속된 urls.py 파일도 있다면 프로젝트의 urls.py에서 두 조건을 이어주는 작업을 통해서, accounts/로 접근할 경우 accounts의 ur...
1) > sendemail을 보내는 시점과 방법과 관련해서, views.py에서 signup 이후 회원가입 환영 메세지를 띄우는 부분에 작성하거나, models.py에서 User 클래스 아래에 self.pk == None 조건의 save 함수를 정의해서 보내거나, 장고의 postsave 시그널?을 사용할 수 있다. >> 이번 강의에서는 models.py에...
1) > 앞서 @loginrequired 장식자를 이용했을 떄 /accounts/login/으로 이동했는데 이는 settings의 LOGINURL이 해당 문자열로 돼있는 설정값 때문이다. 2) > accounts의 urls.py에서 login/, singup/ 으로 접근하면 각각 views의 login(인스턴스 함수?)와 signup(함수)를 보여주도...
1) > views.py의 profileedit이 아직 'form'을 넘겨주지 않아서 form.html에도 form이 전달되지 않을 경우를 설정해줬다. 2) > signup 함수에서는 아직 유저 정보가 없어서 User를 Model로하는 빈 SignupForm instance를 생성하는 게 목적이었지만, ProfieForm에서는 현재 user에 해당하는...
1) > urls.py에 as_view로 바로 정의해줄 수 있었지만, 커스터마이징을 위해 views.py까지 넘어왔다. >> @login_required 장식자를 사용한 함수뷰를 만드는 대신 LoginRequiredMixin과 PasswordChangeView를 모두 상속하는 클래스뷰의 인스턴스 함수를 생성하는 방법을 택했다. 2) > 깃헙에서는 클래...
1) > instagra의 urls.py에 있는 각각의 path들이 prefix없이 작동할 수 있도록 2) > 외래키에서는 모델의 참조가 되는 클래스와 on_delete 옵션을 지정해줘야 한다. 3) > instagram 앱에서 모델을 만들고 makemigations까지 실행했으나 migrate에서 오류가 났다. accounts 앱에 적용된 000...
1) > views.py에 postview 함수 혹은 DetailView의 인스턴스 함수를 정의해줄 때 pk/slug 인자를 사용한다. 그리고 해줘야할 작업은 getabsolute_url을 정의해주는 것이다. 그런데 해당 함수가 없어도 /post/pk로 접근하는데 에러가 발생하지 않았다. >> args=[self.pk]가 아닌 kwargs={"pk":se...
1) > user는 현재 로그인된 유저이고, 우리가 찾는 username을 pageuser로 찾아줄 것이다. 여기서 getusermodel()이 내부적으로 settings.AUTHUSER_MODEL을 참조해서 username=username을 넘겨줄 수 있는 것으로 보인다. >> is_active를 켤 경우, 접근이 허용된 유저가 아니면 404 에러가 발...
1) > root의 기능을 프로젝트 레벨에서 instagram 앱으로 넘기면서 TemplateView를 RedirectView로 변경하고 기본 페이지로 접근했을 때 instagram 앱의 index로 이동하도록 한다.
1) > self를 지정함으로써 ManyToMany 관계를 User 간의 관계로 만들 수 있다. 최초 follow가 없을 수도 있으니 blank는 허용해준다 2) >자신을 제외한 유저 인스턴스를 User가 아닌 getusermodel()로 취하고 이를 리스트로 넘겨줘서 sidebar에서 순회하는데 사용한다. 3) Input Output Input...
1) > len(postlist)는 postlist 전체를 가져와서 메모리에 얹은 다음에 메모리 상의 리스트의 갯수를 반환하는 반면, post_list.count는 db에 count query를 던지게 된다.
1) > self를 지정함으로써 ManyToMany 관계를 User 간의 관계로 만들 수 있다. 최초 follow가 없을 수도 있으니 blank는 허용해준다 2) >자신을 제외한 유저 인스턴스를 User가 아닌 getusermodel()로 취하고 이를 리스트로 넘겨줘서 sidebar에서 순회하는데 사용한다. 3) Input Output Input...
1) > M:N 관계를 설정할 때 중요한 건 부모 테이블의 설정인 것 같다. 아래는 post의 부모 Post와, user의 부모 AUTHUSERMODEL이 보다 명시적으로 적혀있다. 위는 더 일반적인 ManyToManyField의 선언인데 여기서도 Post와 AUTHUSERMODEL을 확인할 수 있다. 이때 둘을 묶어주는 likeuserset이 User의...