Python(cgi)で簡易掲示板の作り方

提供:sufeeWiki
ナビゲーションに移動 検索に移動

python簡易掲示版-cgi編-

cgiで実装できる物理的に操作しているものになります。
仕組みは、POSTで送られて来るURLを取得し、分解、辞書型に入れることで、名前とコメントを表示している
ちなみに最後にRefresh(更新)しているのは、表示遅延をなくす為です。

0.これが導入したときのやつ

サムネイルの作成エラー: ファイルがありません


-事前準備-

・cgiファイル
・txtファイル(コメント記録用)
  ※いずれも、chmodでその他に読み込み,実行権限を与えること
     txtは書き込み権限も与えたほうがよい
$chmod 705 hogehoge

1.cgi(python-処理側)側

communication.cgi

#!/usr/bin/python3

# coding: utf-8

import sys

import io

import urllib.parse

from urllib.parse import urlparse

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

files = "comment.txt"

print("Content-type: text/html; charset=utf-8")

print()

print("<!DOCTYPE html>")

print("<html>")

print("<head>")

print('<meta charset="utf-8">')

print('</head>')

print("<body>")

def print_msg(name,text):

    data = {}

    with open(files,"a",encoding='utf-8'as w_data:

        w_data.write(name+':'+text+'<br>\n')

 

def documentsDisplay():

    with open(files,"r",encoding='utf-8'as r_data:

        #html_scan = r_data.read()

        #print(html_scan)

        for text in r_data:

            print(text)

 

documentsDisplay()

data_scan = {}

print('<form action="communication.cgi" method="POST">')

print('お名前:<input type="text" name="id" value="名無しさん" size="20"/><br>')

print('コメント:<br><textarea style="line-hight: 20px" name="message" row="8" cols="50" wrap="hard" placeholder="コメントを記入"></textarea>')

print('<input type="submit" name="submit" value="投稿"/>')

print("</form>")

print("</body>")

print("</html>")

 

#main ここでURLを取込、分解している

scan = input()

scan = urllib.parse.unquote(scan) #URLをデコード

scan = scan.split("&"#URL&から属性を分ける

for scanner in scan:

    (key,value)=scanner.split("=")

    data_scan[key] = value

print_msg(data_scan["id"],data_scan["message"])

print('<meta http-equiv="Refresh" content="0;URL=">')

 

cgiモジュールを使わない処理はこんな感じ

URLをinputしてそれをutf-8でtxtに書き込み、その後urlのモジュールでデコードしているんだ!

サムネイルの作成エラー: ファイルがありません

2.mainだけでやるとこんな感じだよ

#!/usr/bin/python3

# coding: utf-8

import sys

import io

import urllib.parse

from urllib.parse import urlparse

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

data_scan = {}

files = "comment.txt"

print("Content-type: text/html; charset=utf-8")

print()

print("<!DOCTYPE html>")

print("<html>")

print("<head>")

print('<meta charset="utf-8">')

print('</head>')

print("<body>")

 

with open(files,"r",encoding='utf-8'as r_data:

    #html_scan = r_data.read()

    #print(html_scan)

    for text in r_data:

        print(text)

 

print('<form action="kadai13.cgi" method="POST">')

print('お名前:<input type="text" name="id" value="名無しさん" size="20"/><br>')

print('コメント:<br><textarea style="line-hight: 20px" name="message" row="8" cols="50" wrap="hard" placeholder="コメントを記入"></textarea>')

print('<input type="submit" name="submit" value="投稿"/>')

print("</form>")

print("</body>")

print("</html>")

 

#ここでURLを取込、分解している

scan = input()

scan = urllib.parse.unquote(scan) #URLをデコード

scan = scan.split("&"#URL&から属性を分ける

 

for scanner in scan:

    (key,value)=scanner.split("=")

    data_scan[key] = value

 

data = {}

 

with open(files,"a",encoding='utf-8'as w_data:

    w_data.write(data_scan["id"]+':'+data_scan["message"]+'<br>\n')

 

print('<meta http-equiv="Refresh" content="0;URL=">')