장고:view 각종 기능
편집하기
Sam
(
토론
|
기여
)
님의 2020년 11월 9일 (월) 10:06 판
(
→필터로 걸러서 가져오기
)
(
차이
)
← 이전 판
|
최신판
(
차이
) |
다음 판 →
(
차이
)
둘러보기로 이동
검색으로 이동
경고: 이 문서의 오래된 판을 편집하고 있습니다.
이것을 게시하면, 이 판 이후로 바뀐 모든 편집이 사라집니다.
경고:
로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다.
로그인
하거나
계정을 생성하면
편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.
스팸 방지 검사입니다. 이것을 입력하지
마세요
!
{{장고}} ==데이터 불러오기== <br /> ===모델의 pk 얻기=== 모델명.id 가 pk이다. <br /> ===객체 조회=== pk를 알면 다음과 같이 해당 객체를 불러올 수 있다. <code>모델.objects.get(id=pk)</code><syntaxhighlight lang="python"> from django.shortcuts import get_object_or_404#기본키값에 해당하는 모델이 없을 경우 404 에러 반환. from .models import 모델명#모델을 임포트 한다. 객체 = 모델.objects.get(pk=기본키값) #없으면 에러가 나는데, 서버에러로 인식한다. 객체 = get_object_or_404(모델명, pk=기본키값) #서버에러가 나지 않게끔. </syntaxhighlight><br /> ===목록 조회=== <syntaxhighlight lang="python"> from django.shortcuts import render from .models import 모델명#모델을 임포트 한다. #모델.objects는 객체목록을 받는다는 의미이다. def index(request): 목록 = 모델.objects.order_by('-create_date') #create_date속성의 역순으로 정리하라는 의미. context={'템플릿에서 쓸 변수명':목록) return render(request, '템플릿', context) </syntaxhighlight> ===객체 다 가져오기=== <syntaxhighlight lang="python"> from django.shortcuts import render from .models import 모델명#모델을 임포트 한다. #모델.objects는 객체목록을 받는다는 의미이다. def index(request): 목록 = 모델.objects.all </syntaxhighlight>모델.objects.all[:5] 처럼 상위 5개만 가져오는 방식도 가능. ===필터로 걸러서 가져오기=== <syntaxhighlight lang="python"> from django.shortcuts import render from .models import 모델명#모델을 임포트 한다. #모델.objects는 객체목록을 받는다는 의미이다. def index(request): 목록 = 모델.objects.filter(칼럼명 = True, >0 따위의 조건들...) 목록2= 목록.objects.filter(조건들..)#객체에 또다시 필터를 걸 수도 있다. </syntaxhighlight>필터는 몇번이라도 걸 수 있는데, 장고는 지연평가 방식을 사용하기 때문에 실제로 데이터를 질의하는 것은 한 번 뿐이다. 덕분에 부하가 걸리지 않고도 filter를 자유롭게 사용할 수 있다.<syntaxhighlight lang="python"> def index(request): 목록 = 모델.objects.filter(칼럼명 = True, >0 따위의 조건들...) .filter(조건) .filter(조건2) </syntaxhighlight> === 제외하기 === 필터로 원하는 조건을 받아들이는 것과 반대로, 조건에 따라 제외하는 것도 가능하다. 필터와 동일하게 중첩으로 걸 수 있다.<syntaxhighlight lang="python"> from django.shortcuts import render from .models import 모델명#모델을 임포트 한다. def index(request): 목록 = 모델.objects.exclude(칼럼명 = True, >0 따위의 조건들...) </syntaxhighlight> === 삭제하기 === 해당 객체를 불러온 후 delete()를 붙여준다.<syntaxhighlight lang="python"> def index(request): 목록 = 모델.objects.exclude(칼럼명 = True, >0 따위의 조건들...).delete() #조건을 제외한 것들을 삭제한다. </syntaxhighlight> ===특정단어 검색=== 속성에 특정 단어가 포함된 객체를 불러올 땐 다음과 같이 한다. <code>모델.objects.filter(속성__contains='장고')</code> (언더바가 2개임에 유의) ===객체의 속성에 접근=== 모델.속성 형태로 속성에 접근 가능하다. 일반적으로 <code>객체 = 모델.objects.get(id=pk)</code> 객체.속성 형태로 접근한다.(수정을 하고 반드시 저장을 해주어야 한다.) ===외래키 연결=== 외래키가 연결된 모델의 경우, 외래키 필드에 해당 키의 아이디(pk)를 넣어주면 된다. ex) answer(question=질문키, 기타등등 필드 채우기) 이후 answer.save()를 하면 해당 질문에 대한 답변이 저장된다. answer.question 을 사용하면 어느 질문에 달린 것인지, 질문의 id를 얻어올 수 있다. ===질문에서 답변 뽑아내기=== 반대로 질문에서 여러 답변들이 어떤 게 달렸는지 추출할 수도 있다. 모델.연결모델_set.all 를 실행하면 모델에 foreign키로 연결모델들 객체를 얻을 수 있다. 모델.연결모델_set.all.count 는 몇 개가 있는지 세어주고. 이처럼 속성을 가져오는 것은 탬플릿에서도 사용이 가능하다. <br /> ==데이터 저장하기== ===객체 저장=== 객체(모델)를 조회, 조작한 후 모델<code>.save()</code>를 실행한다. ==데이터 삭제== ===객체 삭제=== 조회, 조작한 후 <code>모델.delete()</code>를 실행. ==권한관리== ===로그인=== 로그인이 있어야 필요한 기능은 다음과 같은 형태로 구현.(함수 앞에 둔다.)<syntaxhighlight lang="python"> from django.contrib.auth.decorators import login_required #로그인이 있어야 가능함 @login_required(login_url='로그인링크가 어디인지 지정') def question_create(request): if request.method == 'POST':#포스트로 요청이 들어온다면... 글을 올리는 기능. form = QuestionForm(request.POST) #폼을 불러와 내용입력을 받는다. </syntaxhighlight><syntaxhighlight lang="python"> from django.shortcuts import render from .models import 모델명#모델을 임포트 한다. #모델.objects는 객체목록을 받는다는 의미이다. def index(request): 객체 = self.request.user.id #현재 로그인한 사용자의 아이디를 얻을 수 있다. </syntaxhighlight> ==기타 기능== ===url 주소 불러오기=== url 주소를 불러오는 기능을 넣을 때 하드코딩 해두면 나중에 수정이 일어날 때 또 일일이 바꿔야 하는 경우가 생긴다. 그럴 땐 <code>reverse('앱이름:인덱스', args=('넘길변수',))</code> 형태로 해당하는 url을 추출할 수 있다. 탬플릿에 보낼 땐 render로 처리하기 때문에 잘 쓰진 않는 기능이다.
요약:
학교의 모든 지식. SMwiki에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는
학교의 모든 지식. SMwiki:저작권
문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다.
저작권이 있는 내용을 허가 없이 저장하지 마세요!
취소
편집 도움말
(새 창에서 열림)
이 문서에서 사용한 틀:
틀:장고
(
원본 보기
) (보호됨)
둘러보기 메뉴
개인 도구
로그인하지 않음
토론
기여
로그인
이름공간
문서
토론
한국어
보기
읽기
편집
원본 편집
역사 보기
더 보기
검색
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
도구
여기를 가리키는 문서
가리키는 글의 최근 바뀜
특수 문서 목록
문서 정보