WEB2 - Python

활용 - 생성 구현 2 - 전송한 정보의 처리

수업소개

html form을 이용해서 전송한 데이터를 Python 애플리케이션이 받아서 처리하는 방법을 소개합니다. 

 

 

강의

 

 

 

소스코드

process_create.py

#!/usr/local/bin/python3

import cgi
form = cgi.FieldStorage()
title = form["title"].value
description = form['description'].value

opened_file = open('data/'+title, 'w')
opened_file.write(description)
opened_file.close()

#Redirection
print("Location: index.py?id="+title)
print()

 

댓글

댓글 본문
  1. Yeojin
    moon님, 해결하셨나요?
    저도 같은 문제로 고생했는데, 해결이 안되요 ㅠㅠ
    위에꺼랑 똑같이도 해보고, import sys도 해보고 하는데, 리디렉션이 안되고, 해당 URL이 그대로 프린트되네요..ㅜㅜ
    대화보기
    • 영상 잘보고 있습니다!!

      윈도우 10 사용해서 따라하는 중인데

      제출을 눌러도 화면에 텍스트로 출려되지도 않고 internal server error 이 계속 뜨네요 ㅠㅠ
      대체 무슨 문제인지 모르겠습니다 ㅠㅠ
    • 악어
      2020-03-14 완료
    • 스티븐잡숴
      완료
    • 완료 - 계속 malformed header 에러가 떠서 해결법을 찾느라 고생했는데
      원인은 중간에 테스트 용도로 써놓은 print 문을 제가 삭제하지 않아서였네요.

      index.py에서 맨 처음에
      print("Content-Type: text/html")을 삽입해서 다음에 올 내용들이
      html 파일이라 지정한 것처럼, 여기서는
      print("Location: ...) 로 Location 헤더를 사용하는 것이 의도인데,
      그에 앞서 엉뚱한 것들이 print되니까 당연히 존재하지 않는 헤더를 지정한 것으로 브라우저가 해석해서 에러가 발생했습니다.
      에러를 해결하느라 https://developer.mozilla.org......ers 이걸 읽어보게 되어 나름의 성과는 있었네요..
    • 쑤우
      수강완료. 감사합니다.
    • 굼벵이
      완료
    • 20191004 Ted 완료!
    • 베리믹스
      저도 win10 환경이에요, 마지막 Redirection 부분에서 동일하게 코드 작성하면 HTML에서 해당 페이지로 이동 안되고 그대로 출력 안되시는 분들 아래코드로 복사붙혀넣기로 한번 확인해보세요.

      #!python
      import sys # 모듈 임시경로 등록
      import codecs # 한글처리
      import cgi

      sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach()) # 한글처리 2

      form = cgi.FieldStorage()
      title = form.getvalue('title')
      description = form.getvalue('description')

      opened_file = open('data/'+title, 'w', encoding='utf-8')
      opened_file.write(description)
      opened_file.close()

      print('Location: index.py?id='+title)
      print()
      대화보기
      • 끄어
        permission error가 계속 발생햇는데, data폴더쪽에서 sudo chmod 777넣어서 어떻게 잘됫읍미다..
      • 김영인
        저는 맥북 사용하고 있는데, 한글로 전송해도 잘 되네요 ㅎㅎ
      • bright_kim
        Excellent
      • 정훈
        위코드에서 redirection 이후 실행시에 아래의 에러가 발생하는 것으로 보입니다. malformed header의 의미가 무엇인지 혹시 알려주시면 감사하겠습니다.

        [Mon Jan 28 23:08:18.768105 2019] [cgid:error] [pid 30401] [client ::1:53842] malformed header from script 'process_create.py': Bad header: num mum is, referer: http://localhost.......py
      • 와 이제 사용자와 상호작용할수 있는 웹페이지를 만들수 있게 되었네요ㅠㅠㅠ 이고잉님 언제나 감사합니당!!!^ㅁ^
      • JuicyFresh
        감사합니다.
      • warmhoon
        title 에 "/" (슬래쉬)가 들어가면 폴더로 인식하고 data폴더 밑에 파일이 없다고 오류가 나오는것 같아요~
      • Lethesriver
        호그와트에서 마법을 배우는 기분입니다
        자바, 파이썬, WEB1 거쳐서 배우고 있는데 너무 신기하고 재밌네요ㅠㅠ
        감사합니다
      • 민턴쟁이
        타이틀 정보에 #등을 넣어보니 index.py파일로 이동하는걸 보니
        역시 보안까지 완강해야 겠죠

        이고잉님 너무 감사 합니다. ~~
        좋은 수업 잘듣고 갑니다.
      • 호동
        안녕하세요. codeanywhere로 따라해 보고 잇는데요. 글쓰기를 하면 다음과 같은 오류가 뜨는데 뭐가 문제인지 모르겠어서요.
        Traceback (most recent call last):
        File "/home/cabox/workspace/process_create.py", line 10, in <module>
        open_file = open('data/' + title, 'w');
        PermissionError: [Errno 13] Permission denied: 'data/Python'
      • Sungwoong Pyeon
        해결했습니다 정말 감사합니다. 핵심 키는
        <form enctype="multipart/form-data" action="process_create.py" method="post">
        enctype="multipart/form-data" 이거 였습니다.
        다시 한번 답변 감사합니다.
        대화보기
        • egoing
          아래와 같이 검색을 해보니 몇몇 사례들이 보이네요.
          https://www.google.co.kr......F-8

          참고해보셔요~
          대화보기
          • Sungwoong Pyeon
            제가 <p><input type="file" name="pic" accept="image/*"></p> 위에서 설명해주신 방법으로 이미지도 추가해보려고 합니다. images directory 아래에 이미지 이름으로 파일생성은 됩니다. 하지만 이미지는 저장되지 않네요.
            예를들어 nodejs.jpg로 파일생성은 되는데 파일을 클릭해보면 사진은 없습니다. 조언 부탁드립니다.
          • moon
            넵 답변 감사합니다~
            대화보기
            • egoing
              아래 주소를 보시면 전송된 폼의 정보를 확인하는 방법이 있습니다. 이걸 보시고 제대로 폼이 전송 되었는지 확인해보셔요

              https://wpscholar.com......me/
              대화보기
              • moon
                넵 확인 했습니당~
                (크롬) 개발자 도구의 Network 탭의 내용에서는 별도의 에러 메세지는 없습니다.
                다만 에디션(VS code)에서 코드 실행 시 "process_create.py"의 title = form['title'].value
                라인에서 KeyErro메세지를 확인 할수 있었습니다...

                에러 메세지는 다음과 같습니다.
                Traceback (most recent call last):
                File "d:\Bitnami\wampstack-7.1.18-1\apache2\htdocs\Syntex\process_create.py", line 7, in <module>
                title = form['title'].value
                File "D:\python-3.7.0\lib\cgi.py", line 527, in __getitem__
                raise KeyError(key)
                KeyError: 'title'
                제가 해석하기에는 ..
                "creat.py"의 form문의 title 값을 불러오지 못하는것 같은데...
                어떻게 해결해야 할지를 모르겠습니다...
                https://github.com......ect

                코드 한번 봐주시면 감사 하겠습니다!
                도와 주세욤!!!
                수업 항상 감사히 듣고 있습니다.
                대화보기
                • egoing
                  (크롬) 개발자 도구의 Network 탭의 내용을 모니터링 해보셨는지요?
                  대화보기
                  • moon
                    문의 드립니다.
                    현재 Win10에서 수업을 잘 따라하고 있습니다.
                    마지막 Redirection 부분에서 동일하게 코드 작성하면 HTML에서 해당 페이지로 이동 안되고 그대로 출력 됩니다~

                    어떻게 해결 해야 할까요?
                  • ChoeDoby
                    저도 그 에러가 나서 한번 에러로그를 찾아보았는데요, 에러로그에 보면
                    Premature end of script headers라고 되어있습니다. 이걸 구글링 해보면
                    HTTP header와 body 사이에는 적어도 하나는 필요하다고 되어있는데
                    index.py와 create.py에는 그 사이에 이미 공백이 존재했고,
                    process_create.py 파일에서는 다른 바디부분이 존재하지 않기 때문에 print()를 통해
                    공백을 추가해 줘야 했던 것 같습니다.
                    대화보기
                    • daengdaengLee
                      codeanywhere에서 실습하는 중 에러가 나는 부분 공유합니다.

                      data 디렉토리에 대해 apache 서버에서 쓰기 권한이 없어서 Permission denied 에러가 발생합니다.
                      해당 디렉토리의 권한 설정을 바꿔주면 동작합니다.

                      // workspace 디렉토리에서
                      $ sudo chgrp www-data ./data
                      $ sudo chmod g+rwx ./data

                      실행시키면 정상 동작합니다.

                      자세한 내용, 원리를 아시는 분은 댓글로 내용을 추가해주세요 :)
                    • SongSong
                      안녕하세요
                      index.py 와 create.py 에서는 print()를 붙이지 않아도 전혀문제없었는데

                      현재 파일(process_create.py) 에서만 마지막에 print() 이부분을 빼면 에러가 발생하네요

                      저 부분이 어떤 의미를 가지길래 위와같은 차이가 존재하는지 궁금합니다!!!
                    • 초보개발자
                      open 함수 관련해서 한글 utf-8 문제는

                      import codecs

                      opened_file=codecs.open('data/'+title,'w','utf-8')

                      이런식으로 open 함수 앞에 codecs. 붙여주고 인자로 'utf-8' 적어주니까 한글 안깨지네요!
                    • quantico
                      코드애니웨어에서 form전송을 하면 (104)Connection reset by peer
                      AH02550: Failed to flush CGI outputto client, referer
                      위와 같은 에러가 납니다. 도와주세요
                    버전 관리
                    egoing
                    현재 버전
                    선택 버전
                    graphittie 자세히 보기