python) 데이터 삭제 기능 구현 (Delete)

jun_legend·2021년 5월 15일
0

Python-Web Application

목록 보기
9/11
post-thumbnail

"데이터 삭제 기능 구현 (Delete)"

#!/usr/local/bin/python3
print("Content-Type: text/html")
print()
import cgi, os

files = os.listdir('data')
listStr = " "
for item in files:
  listStr += '<li><a href="index.py?id={name}">{name}</a></li>'.format(name=item)

form = cgi.FieldStorage()
if 'id' in form:
  pageId = form["id"].value
  description = open('data/'+pageId, 'r').read()
  update_link = '<a href="update.py?id={}">update</a>'.format(pageId)
else:
  pageId = " "
  description = " " 
  update_link = " "
  
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}
  <form action="process_update.py" method="post">
    <p><input type="text" name="title" value="{title}"></p>
    <textarea rows="4" name="description">{desc}</textarea>
    <p><input type="submit"></p>
  </form>
  <h2>{title}</h2>
  <p>{desc}</p>
</body>
</html>
'''.format(
  title = pageId, 
  desc = description, 
  listStr = listStr, 
  update_link = update_link))

위와 같이 데이터를 생성, 수정 할 수 있는 웹 애플리케이션에서
삭제 기능을 구현해보자.


1) id 값을 가지는 제목 페이지에만 삭제 버튼 세팅

삭제 기능은 클릭했을 때 바로 삭제가 이뤄지기 때문에
삭제 링크가 공유되면 링크에 접속하는 것만으로도 삭제 기능이 실행될 수 있다.
이러한 위험을 피하기 위해 삭제 기능은 form 태그를 사용해서 만들자.

id 값 유무를 조건으로 하는 기존의 조건문에
삭제 폼 코드를 추가하자.

if 'id' in form:
    delete_action = '''
      <form action="process-delete.py" method="post">
        <input type="hidden" name="pageId" value="{}">
        <input type="submit" value="delete">
      </form>
    '''.format(pageId)
else:
    delete-action = " "
  • < input type="submit" value=" " >
    submit(제출) 버튼의 문구를 value 값으로 변경

2) 포매팅을 사용해서 조건문의 변수로 delete 버튼 생성

{update_link}
{delete_action}
    .
    .
    .
'''.format(
    title = pageId,
    desc = description,
    listStr = listStr,
    update_link = update_link,
    dalete_action = delete_action))

3) 삭제 기능을 추가한 index.py 의 최종 코드는 다음과 같다.

#!/usr/local/bin/python3
print("Content-Type: text/html")
print()

import cgi, os

files = os.listdir('data')
listStr = " "
for item in files:
  listStr += '<li><a href="index.py?id={name}">{name}</a></li>'.format(name=item)

form = cgi.FieldStorage()
if 'id' in form:
  pageId = form["id"].value
  description = open('data/'+pageId, 'r').read()
  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)

else:
  pageId = 'Welcome'
  description = 'Hello, web'
  update_link = " "
  delete_action = " "
  
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}
  </form>
  <h2>{title}</h2>
  <p>{desc}</p>
</body>
</html>
'''.format(
  title = pageId, 
  desc = description, 
  listStr = listStr, 
  update_link = update_link,
  delete_action = delete_action))

4) 삭제할 데이터 정보를 수신할 process_delete.py 파일 생성 및 실행권한 부여

터미널 - process_delete.py가 있는 디렉토리에서 실행)
sudo chmod a+x process_delete.py


5) 삭제할 데이터 값을 (pageId 값) 받아 글 제목 목록 및 파일과 연동시키기

#!/usr/local/bin/python3
import cgi
form = cgi.FeildStorage
pageId = form["pageId"].value

파일을 읽거나 쓰는 것이 아니라 삭제할 것이므로
'python3 file delete' 등의 키워드로 검색하면
다음과 같은 파일 삭제 코드를 확인 할 수 있다.

import os
os.remove("삭제할 파일")

파일 삭제 코드를 적용하면 다음과 같다.

#!/usr/local/bin/python3
import cgi, os
form = cgi.FeildStorage
pageId = form["pageId"].value
os.remove('data/'+pageId)

6) 파일 및 목록에서 삭제 후 홈페이지(index.py)로 이동하도록 세팅

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

7) process_delete.py 의 최종 코드는 아래와 같다.

#!/usr/local/bin/python3

import cgi, os
form = cgi.FieldStorage()
pageId = form["pageId"].value

os.remove('data/'+pageId)

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

이제 delete 버튼을 클릭하면
data 디렉토리에 있던 id 값과 동일한 파일명의 파일이 삭제되고
웹 페이지 제목 목록에서도 삭제되는 것을 확인 할 수 있다.


참고) 관련 게시글




[출처] 생활코딩 WEB2 - Python
https://opentutorials.org/module/3357

0개의 댓글