본문 바로가기
개발자 일지/Phython

[파이썬 기초]form 데이터 전송 및 처리방법(CRUD-Delete)

by 네빌링 2021. 3. 24.
반응형

-HTML form태그를 이용하여 파이썬 애플리케이션이 데이터를 받아서 처리하는 방법을 알아본다. CRUD중 Delete를 구현한다.

-생활코딩 파이썬 강의를 바탕으로 학습 및 보충학습 하였다.

-파이썬은 3.9.2 ver를 사용한다.


(이전 파이썬 포스팅 예제와 연결되니 참고 부탁드립니다)

 

CRUD의 마지막인 Delete를 만들어본다. Delete는 os.remove 함수로 간단하게 만들 수 있다.

Delete 버튼 만들기

 우선 delete버튼을 만드는데 delete버튼을 a태그를 통한 링크 방식으로 만들면, 누군가 링크를 공유한 경우 그 사람들도 delete를 할 수 있는 보안 문제가 발생하기 때문에 form 방식으로 다음과 같이 만든다.

 

index.py 일부

if 'id' in form:
    pageId = form["id"].value
    description = open('data/'+pageId,'r').read() #open함수로 내용 불러오기
    update_link = '<a href="update.py?id={}">update</a>'.format(pageId)
    delete_action= '''
        <form action="process_delete.py" method="post">
            <input type="hidden" name="pageId" value="{}">
            <input type="submit" value="delete">
        </form>
    '''.format(pageId)  #delete버튼을 form방식으로 만든다
else :
    pageId = 'welcome'
    description = 'Welcome!'
    update_link = ''
    delete_action = ''

 update_link와 마찬가지로 delete_action도 if분기로 만들어 목록클릭시에만 활성화되도록 한다. delete버튼을 클릭하면 pageId만 넘기면 되기 때문에 hidden태그에 pageId를 format기능으로 담은 후 delete버튼 클릭 시 post방식으로 process_delete.py로 넘겨준다.

 delete버튼은 print('''...''')에 format을 이용하여 다음과 같이 넣어준다.

 

index.py 일부

print('''<!doctype html>
<html>
<head>
  <title>WEB1 - Welcome</title>
  <meta charset="utf-8">
</head>
<body>
  <h1><a href="index.py">WEB</a></h1>
  <ol>
    {listStr}
  </ol>
  <a href="create.py">create</a>
  {update_link}
  {delete_action} #delete버튼 넣기
  <h2>{title}</h2>
  <p>{desc}
  </p>
</body>
</html>
'''.format(title=pageId, desc=description, listStr=listStr,update_link=update_link, delete_action=delete_action))

다음과 같이 delete버튼이 생성된 화면이 만들어진다.

 

delete버튼이 생성된 것을 확인

Delete 처리하기

proccess_delete.py

#!Python
import cgi,os
form = cgi.FieldStorage()
pageId= form['pageId'].value

os.remove('data/'+pageId)

#Redirection
print("Location: index.py")
print()

os.remove(파일경로/파일명)을 이용하면 삭제가 가능하다. redirection은 그냥 index.py로 한다. 이후 목록을 클릭 후 delete버튼을 누르면 삭제된 후 index.py로 돌아오는 것을 확인할 수 있다.

 

 

반응형