Web-қ қ HTML ә XML құң қғ www- ұ ң ғ ү . Қ ң қ ү ө JavaScript қ, ұ әғ ө. java Flash- құғ , ұ қ web-қ ққ , ө, ү java Flash өң қ , ғ HTTP WWW ү қ.
Web-қ құ ϳ (қ ү,), ұ ә өң ө . Web- құң ұ ғ ү ү . , ө ң қ қ-қ қ ( қ ( )), ұң ө ү ұғ . ұ қң ғ ғ ғ ө ғ .
CGI-
WWW ү қ құң қ CGI- ( ). CGI (Common Gateway Interface, ) ұ қ қ ң ө ә . WWW ғ, - қ қ ү ұ ү. ұ - әң ( ө қ ү), қ (, ә, ә ғ қ)
қғ - қ ғ қ , ә, ISINDEX ү ә қ ( sys.argv қ қ .).
ғ - ң (ә CGI-) ә ң ә GET ә POST. Ә ә ә ү . ғ URL- ә , http://host/cgibin/a.cgi?a=1&b=3. QUERY_STRING ң . POST ә ғ .
|
|
ұ ұ ү ү ғ - (ә cgi-bin ) , ұ ұқ , HTML құң . ң . Unix ү chmod a+x қ ғ .
қ os.environ ө ә ғ ә ғ ө ү .
#!/usr/bin/python
import os
print """Content-Type: text/plain
%s""" % os.environ
ң ө - ғ ө . web- CGI- қ ө қ, ұ -қ ө ө (ұ ү, құң ңғ ңғ қ, ә ..).
ү :
QUERY_STRING
ұ .
REMOTE_ADDR
IP-.
REMOTE_USER
( ғ ).
SCRIPT_NAME
.
SCRIPT_FILENAME
.
SERVER_NAME
.
HTTP_USER_AGENT
ң .
REQUEST_URI
(URI) ұ.
HTTP_USER_AGENT
.
HTTP_ACCEPT_LANGUAGE
Қ құ .
CGI- os.environ ө қ:
{
'DOCUMENT_ROOT': '/var/www/html',
'SERVER_ADDR': '127.0.0.1',
'SERVER_PORT': '80',
'GATEWAY_INTERFACE': 'CGI/1.1',
'HTTP_ACCEPT_LANGUAGE': 'en-us, en;q=0.50',
'REMOTE_ADDR': '127.0.0.1',
'SERVER_NAME': 'rnd.onego.ru',
'HTTP_CONNECTION': 'close',
'HTTP_USER_AGENT': 'Mozilla/5.0 (X11; U; Linux i586; en-US;
rv:1.0.1) Gecko/20021003',
'HTTP_ACCEPT_CHARSET': 'ISO-8859-1, utf-8;q=0.66, *;q=0.66',
'HTTP_ACCEPT': 'text/xml,application/xml,application/xhtml+xml,
text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,
image/gif;q=0.2,text/css,*/*;q=0.1',
'REQUEST_URI': '/cgi-bin/test.py?a=1',
'PATH': '/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin',
'QUERY_STRING': 'a=1&b=2',
'SCRIPT_FILENAME': '/var/www/cgi-bin/test.py',
'HTTP_KEEP_ALIVE': '300',
'HTTP_HOST': 'localhost',
'REQUEST_METHOD': 'GET',
'SERVER_SIGNATURE': 'Apache/1.3.23 Server at rnd.onego.ru Port 80',
'SCRIPT_NAME': '/cgi-bin/test.py',
'SERVER_ADMIN': 'root@localhost',
'SERVER_SOFTWARE': 'Apache/1.3.23 (Unix) (Red-Hat/Linux)
mod_python/2.7.8 Python/1.5.2 PHP/4.1.2',
'SERVER_PROTOCOL': 'HTTP/1.0',
'REMOTE_PORT': '39251'
}
CGI- қ ( өң ү Image қ):
#!/usr/bin/python
import sys
print """Content-Type: image/jpeg
"""
import Image
i = Image.new("RGB", (10,10))
i.im.draw_rectangle((0,0,10,10), 1)
i.save(sys.stdout, "jpeg")
Cgi
|
|
Python- cgi ү CGI қ . ң ү ө:
#!/usr/bin/python
# -*- coding: cp1251 -*-
import cgi, os
# ұ
f = cgi.FieldStorage()
if f.has_key("a"):
a = f["a"].value
else:
a = "0"
# ұ өң
b = str(int(a)+1)
mytext = open(os.environ["SCRIPT_FILENAME"]).read()
mytext_html = cgi.escape(mytext)
# қ
print """Content-Type: text/html
<html><head><title>ң : %(b)s = %(a)s + 1</title></head>
<body>
%(b)s
<table width="80%%"><tr><td>
<form action="me.cgi" method="GET">
<input type="text" name="a" value="0" size="6">
<input type="submit" name="b" value="Өң">
</form></td></tr></table>
<pre>
%(mytext_html)s
</pre>
</body></html>""" % vars()
ұ 1 қ. қ ө ң қ ғ. ө қ, >, <, & ү cgi.escape() қғ. - қ ү қғ. ө ү, қ vars() ө қғ. ү ү, . ә қ қ ғ қ. FieldStorage ө қ, , ә ә ү value қ қ ғ . ә, ә ә ғ , қ , -қ ә ө ә.
ң!
CGI-ң ә өң ұқ ә ұқ ә ұқ . . ң ң ә ү ғ ғ . , қ ғ ә, eval() ң ә ғ ұқ; қ ң ; қ SQL-ұң ө қң қ қ. -қ, ғ ә қ қң қ қ, URL- ғ ө , әң ғ қ- ғ ғ .
ғ қғ int() қ ү : қ ә , ү қ , қ Internal Server Error ө .
ʳ ә ң өң . CGI-ң ұ ө ә ғ ү . ұ ң ә ғ , -қ ң ққ қ, ө ұ ә ү.
|
|
Ә, ң (әң, HTML-құң, ң, -ң ә ..) ғ . ң, қ ( ң ө), ң ұ ң.
ұ ғ ұ. ү ә . қ ә getlist() ә ө ғ .
lst = form.getlist("fld")
lst - ғ fld қ ө , ә қ ( ү, ө ).
ғ қ (upload-). ә ғ ұ ү ө.
#!/usr/bin/env python
import cgi
form = cgi.FieldStorage()
file_contents = ""
if form.has_key("filename"):
fileitem = form["filename"]
if fileitem.file:
file_contents = """<P> :
<PRE>%s</PRE>""" % fileitem.file.read()
print """Content-Type: text/html
<HTML><HEAD><TITLE> </TITLE></HEAD>
<BODY><H1> </H1>
<P><FORM ENCTYPE="multipart/form-data"
ACTION="getfile.cgi" METHOD="POST">
<br>: <INPUT TYPE="file" NAME="filename">
<br><INPUT TYPE="submit" NAME="button" VALUE=" ">
</FORM>
%s
</BODY></HTML>""" % file_contents
ң ң - қ : ә CGI- ү қғ ғ. - "Browse" ү қ ұ, file ү ө . "Browse" ү қ, қң - қ, ң. , ү, ү .
CGI-ң ө ү cgitb қғ . Қ ғ ұ қ ө , қғ HTML- ғ. ө ң қ
import cgitb
cgitb.enable(1)
, қ ө :
import cgitb
cgitb.enable(0, logdir="/tmp")
қ, ө , ұ , ө ң ө ғ. ұ , CGI-ң ұ құ ө ө, ү.
CGI- ?
Ө , құ ә CGI ққ ң өң , ө қ. Ө ә ұ ү қ ( - Python ) , ү, қ ә .. Python ң қ , ғ қ ң ү ү ә ү.
|
|
қ, ә қ қ .
ұ ә ә, -- құ, ү.
CGI ұ ү әү қ, FastCGI PCGI (Persistent CGI). ә mod_python Apache web- ү қ.
құ ұққғ ә, - ғ .
mod_python -өң Apache HTTP-ұң өң ү ү , қ .
ң , -өң ұ . ұ /var/www/html/mywebdir . -, ұ mod_python ү, Apache :
<Directory "/var/www/html/mywebdir>
AddHandler python-program.py
PythonHandler mprocess
</Directory>
- қ қ, ә қ қ, mprocess.py өң ғ . ұ http://localhost/*.py ү ұғ .
mprocess.py Hello, world! ө ғ:
from mod_python import apache
def handler(req):
req.content_type = "text/html"
req.send_http_header()
req.write("""<HTML><HEAD><TITLE>Hello, world!</TITLE></HEAD>
<BODY>Hello, world!</BODY></HTML>""")
return apache.OK
CGI- өңң ғ:
1. өң ә HTTP-ұ қ: қ, ә -өң қ ( ұ ғ- handler()). Ә -ң ү-ұқ (-) өң ө ә Python .
2. ң ә .1 әү HTTP-ұ һқ ө. , қ ғ ә қ ұ қғ .
3. Өң ң қ, CGI- ә қ қ.
4. Өң қ ө . sys.path- қ ү.
5. ғғ ұ ( os.getcwd() ө ) өң ғ.
6. #!- ң Python ң ұқ қ. mod_python- құғ ұқ ұ .
7. қ қ Request- ү өң . Қ ә қ .
8. - өң ң ө қ, қ ғ ө қ . touch mprocess.py ң ө ү ң.
9. os.environ ө өң қғ ү. қ, өң қғ қ ғ ұ. қ ғ : req.add_common_vars(); params = req.subprocess_env.
10. Өң ғқ, CGI- қ, ғ қ ң (ғ ) ү. MaxRequestsPerChild ң ( ү-ұқ өң, ұң ) ә ө қ қ.
|
|
ғ ү өң ң :
def authenhandler(req):
password = req.get_basic_auth_pw()
user = req.connection.user
if user == "user1" and password == "secret":
return apache.OK
else:
return apache.HTTP_UNAUTHORIZED
ұ , қғ, mprocess.py қ . қ, ұ (PythonAuthenHandler) ү өң ғ , қ қ, -қ, ә Apache ү AuthType,AuthName, require , ә қ:
<Directory "/var/www/html/mywebdir>
AddHandler python-program.py
PythonHandler mprocess
PythonAuthenHandler mprocess
AuthType Basic
AuthName "My page"
require valid-user
</Directory>
Ә, ұ ғ. ә ққ ү.
қ ү құ ( mod_python-қ құ , қ өң ұ қ ):
PythonPostReadRequestHandler
ғ ұң ң ғ өң.
PythonTransHandler
URI ұ ө ү (ң ң ).
PythonHeaderParserHandler
ұ ө өң.
PythonAccessHandler
қ өң (, IP- ).
PythonAuthenHandler
Қ .
PythonTypeHandler
Құ үң, ң ә .. қ ә/ .
PythonFixupHandler
Өң ұ қ ө ө.
PythonHandler
ұ өң .
PythonInitHandler
PythonPostReadRequestHandler PythonHeaderParserHandler - .
PythonLogHandler
ғ қ.
PythonCleanupHandler
Request- қ өң.
өң һ ү ұ , қ ң қ ү (, PythonPostReadRequestHandler).
mod_python ө қ ұ - құғ ә Python- қ -ң ұ қғ .
қ құ ә CGI- қ - қғ, -қ құ ү ү ә қ. ғ ұ ғқ ү -қң , ұ қ ү (CMS, Content Management System), - ә WWW- құ ү ғ ә ү . қ CMS-ү -қ қ ү, құ ү ғ ә, CMS ү ү , - ү ү. қ қ қ ү ү ң , қ қ қ.
Pyton ү қ . -қң құ ү ң Zope (.
http://zope.org) (Z Object Publishing Environment, ). Zope - , қ қ - ұ , , Apache. Zope - құғ , , Plone/Zope ө қ, қ өңң -қң ғ . қ Zope , ұ, ө ү , ғ ұ (ұ ), -қ(-), -ү (ғ). Zope ғ Python ө , қ ғ - құ ү, ұ ұ Zope-ң өң - қ .