python) 반복문과 파일제어를 이용해 파일과 목록 연동하기

jun_legend·2021년 5월 12일
0

Python-Web Application

목록 보기
5/11
post-thumbnail

"반복문과 파일제어를 이용해 파일과 목록 연동하기"

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

import cgi
form = cgi.FieldStorage()

if "id" in form:
  pageId = form["id"].value
  description = open('data/'+pageId, 'r').read()
else:
  pageId = "welcome"
  description = "Hello, web"

print('''<!doctype html>
<html>
<head>
  <title>WEB1 - Welcome</title>
  <meta charset="utf-8">
</head>
<body>
  <h1><a href="index.py">WEB</a></h1>
  <ol>
    <li><a href="index.py?id=HTML">HTML</a></li>
    <li><a href="index.py?id=CSS">CSS</a></li>
    <li><a href="index.py?id=JavaScript">Javascript</a></li>
    <li><a href="index.py?id=Python">Python</a></li>
  </ol>
  <h2>{title}</h2>
  <p>{desc}</p>
</body>
</html>
'''.format(title = pageId, desc = description))

위의 웹 애플리케이션은
data 디렉토리에 있는 파일을 통해 글의 본문을 제어할 수 있는 반면,
표시된 부분의 글 제목 목록들은 제어할 수 없다.

for 반복문과 파일 제어를 활용해서
글 제목 목록을 관리할 수 있도록 구현해보자.

구현 방법)
data 디렉토리에 있는 파일들의 목록을 불러와서
글 제목 목록을 보여주고 있는 li 태그 부분과 연동되도록 만들자


1) python3 file list in directory 등으로 검색하면
아래와 같이 파일 목록을 불러올 수 있는 코드를 확인할 수 있다.

os.listdir(path)
  • os 는 import 로 불러올 수 있는 모듈명

2) os.listdir(path) 코드를 적용시켜주자.

import cgi, os
files = os.listdir('data')
  • cgi 는 원래 사용하던 모듈이고 os 모듈도 불러 올 수 있도록 함
  • os.listdir(path) path 에 파일들이 있는 data 디렉토리를 넣고
    files 라는 변수에 저장

3) for 반복문을 활용하면 아래와 같이 목록을 만들고 이를 리스트에 추가할 수 있다.

listStr = " "
for item in files:
    listStr += '<li><a href="index.py?id={name}">{name}</a></li>'.format(name = item)
  • (data 디렉토리의 파일들이 있는) files 에서 파일을 하나씩 가져와
    해당 파일의 파일명과 같은 이름의 목록을 만든다.

  • 포매팅을 사용해 파일명을 name 이라는 변수에 두고
    name 변수를 id값과 목록명의 위치에 치환한다.

  • 이렇게 id값, 파일명과 같은 이름으로 목록명이 만들어질 때 마다
    listStr 이라는 (변수명을 가진) 리스트에 추가한다.

  • files에서 data 디렉토리에 있는 파일을 모두 가져올 때 까지
    위 과정을 반복한다.


4) listStr 이라는 리스트 변수를
웹 페이지 내 글 제목 목록을 보여주던 li태그 부분과 포매팅 코드에 치환시키자.

  <ol>{listStr}</ol>
  <h2>{title}</h2>
  <p>{desc}</p>
</body>
</html>
'''.format(title= pageId, desc= description, listStr= listStr))

5) 최종 코드는 아래와 같다.

#!/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()
else:
  pageId = 'Welcome'
  description = 'Hello, web'

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>
  <h2>{title}</h2>
  <p>{desc}</p>
</body>
</html>
'''.format(title = pageId, desc = description, listStr = listStr))

이제 data 디렉토리에 파일이 생성, 삭제되거나
보관중인 파일명이 수정되면
글 제목 목록도 함께 생성, 삭제 또는 수정된다.




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

0개의 댓글