Django View 생성

Jwahoon Kim·2021년 7월 6일
0

Django

목록 보기
5/10

Model을 만들었다면 이를 적용할 View를 만들어 주자!

  • django 같은 경우 ORM 기법을 이용하여 python 문법으로 DB를 조작할 수 있다.
  • {model 명}.objects로 테이블 지정 후 .all(), get() 등과 같은 함수를 이용해 해당 모델 DB 테이블 지정 가능
# blogPosts/views.py
from django.shortcuts import render
from .models import Post # 추가 (참고: .models == blogPosts.models)

def index(request): # 원래 있던 index 함수 수정
    posts = Post.objects.all()
    return render(request, 'blogPosts/index.html', {'posts': posts})
  • render의 세 번째 인자인 {‘posts’: posts} 는 context(optional)로서, 파이썬 dict type 객체를 사용하고 있습니다. view에서 사용하던 파이썬 변수를 django html 템플릿으로 넘겨주는 역할을 합니다.

  • key: 장고 템플릿 변수, 즉 view에서 조작한 데이터를 template에서 어떤 이름으로 활용할 지

  • value: view의 python 변수, view에서 조작한 데이터

더 많은 함수가 궁금하다면?

view의 예시를 좀 더 알아보자!

  • view의 함수를 http request 요청 방식에 따라 다르게 처리할 수 있다.
  • 방식은 아래와 같다.
# blogPosts(앱이름)/views.py
from django.shortcuts import render, redirect # redirect 추가
from .models import Post
...
# index 함수 코드 변경
def index(request):
    if request.method == 'GET': # index
        posts = Post.objects.all()
        return render(request, 'blogPosts/index.html', {'posts': posts})
    elif request.method == 'POST': # create(form을 이용하여 submit한 형태) 
        title = request.POST['title']
        content = request.POST['content']
        Post.objects.create(title=title, content=content)
        return redirect('blogPosts:index') 
  • 위 코드에서 POST 요청일 경우 redirect를 하게 되는데 이는 GET 방식이어서 다시 index 함수의 첫번째 if 문에 걸리게 된다.

참고로

  • 아래 코드는 동일한 기능을 수행한다.
Post.objects.create(title=title, content=content)  # 이 코드를

new_post = Post(title=title, content=content) # 이렇게 바꾸어도 똑같이 작동합니다.
new_post.save()

view를 Class화 해보자!

아래 코드를 보면 중복이 많고 귀찮다..

def index(request):
def new(request):
def show(request, id):
def delete(request, id):
def update(request, id):
def comment_new(request, id):
def comment_show(request, id, cid):
def comment_delete(request, id, cid):
def comment_update(request, id, cid):

아래와 같이 Class화 시키면 좀 더 구조화, 유지 보수 쉽게 가능!

  • views.CommentView.create 같은 식으로 접근!
class CommentView:
    def create(request, id):
    def read(request, id, cid):
    def update(request, id, cid):
    def delete(request, id, cid):

render?? redirect??

  • render는 템플릿을 불러오고 불러온 템플릿에 context(가공한 데이터)를 넣어줄 수 있습니다. 반면 redirect는 url로 이동시켜주는 것이 전부입니다. 그 후에는 url과 연결된 view가 실행됩니다.

0개의 댓글