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. 쑤우
    수강완료. 감사합니다.
  2. 굼벵이
    완료
  3. 20191004 Ted 완료!
  4. 베리믹스
    저도 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 자세히 보기