장고:view 각종 기능: 두 판 사이의 차이

학교의 모든 지식. SMwiki
둘러보기로 이동 검색으로 이동
13번째 줄: 13번째 줄:


객체 = 모델.objects.get(pk=기본키값) #없으면 에러가 나는데, 서버에러로 인식한다.
객체 = 모델.objects.get(pk=기본키값) #없으면 에러가 나는데, 서버에러로 인식한다.
객체 = 모델.objects.get(id=기본키값) #위와 동일
객체 = 모델.objects.filter(id=기본키값) #위와 동일
객체 = get_object_or_404(모델명, pk=기본키값) #서버에러가 나지 않게끔.
객체 = get_object_or_404(모델명, pk=기본키값) #서버에러가 나지 않게끔.


</syntaxhighlight><br />
</syntaxhighlight><br />
52번째 줄: 55번째 줄:
     .filter(조건)
     .filter(조건)
     .filter(조건2)
     .filter(조건2)
</syntaxhighlight>filter에서 각종 연산자를 사용할 땐 '__'를 붙인다.<syntaxhighlight lang="python">
def index(request):
    목록 = 모델.objects.filter(속성__startswith='시작할단어')
</syntaxhighlight>
</syntaxhighlight>


=== 제외하기 ===
===제외하기===
필터로 원하는 조건을 받아들이는 것과 반대로, 조건에 따라 제외하는 것도 가능하다. 필터와 동일하게 중첩으로 걸 수 있다.<syntaxhighlight lang="python">
필터로 원하는 조건을 받아들이는 것과 반대로, 조건에 따라 제외하는 것도 가능하다. 필터와 동일하게 중첩으로 걸 수 있다.<syntaxhighlight lang="python">
from django.shortcuts import render
from django.shortcuts import render
63번째 줄: 69번째 줄:
</syntaxhighlight>
</syntaxhighlight>


=== 삭제하기 ===
===삭제하기===
해당 객체를 불러온 후 delete()를 붙여준다.<syntaxhighlight lang="python">
해당 객체를 불러온 후 delete()를 붙여준다.<syntaxhighlight lang="python">
def index(request):
def index(request):
79번째 줄: 85번째 줄:


===외래키 연결===
===외래키 연결===
모델에서 외래키로 1:N 연결을 한 경우.
외래키가 연결된 모델의 경우, 외래키 필드에 해당 키의 아이디(pk)를 넣어주면 된다.
외래키가 연결된 모델의 경우, 외래키 필드에 해당 키의 아이디(pk)를 넣어주면 된다.


86번째 줄: 94번째 줄:


answer.question 을 사용하면 어느 질문에 달린 것인지, 질문의 id를 얻어올 수 있다.
answer.question 을 사용하면 어느 질문에 달린 것인지, 질문의 id를 얻어올 수 있다.
하위에서 상위모델로 갈 땐 <code>모델.상위모델</code> 형태로 접근. 하위모델에서 자신과 연결된 상위모델을 조회할 수 있다.
상위에서 하위모델로 갈 땐 <code>모델.하위모델_set</code> 형태로 접근.


===질문에서 답변 뽑아내기===
===질문에서 답변 뽑아내기===

2020년 11월 9일 (월) 10:26 판

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

  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. 장고:팁

데이터 불러오기


모델의 pk 얻기

모델명.id 가 pk이다.

객체 조회

pk를 알면 다음과 같이 해당 객체를 불러올 수 있다. 모델.objects.get(id=pk)

from django.shortcuts import get_object_or_404#기본키값에 해당하는 모델이 없을 경우 404 에러 반환.
from .models import 모델명#모델을 임포트 한다.

객체 = 모델.objects.get(pk=기본키값) #없으면 에러가 나는데, 서버에러로 인식한다.
객체 = 모델.objects.get(id=기본키값) #위와 동일
객체 = 모델.objects.filter(id=기본키값) #위와 동일
객체 = get_object_or_404(모델명, pk=기본키값) #서버에러가 나지 않게끔.


목록 조회

from django.shortcuts import render
from .models import 모델명#모델을 임포트 한다.

#모델.objects는 객체목록을 받는다는 의미이다.
def index(request):
    목록 = 모델.objects.order_by('-create_date') #create_date속성의 역순으로 정리하라는 의미.
    context={'템플릿에서 쓸 변수명':목록)
    return render(request, '템플릿', context)

객체 다 가져오기

from django.shortcuts import render
from .models import 모델명#모델을 임포트 한다.

#모델.objects는 객체목록을 받는다는 의미이다.
def index(request):
    목록 = 모델.objects.all

모델.objects.all[:5] 처럼 상위 5개만 가져오는 방식도 가능.

필터로 걸러서 가져오기

from django.shortcuts import render
from .models import 모델명#모델을 임포트 한다.

#모델.objects는 객체목록을 받는다는 의미이다.
def index(request):
    목록 = 모델.objects.filter(칼럼명 = True, >0 따위의 조건들...)
    목록2= 목록.objects.filter(조건들..)#객체에 또다시 필터를 걸 수도 있다.

필터는 몇번이라도 걸 수 있는데, 장고는 지연평가 방식을 사용하기 때문에 실제로 데이터를 질의하는 것은 한 번 뿐이다. 덕분에 부하가 걸리지 않고도 filter를 자유롭게 사용할 수 있다.

def index(request):
    목록 = 모델.objects.filter(칼럼명 = True, >0 따위의 조건들...)
    .filter(조건)
    .filter(조건2)

filter에서 각종 연산자를 사용할 땐 '__'를 붙인다.

def index(request):
    목록 = 모델.objects.filter(속성__startswith='시작할단어')

제외하기

필터로 원하는 조건을 받아들이는 것과 반대로, 조건에 따라 제외하는 것도 가능하다. 필터와 동일하게 중첩으로 걸 수 있다.

from django.shortcuts import render
from .models import 모델명#모델을 임포트 한다.

def index(request):
    목록 = 모델.objects.exclude(칼럼명 = True, >0 따위의 조건들...)

삭제하기

해당 객체를 불러온 후 delete()를 붙여준다.

def index(request):
    목록 = 모델.objects.exclude(칼럼명 = True, >0 따위의 조건들...).delete() #조건을 제외한 것들을 삭제한다.

특정단어 검색

속성에 특정 단어가 포함된 객체를 불러올 땐 다음과 같이 한다. 모델.objects.filter(속성__contains='장고') (언더바가 2개임에 유의)

객체의 속성에 접근

모델.속성 형태로 속성에 접근 가능하다. 일반적으로

객체 = 모델.objects.get(id=pk)

객체.속성 형태로 접근한다.(수정을 하고 반드시 저장을 해주어야 한다.)

외래키 연결

모델에서 외래키로 1:N 연결을 한 경우.

외래키가 연결된 모델의 경우, 외래키 필드에 해당 키의 아이디(pk)를 넣어주면 된다.

ex) answer(question=질문키, 기타등등 필드 채우기)

이후 answer.save()를 하면 해당 질문에 대한 답변이 저장된다.

answer.question 을 사용하면 어느 질문에 달린 것인지, 질문의 id를 얻어올 수 있다.

하위에서 상위모델로 갈 땐 모델.상위모델 형태로 접근. 하위모델에서 자신과 연결된 상위모델을 조회할 수 있다.

상위에서 하위모델로 갈 땐 모델.하위모델_set 형태로 접근.

질문에서 답변 뽑아내기

반대로 질문에서 여러 답변들이 어떤 게 달렸는지 추출할 수도 있다.

모델.연결모델_set.all 를 실행하면 모델에 foreign키로 연결모델들 객체를 얻을 수 있다.

모델.연결모델_set.all.count 는 몇 개가 있는지 세어주고.

이처럼 속성을 가져오는 것은 탬플릿에서도 사용이 가능하다.


데이터 저장하기

객체 저장

객체(모델)를 조회, 조작한 후 모델.save()를 실행한다.

데이터 삭제

객체 삭제

조회, 조작한 후 모델.delete()를 실행.

권한관리

로그인

로그인이 있어야 필요한 기능은 다음과 같은 형태로 구현.(함수 앞에 둔다.)

from django.contrib.auth.decorators import login_required #로그인이 있어야 가능함

@login_required(login_url='로그인링크가 어디인지 지정')
def question_create(request):
    if request.method == 'POST':#포스트로 요청이 들어온다면... 글을 올리는 기능.
        form = QuestionForm(request.POST) #폼을 불러와 내용입력을 받는다.
from django.shortcuts import render
from .models import 모델명#모델을 임포트 한다.

#모델.objects는 객체목록을 받는다는 의미이다.
def index(request):
    객체 = self.request.user.id #현재 로그인한 사용자의 아이디를 얻을 수 있다.

기타 기능

url 주소 불러오기

url 주소를 불러오는 기능을 넣을 때 하드코딩 해두면 나중에 수정이 일어날 때 또 일일이 바꿔야 하는 경우가 생긴다.

그럴 땐 reverse('앱이름:인덱스', args=('넘길변수',)) 형태로 해당하는 url을 추출할 수 있다.

탬플릿에 보낼 땐 render로 처리하기 때문에 잘 쓰진 않는 기능이다.