ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파일 수정하기
    Python 2018. 11. 16. 10:52

    파일 수정하기

    파일을 생성하고 목록을 웹으로 표현했으니 이제 원하는 파일을 수정하는 방법을 알아보자.




     수정 폼 및 서버 페이지 생성하기

    파일 수정하기를 구현하기 위해 update_form.py와 update_file.py를 생성하자.





     생성 폼 수정하기

    파일 수정 폼으로 이동하기 위해서 파일 생성 폼을 수정해야한다.


    위 그림처럼 생성한 파일 목록을 보여주며 클릭이 가능하도록 만들 것이고, 파일을 클릭 시 하단에 수정 입력 폼에 파일의 내용을 불러오도록 만들 것이다.


    그러기 위해선 우선 파일 이름을 클릭할 수 있도록 만들고 수정 폼으로 링크를 걸어줘야 한다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    #!python
    import cgi, os
     
     
    #가져올 파일 목록의 경로
    path_dir = 'filefolder/'
    #경로에 존재하는 파일 목록 가져오기
    file_list = os.listdir(path_dir)
    #파일 이름 순서대로 정렬하기
    file_list.sort()
     
    file_list_link = ''
    for item in file_list:
        file_list_link += '<p><a href="update_form.py?id={item}">{item}</a></p>'.format(item=item)
     
    print("Content-Type: text/html; charset=utf-8\n")
    print()
    print('''
    <!DOCTYPE html>
    <html>
    <head>
    </head>
    <body>
    {file_list_link}
    <form action="create_file.py" method="POST">
        <p><input type="text" name="title" placeholder="title"></p>
        <p><textarea cols="22" row="5" name="content" placeholder="content"></textarea></p>    
        <p><input type="submit"></p>
    </form>
    </body>
    </html>
    '''.format(file_list_link=file_list_link))
    cs


    12번 줄 - 

    파일 목록에 링크를 걸기 위해 변수를 하나 생성한다.


    13번 줄 - 

    각각 파일에 <a></a>태그를 붙이는 작업을 반복한다.

    이 때 어떠한 파일을 수정할 것인지 판단하기 위해서 수정 폼에 파일 이름을 쿼리 스트링으로 전달하도록 설정한다.




     수정 폼 생성하기

    파일 수정 폼은 파일 생성 폼을 토대로 화면을 출력해야한다.

    단, 파일 생성 폼에서 선택한 파일의 정보를 입력 폼에 데이터를 출력해줘야한다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    #!python
    import cgi, os
     
    #가져올 파일 목록의 경로
    path_dir = 'filefolder/'
    #경로에 존재하는 파일 목록 가져오기
    file_list = os.listdir(path_dir)
    #파일 이름 순서대로 정렬하기
    file_list.sort()
     
    file_list_link = ''
    for item in file_list:
        file_list_link += '<p><a href="update_form.py?id={item}">{item}</a></p>'.format(item=item)
     
     
    form = cgi.FieldStorage()
    if "id" in form:
        pageId = form["id"].value
        content = open('filefolder/'+pageId, 'r').read()
    else:
        pageId = ''
        content = ''
     
     
    print("Content-Type: text/html; charset=utf-8\n")
    print()
    print('''
    <!DOCTYPE html>
    <html>
    <head>
    </head>
    <body>
    {file_list_link}
    <form action="update_file.py" method="POST">
        <input type="hidden" name="pageId" value="{pageId}">
        <p><input type="text" name="title" placeholder="title" value="{pageId}"></p>
        <p><textarea cols="22" row="5" name="content" placeholder="content">{content}</textarea></p>    
        <p><input type="submit" value="update"></p>
    </form>
    </body>
    </html>
    '''.format(file_list_link=file_list_link, pageId=pageId, content=content))
    cs


    16번 줄 - 

    쿼리 스트링 정보를 활용하기 위해 FieldStorage()객체를 생성한다.


    18번 줄 - 

    쿼리 스트링에 넘어온 페이지 ID(=파일 이름)를 변수에 저장한다.


    19번 줄 - 

    쿼리 스트링으로 넘어본 페이지 ID(=파일 이름)를 통해 실제 파일을 찾고 그 파일을 읽어들여서 파일 내용을 변수에 저장한다.


    34번 줄 - 

    update_file.py 페이지로 POST방식으로 데이터를 전달한다.


    35번 줄 - 

    hidden 태그로 pageId(파일 이름)을 update_file.py로 넘긴다.

    이는 어떠한 파일을 대상으로 수정할 것인지 판단하는 요인이 된다.


    36번 줄 -

    수정할 파일 이름을 작성한다.


    37번 줄 -

    수정할 파일의 내용을 작성한다.


    42번 줄 -

    기존 생성된 파일 제목과 파일 내용을 사용자에게 표현하기 위해 치환한다.




     수정 프로세스 작성하기

    사용자로부터 전달받은 새로운 내용을 기반으로 기존의 파일을 수정해야한다.

    핵심은 기존 파일명으로 기존 파일을 구분하여 선택하고 신규 파일명과 내용으로 변경해야한다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #!python
    import cgi, os
     
    form = cgi.FieldStorage()
    pageId = form["pageId"].value
    title = form["title"].value
    content = form["content"].value
     
    opened_file = open('filefolder/'+pageId, 'w')
    opened_file.write(content)
    opened_file.close()
     
    #파일의 이름과 내용을 변경한다. *os모듈의 rename(원본 파일 위치 및 이름, 변경할 파일 위치 및 이름)함수를 이용함
    os.rename('filefolder/'+pageId, 'filefolder/'+title)
     
    print("Location: create_form.py")
    print()
    cs


    4 ~ 7번 줄 - 

    update_form.py에서 전달받은 쿼리 스트링을 각각의 변수에 담는다.


    9 ~ 11번 줄 -

    기존 파일을 찾아서 가장먼저 파일 내용을 변경하고 IO를 닫는다.


    14번 줄 -

    파일 내용이 변경되었으면 파일 명을 바꿀 차례다.

    기존 파일을 찾아서 새로운 파일 명을 부여한다.


    16번 줄 - 

    모든 작업이 끝나면 사용자에게 파일 생성 폼으로 이동시켜준다.




     실행

    모든 작업이 완료되었으니 테스트 해보자.

    create_form.py로 접속해서 파일을 하나 선택하여 클릭해보자.


    파일을 선택하여 클릭하면 create_form.py에서 update_form.py로 이동하게 되며 입력 폼에 실제 파일의 이름과 내용이 출력된다.


    해당 내용을 모두 변경하고 update버튼을 클릭해보자.


    update가 완료되면 create_form.py로 이동하고 파일 리스트가 변경되는 것을 확인할 수 있다.






    'Python' 카테고리의 다른 글

    함수 생성하기  (0) 2018.11.17
    파일 삭제하기  (0) 2018.11.17
    파일 목록 출력하기  (0) 2018.11.16
    파일 생성하기  (0) 2018.11.16
    form을 이용하여 데이터 송수신하기  (0) 2018.11.16
Designed by Tistory.