[Django] - CRUD 기능 구현

오동훈·2022년 6월 22일
0

Django

목록 보기
3/23
post-thumbnail
post-custom-banner

1. CRUD 📕

Django는 MVT(Model View Template) 아키텍처를 기반으로 하며 CRUD(Create, Retrieve, Update, Delete) 작업을 중심으로 합니다.

  • Create : DB에 데이터를 생성함
  • Read : DB에서 데이터를 읽어옴
  • Update : DB의 특정 데이터를 수정함
  • Delete : DB의 특정 데이터를 삭제함

CRUD 기능을 구현하기 앞서 반복적인 코드들은 함수로 정리해 놓았습니다.

📃 views.py

# global variable

nextId = 4
topics = [
    {'id': 0, 'title': "routing", 'body': 'Routing is ...'},
    {'id': 1, 'title': "view", 'body': 'View is ...'},
    {'id': 2, 'title': "Model", 'body': 'Model is ...'},
]

def HTMLTemplate(articleTag):
    global topics
    ol = ''
    for topic in topics:
        ol += f'<li><a href="/read/{topic["id"]}/">{topic["title"]}</a></li>'

    return HttpResponse(f'''
    <html>
    <body>
        <h1><a href="/">Django</a></h1>
        <ol>
            {ol}
        </ol>
        {articleTag}
        <ul>
            <li><a href="/create">create</a></li>
        </ul>
    </body>
    
    </html>
'''

2. Create - 데이터 생성 📙

GET vs POST

  • GET : 데이터를 얻기 위한 요청
    - 데이터가 URL에 나타남
    - 위 사진에서 아래와 같은 모습이 GET 방식

📃 views.py

def create(request):
    title = request.GET['title']
  • POST : 데이터를 생성하기 위한 요청
    - 데이터가 URL에 나타나지 않음
    - 위 사진에서 위의 모습과 같은 모습이 POST 방식
    - csrf 공격 방지 필요

📃 views.py

from django.shortcuts import redirect

def create(request):
    title = request.POST["title"]
    body = request.POST["body"]
    newTopic = {"id": nextId, "title": title, "body": body}
    topics.append(newTopic)
    url = "read/" + str(nextId)
    nextId += 1
    return redirect(url)

💡 redirect 사용 방법

from django.shortcuts import redirect

def my_view(request):
    ...
    obj = MyModel.objects.get(...)
    return redirect(obj)

📃 views.py

  • form을 사용 : 데이터 유효성 검사 용이
<!--- new.html--->

<form action="/create" method="post">
	<p><input type="text" name="title" placeholder="title"></p>
	<p><textarea name="body" placeholder="body"></textarea></p>
	<input type="submit">
</form>

📖 request와 response에 대한 정보를 알고싶다면 아래의 document를 참고해보자 !

Django documentation - Request and response objects

📖 redirect에 대한 정보는 아래를 참고해보자 !
Django shortcut functions - Redirect


CSRF 예외 처리

Django에서 지원하는 보안 기능 중 하나라고 생각하면 되고, 주로 POST, PUT 및 DELETE와 같은 안전하지 못한 방법을 통해 요청할 때 일어날 수 있는 에러입니다. 단, GET방식은 안전합니다!

CSRF verification failed. Request aborted. 해결 방법
POST를 전송하는 폼에서는 주로 이렇게 처리하면 예외처리가 가능합니다.

# 1. 다음과 같이 import 시켜주고
from django.views.decorators.csrf import csrf_exempt

# 2. 함수 전에 @csrf_exempt 적어주면 예외처리가 가능하다.
@csrf_exempt
def create(request):

📖 CSRF에 대한 정보는 아래의 사이트를 참고해보자 !

Django documentation - Cross Site Request Forgery protection


3. Read - 데이터 호출 📒

  • 조건에 부합하는 필드 가져오기

📃 views.py

def read(request, id):
    global topics
    article = ''
    for topic in topics:
        if topic["id"] == int(id):
            article = f'<h2>{topic["title"]}</h2>{topic["body"]}'
    return HttpResponse(HTMLTemplate(article))

4. Update - 데이터 수정 📗

  • 해당 객체에 접근하여 기존의 데이터를 가져온 후 수정하여 저장

5. Delete - 데이터 삭제 📘

  • 해당 객체에 접근해 기존의 데이터를 가져온 후 삭제

참고 자료 📩

Django documentation - Request and response objects

Django shortcut functions - Redirect

Django documentation - Cross Site Request Forgery protection


profile
삽질의 기록들🐥
post-custom-banner

0개의 댓글