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. 참치아빠
    윈도우에서 한글 입출력 방법을 아래와 같이 해 보았더니, 잘 됩니다. 참고되시길...

    #!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))
  2. San Ho Lee
    data 하위 데이터들은 상대경
    로를 지정해서 위치를 찾아 갈수 있게 하니 잘 작동하네요!
    '../data/' 요렇게 감싸니 잘 찾아주네요. 신통방통합니다. 너무 재밋습니다.
  3. 한올지다
    아랫분의 말씀 참고해서 이렇게 하니까 해결됩니다!

    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()

    ...(생략)

    완전히 정확힌 이유는 모르겠네요 ㅎㅎ 설명해주실분???
  4. 방패없음똥겜
    -
    대화보기
    • 방패없음똥겜
      브라우저 자체 인코딩을 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 와 같은 폴더 내에 있을 때만 불러와지는 걸까요?
        대화보기
        • 유튜브 재생목록에 해당파일이 누락되어있습니다 확인부탁드립니다
        • 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
          오호 저도 몰랐는데 고맙습니다!
          대화보기
          • 디디
            윈도우에서 한글이 깨져서 나온다면,
            sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
            이 라인을 추가해보세요.

            아래 블로그에서 자세하게 나와있습니다.
            https://blog.ayukawa.kr......342
            대화보기
            • ym kim
              수업을 따라가면서 나만의 웹페이지를 만들어보고 있습니다.
              근데 한글만 넣으면 자꾸 오류가 나는데, 해결 방법을 여쭈어보아도 될지요?
              (구글링을 해보면
              #-*- coding:utf-8 -*-를 삽입하라는 등 몇가지 방법을 따라해 보았지만 소용없었습니다 ㅠ
              참고로 MacOS 사용자입니다,)

              늘 좋은 강의 감사드립니다!!
            • PassionOfStudy
              2018-03-28 - 3일차_다 번째 수강완료!

              이번 수업은 이해가 잘 되지않은 부분이 있어서 반복해서 들었습니다.
              궁금해서 여쭤보겠습니다.
              Q1)
              python의 open('data/'+pageId, 'r').read()에서 .read()라는 것은 열린파일의 텍스트를 읽어주는
              라이브러리 함수같은 것인가요?
              Q2)
              https://docs.python.org......tml 사이트에서 참고하는데요
              open후에 close()함수를 써서 닫아주는 것을 권장하던데요
              python에서 메모리낭비를 줄이기위해 자체적으로 닫아주지만 권장한다는것은 문제도 있다는 것인가요?
            • 안드레아신
              혼자서 이리저리 다시한번 시도 해본결과 ...
              JavaScript파일 생성해서 수업대로 "java is lorem~~ " 혹은 다른 문장 집어넣으면 무리없이 실행되는데,

              JavaScript 설명 wiki 영문판 첫문단을 가져와서 붙여넣으면 에러가 뜨네요 ..

              어차피 data폴더의 JavaScript파일은 텍스트형식인데
              왜 가져오는게 다르다고 실행이 안되는지 궁금합니다^^

              참고.. )
              발췌한 첫문단 위치 : https://en.wikipedia.org......ipt
              대화보기
              • 안드레아신
                수업 잘 듣고 있습니다.
                강의대로 실행은 문제없이 이루어지고 있는데
                한군데서 오류가 뜨는데 해결방법을 알고싶어서 질문드려요~

                HTML/ CSS는 클릭하면 내용이 잘 뜨는데
                JavaScript를 클릭하면 아무것도 안나오면서 에러가 발생합니다.
                error.log를 보니 CSS항목에 잘못(?)이 있는걸로 해석해서
                CSS대신 python으로 똑같이 삽입해도
                위 두개 항목은 변함없이 실행되는데 "JavaScript"만 누르면 아무것도 안뜨네요 ㅠㅠ

                뭐가 문제인지 알고 싶습니다^^

                error.log에 나온내용 (앞문장 생략)
                [client 127.0.0.1:55652] AH01215: Traceback (most recent call last):\r: D:/Bitnami/wampstack-7.1.15-0/apache2/htdocs/index.py, referer: http://127.0.0.1......hon

                [client 127.0.0.1:55652] AH01215: File "D:/Bitnami/wampstack-7.1.15-0/apache2/htdocs/index.py", line 8, in <module>\r: D:/Bitnami/wampstack-7.1.15-0/apache2/htdocs/index.py, referer: http://127.0.0.1......hon

                [client 127.0.0.1:55652] AH01215: description = open('data/'+pageId, 'r').read()\r: D:/Bitnami/wampstack-7.1.15-0/apache2/htdocs/index.py, referer: http://127.0.0.1......hon

                [client 127.0.0.1:55652] AH01215: UnicodeDecodeError: 'cp949' codec can't decode byte 0xcb in position 15: illegal multibyte sequence\r: D:/Bitnami/wampstack-7.1.15-0/apache2/htdocs/index.py, referer: http://127.0.0.1......hon
              • 폭스킴
                문법 다 배우고 활용을 배우는게 일반적인데, 이렇게 문법과 활용을 병행해서 배우니까 더 잘 와닿네요~ 단, 정말 초심자에게는 좀 어려울 듯 합니다만, 이 수업 구성에 감탄을 보냅니다~ 좋아요를 True 박은 반복문으로 돌려서 드리고 싶어요~ ^^
              버전 관리
              egoing
              현재 버전
              선택 버전
              graphittie 자세히 보기