Python(cgi)で簡易掲示板の作り方
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=">')