장고:클래스형 뷰, 제네릭 뷰

학교의 모든 지식. SMwiki
둘러보기로 이동 검색으로 이동

장고! 웹 프레임워크! 틀:장고

  1. 장고:개요
  2. 장고:웹페이지설계
    1. 장고:앱
    2. 장고:url
    3. 장고:model
      1. 장고:DB
      2. 장고:모델 필드
      3. 장고:모델의 변경
    4. 장고:view
      1. 장고:클래스형 뷰, 제네릭 뷰
      2. 장고:view 각종 기능
    5. 장고:template
    6. 장고:static. 정적파일 사용하기
      1. 장고:CSS 사용하기
      2. 장고:JS 사용하기
      3. 장고:글꼴 사용
      4. 장고:부트스트랩
    7. 장고:media. 미디어 파일 사용하기
  3. 장고:관리자페이지
  4. 장고:settings.py
  5. 장고:기능구현
    1. 장고:회원관리
    2. 장고:유저
    3. 장고:커스텀 유저
    4. 장고:소셜로그인
    5. 장고:입력받기
    6. 장고:저장된 내용 활용하기
    7. 장고:변수 내보내기
    8. 장고:글쓰기
    9. 장고:페이징(페이지나누기)
    10. 장고:답변쓰기(댓글쓰기)
    11. 장고:추천,즐겨찾기
    12. 장고:새글(최신글) 나타내기
    13. 장고:썸머노트 설치
    14. 장고:네비게이션 바 만들기
    15. 장고:검색기능
    16. 장고:카테고리 만들기
    17. 장고:사진 올리기
    18. 장고:파일 업로드
    19. 장고:이메일app 만들기
    20. 장고:매직 그리드
  6. 장고:웹서비스
    1. 장고:Git
    2. 장고:리눅스에 올리기
    3. 장고:우분투에 올리기(nginx 사용)
    4. 장고:도커로 올리기
  7. 장고:팁

작정하고 장고의 코드를 참고해 살펴보는 게 좋겠다.

옮기다 말았음.[편집 | 원본 편집]

Mixin[따로 목차를 분류해야겠네;][편집 | 원본 편집]

클래스 뷰를 사용할 때 특정한 기능이 다른 뷰로 분리되어 있을 때. 예컨대, DetailView에선 form이 없기 때문에 댓글을 쓸 수가 없다. 이땐 다중상속을 받아 기능을 구현할 수 있다.

class 뷰이름(DetailView, FormMixin):
    form_class = 폼이름
    ...
    def form_valid(self, form):
        ...
        writer = self.request.user
        return super().form_valid(form)

위와 같이 Mixin으로 없는 기능을 가져다 넣어 사용할 수 있다.


MultipleObjectMixin[편집 | 원본 편집]

여러 오브젝트를 다루기 위한 믹스인.

class 뷰이름(DetailView, MultipleObjectMixin):
    form_class = 폼이름
    ...
    paginate_by = 10
    
    def get_context_data(self, **kwargs):
        object_list = 모델.objects.filter(필터링조건)
        return super(뷰이름,self).get_context_data(object_list=object_list, **kwargs)

본문과 리스트를 동시에 띄우기 위한 작업이다.


RedirectView[편집 | 원본 편집]

class 뷰이름(RedirectView):
    
    
    def get_redirect_url(self, *args, **kwargs):
        return 보낼 주소
        
    def get(self, request, *args, **kwargs):
        object = get_object_or_404(모델, pk=키값)

구독 기능[편집 | 원본 편집]

찬찬히 보면서 옮기자.. 문제를 풀었는가 여부도 이걸로 구현 가능할듯.

유저와 프로젝트를 포린키로 가져온다.

모델작성

class 모델명(models.Model):
    class Meta:
        unique_together = ('속성1', '속성2')

이 둘의 조합은 오직 하나만 존재하도록 설정한다. 이 모델을 filter로 불러와 유저와 객체가 일치하는 것을 찾아 구독관계를 찾곤 한다.

filter(user=user, project=객체명) 형태로 일치하는지 여부만 찾으면 된다.


필터 이후 처리[편집 | 원본 편집]

필터링으로 구독관계 객체를 불러왔다곤 하지만, 이것이 구독한 객체를 보여주지 않는다. 이를 위해 .values_list('모델명')이 쓰인다.

객체 = ...filter(조건).values_list('모델명') 형태로 쓰면 필터에 걸린 것들 중 해당 모델에 해당하는 것을 가져온다.(제한적으로 쓰일 것 같지만, 강력하고 어려운 개념이네;)

그럼 이를 불러오려는 모델처럼 다룰 수 있다.

아이디어[편집 | 원본 편집]

게시글목록 중 글 자체에 대한 것과, 검색부분과... 다 따로만드는 게 좋을 듯하다. 글 자체에 대한 건 즐겨찾기 한 문제들을 불러올 수 있잖아. 옵션에 따라 글부분만 달리 나타낼 수도 있고.