#!/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 = " "
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