[Python] Apache cgiでPythonを使う方法
こんにちは。明月です。
この投稿はApache cgiでPythonを使う方法に関する説明です。
以前に私がPythonを利用してウェブサーバー(http.server)を構築する方法に関して説明したことがあります。
link - [Python] Web serverを起動する方法(http.server)
でも、私も実際にhttp.serverを利用してウェブサーバーを構築したことはありません。実はhttp.serverでサービスを構築すると思えばちゃんと運用するかの疑問もあるし、良いAPIやオープンソースも多いのでPython(http.server)で構築する必要性を感じられません。
ウェブAPIプラットフォームをPHPに決め、構築する場合にapacheで構築します。 PHP言語も個人的に素晴らしいウェブスクリプト言語だし、よく使うプログラム言語です。
でも、ウェブの流れは様々のユーザが接続するマルチスレッド環境ですが、スクリプト言語のPHP言語だけでコントロールが限界があるし様々なCのDLLを参照して使うことはオブジェクトポイントやリソースを扱うことも簡単ではありません。
その限界はApacheのcgiでpythonを運用してある程度に補完がされます。私の場合、特にPythonは統計やグラフなどのライブラリがすごく多いのでよく使います。なので、PHPの言語の限界を超えてプログラミングを実装する場合はありません。
apacheにphpを設定する方法は以前に説明したことがあるのでご参考をお願します。
link - [PHP] PHP 開発環境設定とEclipse(IDE)の設定
apacheのcgiではperlとpythonを使うことがあります。perlも良いプログラム言語ですが、少し古い言語だし、コミュニティも以前より小さくなったので、最近はよく使わないかと思いもあります。(perl開発者にはすみません。)
そうならapacheのhttpd.confでcgiを設定しなければならないです。
***
<Directory "${SRVROOT}/cgi-bin">
AllowOverride none
AddHandler cgi-script .cgi .pl .py
Options +ExecCGI
Require all granted
</Directory>
***
apacheは基本的にcgiがperlで設定されているのでpythonを追加します。
(参考にapacheが実行するpcにはpythonがインストールしなければならないです。)
そしてapacheフォルダに行ったらcgi-binフォルダにあるのでそこにindex.pyを作成します。
#!D:\anaconda3\python.exe
# 最上端はpythonがインストールされているパスだ。
# -*- coding: UTF-8 -*-
# ファイルのエンコードタイプだ。
import cgi
# cgiはcgiプログラムに使うモジュールだ。
import cgitb
# cgitbはcgiプログラムデバッグに関するモジュールだ。(エラーが発生すればphpみたいにエラーを画面に表示する。)
cgitb.enable()
# パラメータを取得するための関数
# get、post区分なしでデータを持ち込む。
form = cgi.FieldStorage()
# パラメータdataを取得する。
data = form.getvalue('data')
# パラメータのtestを取得する。
test = form.getvalue('test')
# 画面い応答するhtmlドキュメント
html = f"""
<!DOCTYPE html>
<html>
<head><title>python</title></head>
<body>
<form method='post'>
<input type='text' name='test' value='hello'>
<input type='submit'>
</form>
<br />
data - {data} <br />
test - {test} <br />
</body>
</html>
""";
# ヘッダータイプ設定
print("Content-type:text/html")
# httpプロトコールでheaderとbodyの区分は改行なので必ず入れる。なければエラーに発生する。(bodyがないhttpファイルなので)
print('')
# バーディーを出力
print(html)
上の例をみれば私がパラメータでdataとtestの値を出力することにしました。はじめはGET方式で接続すればtestはNoneで出力しますが、テキストボックスにデータを入れてsubmitボタンを押下すると表示されます。
参考 - https://www.tutorialspoint.com/python/python_cgi_programming.htm
os.environを通ってヘッダーの情報を得られます。その中でヘッダー情報によってクッキーを取得できます。
#!D:\anaconda3\python.exe
# 最上端はpythonがインストールされているパスだ。
# -*- coding: UTF-8 -*-
# ファイルのエンコードタイプだ。
import cgi
# cgiはcgiプログラムに使うモジュールだ。
import cgitb
# cgitbはcgiプログラムデバッグに関するモジュールだ。(エラーが発生すればphpみたいにエラーを画面に表示する。)
cgitb.enable()
# os.environを使うためのモジュールだ。
import os
# ヘッダー設定
print("Content-type:text/html")
# httpプロトコールでheaderとbodyの区分は改行なので必ず入れる。なければエラーに発生する。(bodyがないhttpファイルなので)
print('')
# バーディーを出力
print("<html><head><title>python</title></head><body>")
# 情報を出力する。
for param in os.environ.keys():
print ("<b>%20s</b>: %s<br />" % (param, os.environ[param]))
print("</body></html>");
サーバ情報や要請ヘッダー情報が表示されます。
ここまでApache cgiでPythonを使う方法に関する説明でした。
ご不明なところや間違いところがあればコメントしてください。
- [Python] Redisデータベースに接続して使い方2022/02/21 18:23:49
- [Python] Seleniumライブラリを使う方法(自動ウェブテスト、ウェブスクレイピング)2021/10/25 19:29:00
- [Python] メール(smtplib)を送信する方法2020/07/27 18:38:43
- [Python] HttpConnection(requestsモジュール)でウェブサーバーで接続する方法2020/07/20 14:41:51
- [Python] Excel(openpyxl)を扱う方法2020/07/16 16:40:31
- [Python] ファイル圧縮、解凍(zipfile)する方法2020/07/14 19:14:22
- [Python] Apache cgiでPythonを使う方法2020/07/09 19:58:19
- [Python] Web serverを起動する方法(http.server)2020/07/09 00:13:13
- [Python] WebSocketを使う方法2020/07/07 17:29:18
- [Python] PythonとJavaのソケット通信する方法2020/07/03 18:35:50
- [Python] PythonとC#のソケット通信2020/07/01 19:28:22
- [Python] INI(環境設定ファイル)を扱う方法2020/06/30 18:26:01
- [Python] Jsonを扱う方法2020/06/29 19:18:15
- [Python] XMLファイルを扱う方法2020/06/26 19:18:14
- check2024/04/10 19:03:53
- [Java] 64.Spring bootとReactを連結する方法(Buildする方法)2022/03/25 21:02:18
- [Javascript] Node.jsをインストールしてReactを使う方法2022/03/23 18:01:34
- [Java] 63. Spring bootでcronスケジューラとComponentアノテーション2022/03/16 18:57:30
- [Java] 62. Spring bootでWeb-Filterを設定する方法(Spring Security)2022/03/15 22:16:37
- [Java] JWT(Json Web Token)を発行、確認する方法2022/03/14 19:12:58
- [Java] 61. Spring bootでRedisデータベースを利用してセッションクラスタリング設定する方法2022/03/01 18:20:52
- [Java] 60. Spring bootでApacheの連結とロードバランシングを設定する方法2022/02/28 18:45:48
- [Java] 59. Spring bootのJPAでEntityManagerを使い方2022/02/25 18:27:48
- [Java] 58. EclipseでSpring bootのJPAを設定する方法2022/02/23 18:11:10
- [Java] 57. EclipseでSpring bootを設定する方法2022/02/22 19:04:49
- [Python] Redisデータベースに接続して使い方2022/02/21 18:23:49
- [Java] Redisデータベースを接続して使い方(Jedisライブラリ)2022/02/16 18:13:17
- [C#] Redisのデータベースを接続して使い方2022/02/15 18:46:09
- [CentOS] Redisデータベースをインストールする方法とコマンドを使い方2022/02/14 18:33:07