WEB2 - Python

활용 - 파일 기능을 이용해 본문 구현

수업소개

본문의 내용을 별도의 파일로 저장하고, 파이썬의 파일 제어 기능을 이용해서 파일을 읽어서 본문의 내용을 자동으로 생성하는 기능을 구현해봅니다. 

 

 

강의

 

 

소스코드

변경사항

#!/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))

 

댓글

댓글 본문
  1. scientist
    한글이 출력되지 않았는데 덕분에 해결되었습니다 감사합니다!

    https://digital-play.tistory.com/103
    파이썬 unicode decode error 원인
    대화보기
    • 윤재승
      점점 봤어요 수가 줄어든다
    • labis98
      2022.02.23 좋은 강의 한번 더 들어요~~~!
    • pmxsg
      2022.02.04
    • labis98
      20220109 좋은 강의 감사합니다.
    • 2021.09.11 완료 WOW
    • 이택진
      210520
    • 초딩 개발자
      2021/05/09
    • jeisyoon
      2021.04.09 화일 기능을 이용하여 본문 구현 - OK
    • Scia
      data 폴더가 syntax의 하위 폴더로 들어갔으니 open() 안의 함수의 경로를 안 바꿔줘서 그러지 않았을까요??

      open('syntax/data/'+pageId).read()
      대화보기
      • 이재형
        2021.01.25
      • VIBOT
        OK
      • 박민지
        2021.01.13
      • hksap
        210101
      • HolyWater
        2020.10.14
      • dagel0102
        20.10.09
      • cgoing
        cgoing / 2020.10.02
      • jiyeong
        2020.09.01.
      • OneJae EE
        20.05.08 금 / 37세 비전공자 / 완료
      • 바보
        data 폴더의 HTML을 소문자로 만들어서 빈 페이지가 나왔습니다 ㅜ,.ㅜ
      • 악어
        2020-03-11 완료
      • 스티븐잡숴
        완료
      • 초보왕
        페이지마다 이미지를 넣고싶은데 index.py 에서는 이미지가 잘 나오는데 html 페이지에서는 태그입력을 해도 이미지가 경로지정도 제대로 해줬는데 안나오네요.. 뭔가 다른 방법이 필요한가요?
      • mucollabo@gmail.com
        저는 HTML 을 HTLM 이라고 오타 내놓고 한참을 해맸네요...TT
        혹 저처럼 ~~ㅋㅋ 스펠링 함 점검해보세요^^
      • 왕초
        그 이유가 궁금하네요ㅜㅜㅜㅜ
        대화보기
        • apldeap
          12/26
        • 자랭쓰
          저장하고서 저장한 내용이 한글이면 화면이 공백으로 나오는 에러가 떴었는데 ,
          description = open('data/'+pageId,'r',encoding='UTF8').read()
          이처럼 데스크립션과 Id 뒤에 encoding = 'UTF8' 이라는 코드를 입력해주니 되네요!! 수업 잘듣고있습니다. 감사합니다.
        • xuanxi
          20191126
        • 쑤우
          수강완료. 감사합니다~
        • 굼벵이
          완료
        • 20191004 Ted 완료!
        • 음허허
          그리고 no such file 뜨는거는 지금 이거 파일 상주하고 있는 위치에서
          pwd 치고 위치를 그대로 받아서 open( "~~~~"
          넣으니까 작동햇읍니다.
        • 움하하
          html 의 경우 페이지를 다 따로 만들어서 그거를 연결시키는 과정인데,
          파이썬의 경우는 open(), read() 메소드 이용해서 기존템플릿은 유지하면서 내용을 바꿀수 잇다는건가요?
        • 어렵다
          파이썬 자체 내에서는 한글 실행이 되는데
          data 밑에 파일에 한글을 작성하면
          UnicodeDecodeError: 'cp949' 가 뜨면서 오류가 나옵니다.
          영어만 작성할 경우 잘 작동 되고요...
          해결 방법 혹시 아시나요..?
        • 어렵다
          파이썬 자체 내에서는 한글 실행이 되는데
          data 밑에 파일에 한글을 작성하면
          UnicodeDecodeError: 'cp949' 가 뜨면서 오류가 나옵니다.
          영어만 작성할 경우 잘 작동 되고요...
          해결 방법 혹시 아시나요..?
          대화보기
          • 참치아빠
            윈도우에서 한글 입출력 방법을 아래와 같이 해 보았더니, 잘 됩니다. 참고되시길...

            #!python
            import sys # 한글 출력하기 위해서
            import codecs # 한글 출력하기 위해서
            sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())

            print("Content-Type: text/html;charset=utf-8\r\n")
            #print()
            import cgi

            form = cgi.FieldStorage()
            if('id' in form):
            pageId = form["id"].value
            description = open('data/'+pageId,'r', encoding='utf-8').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>
            </ol>
            <h2>{title}</h2>
            <p>{desc}</p>
            </body>
            </html>
            '''.format(title=pageId, desc=description))
          • San Ho Lee
            data 하위 데이터들은 상대경
            로를 지정해서 위치를 찾아 갈수 있게 하니 잘 작동하네요!
            '../data/' 요렇게 감싸니 잘 찾아주네요. 신통방통합니다. 너무 재밋습니다.
          • 한올지다
            아랫분의 말씀 참고해서 이렇게 하니까 해결됩니다!

            import sys
            import codecs
            import cgi

            print("Content-Type: text/html")
            print()

            # stdout의 인코딩을 UTF-8로 강제 변환한다
            sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
            form = cgi.FieldStorage()

            if 'id' in form:
            pageId = form.getvalue('id')
            description = open('./data/'+pageId , 'r', encoding = 'UTF-8').read()

            ...(생략)

            완전히 정확힌 이유는 모르겠네요 ㅎㅎ 설명해주실분???
          • 방패없음똥겜
            -
            대화보기
            • 방패없음똥겜
              브라우저 자체 인코딩을 euc-kr로 바꾸니까 제대로 출력이 됐습니다. 지금 구글버전은 인코딩을 자동으로 잡는다고 설정을 빼버려서 https://chrome.google.com......=ko 위 링크의 확장프로그램으로 euc-kr로 바꾸니까 됩니다. 이유는 잘 모르겠습니다.

              1. 파이썬 파일 헤더에 #-*- coding: utf-8 -*- 추가
              2. 확장프로그램으로 브라우저 인코딩을 euc-kr로 변경

              근본적인 해결책이 아닌점 애석하게 생각합니다.

              수정) 이미 디디님이 해결방안을 올려주셨네요;;
              대화보기
              • 점점 어려워 지네요... ㅠㅠ
              • JuicyFresh
                감사합니다.
              • Seankim
                CSS, HTML 파일이 안뜨네요
              • 초간단
                No such file 뜨는거
                htdocs폴더-data폴더-(CSS,HTML,JavaScript파일)
                htdocs폴더-syntax폴더-(index.py파일, 1.html, 2.html, 3.html 파일)
                이런식 파일들이 위치해 있다면,

                index.py파일에서 경로 'data/' 를,
                '../data/' 로 바꿔주시면 되요.
              • 도라도라
                Codeanywhere로 하시는 분들은 /home/cabox/workspace/temp/data/ 라고 하시면 정상적으로 실행됩니다.
              • 캬캬갱스
                data 폴더를 syntax 폴더 밑으로 했는데요 화면이 안나와요 index.py 페이지는 뜨구요 Hello,web 까지는 됐구요
                data폴더 안에 HTML.txt, CSS,txt, JavaScript.txt 파일만들었구요 내용도 같게 했는데요 ㅠㅠ 화면이 흰색창 그래로 입니다 ㅠㅠ
              • guattari92
                저 data 폴더를 htdocs 폴더에서 syntax 폴더 밑으로 옮겼더니 실행이 잘되네요.
                동영상에서는 htdocs 폴더 밑에서 불러와도 바로 작동이 잘 되던데, 왜 index.py 와 같은 폴더 내에 있을 때만 불러와지는 걸까요?
                대화보기
                • sudo
                  유튜브 재생목록에 해당파일이 누락되어있습니다 확인부탁드립니다
                • guattari92
                  data 폴더 및에 HTML 파일을 만들었는데,
                  에러로그에는 FileNotFoundError: [Errno 2] No such file or directory: 'data/HTML'
                  이런 메시지가 계속 뜨네요. 어떻게 해야할까요?
                • 굿날
                  자바스크립 페이지의 (/ˈdʒɑːvəˌskrɪpt/[6]) 이 부분 때문에 페이지 로딩이 되지 않습니다.
                  (/ˈdʒɑːvəˌskrɪpt/[6]) 이걸 지우면 정상 작동 하고요.
                  에러 로그는 이거입니다.
                  File "/home/cabox/workspace/index.py", line 8, in <module>
                  description = open('data/' + pageId, 'r').read()
                  File "/usr/lib/python3.4/encodings/ascii.py", line 26, in decode return codecs.ascii_decode(input, self.errors)[0]
                  UnicodeDecodeError: 'ascii' codec can't decode byte 0xcb in position 13: ordinal not in range(128)
                  어떻게 해결 가능한가요?
                버전 관리
                egoing
                현재 버전
                선택 버전
                graphittie 자세히 보기