Öncelikle python destekleyen bir yer bulmalısınız veya kendi bilgisayarınızda deneyebilirsiniz.
# -*- coding: utf-8 -*-
print """\
Content-Type: text/html\n
<html>
<body> bu bir deneme sayfasıdır... </body>
</html>
"""
cgi-python da html kodları print ile yazılır.
Content-Type: text/html\n satırı ile içeriğin türünü belirttik buradaki "\n" karakteri koyduk çünkü bu satırdan sonra 2 tane "\n" olmalı.
şimdi örneğimizi geliştirelim...
# -*- coding: utf-8 -*-
import cgi
form = cgi.FieldStorage()
isim = form.getfirst("isim", "bos")
print """\
Content-Type: text/html\n
<html>
<body>
<b>Gelen isim: </b> %s
</body>
</html>
""" % str(isim)
burada cgi modülündeki FieldStorage sınıfının getfirst metodu ile "isim" adındaki argumanı aldık bu arguman index.py?isim=deneme şeklinde gelir buradaki "deneme" argumandır.
getfirst e verilen 2. arguman ise hiçbir değer gelmezse isim değişkenine atanır yani değer verilmezse değişkenin değeri "bos" olur.
örneğimizi daha da geliştirecek olursak...
# -*- coding: utf-8 -*-
import cgi
form = cgi.FieldStorage()
isim = form.getfirst("isim", "bos")
print """\
Content-Type: text/html\n
<html>
<body>
"""
if isim != "bos":
print """\n
<b> Gelen isim: </b> %s
""" % isim
else:
print """\
<form action="deneme.py">
isminiz: <input type=text name="isim">
</form>
"""
Hata yakalma:
# -*- coding: utf-8 -*-
import cgi
import cgitb
cgitb.enable()
try:
open("olmayan_doysa", "r")
except:
cgitb.handler()
Hata yakalamak istediğmizde cgitb modülünü cgitb.enable() ile aktif ediyoruz daha sonra ise hata yakalandığında cgitb.handler() i çalıştırıyoruz.
Yerel sunucuda özel bir ayar mı yapmak gerekiyor ?
YanıtlaSilYazdığım ".py" dosyasını "localhost/ilk.py" olarak çalıştırmak istediğimde, her seferinde yeni pencere açılıyor ve "ne ile açalım" diye soruyor.
1-Öncelikle dosyalarınızı "cgi-bin" içerisine kaydedin
YanıtlaSil2-Çalıştırılabilir olduğunu kontrol edin
3-"cgi-bin" içerisine ".htaccess" adında bir dosya oluşturun ve içine şunları kaydedin:
Options +ExecCGI
AddHandler cgi-script .py
4-httpd.conf içerisinde aşağıdaki satırı bulun ve "AllowOverride None" ifadesini aşağıda olduğu gibi değiştirin.
Directory "/var/www/localhost/cgi-bin/"
#AllowOverride None
Not: Apache sunucusu kullandığınız varsayılmıştır.
Dediklerinizi yaptım ama 4. dediğinizdeki "4-httpd.conf" dosyasını bulamadım.
YanıtlaSilTam yolu nerede acaba ?
linux:
YanıtlaSil/etc/apache2/httpd.conf
win:
apache\conf\httpd.conf
Yardımınız için sağ olun.
YanıtlaSilBu arada 4. adımı yapmadan da çalışıyor :)
iyi günlerde kullanın :)
YanıtlaSillocalde çalıştığınız sürece 4. adımı yapmanıza gerek yok, sunucuda .htaccess içerisinde yaptığınız değişikliklerin işlemesi için gerekli.
kolay gelsin..
cgi-bin altında ".py" biçemleri çalışıyor ancak ".html" belgeleri çalıştırmak istediğimde şu hatayı veriyor : "Internal Server Error"
YanıtlaSilhtdocs dizini altında da ".html" çalışıyor, ".py" çalışmıyor. :)
Bu ilginç sorunu nasıl çözebilirim ?
öncelikle .htaccess dosyanızı htdocs içerisine kopyalayın, yada direk localhost'un içine atın alt klasörlerdeki tüm .py dosyaları için geçerli olur.
YanıtlaSildaha sonra dosyanızı
localhost/htdocs/deneme.py
şeklinde çağırın, çalışacaktır.
Ne yazık ki olmadı :(
YanıtlaSilsöylediğim şekilde yapınca bende çalıştı. Bir yeri eksik yada farklı yapmış olabilirsin.
YanıtlaSilTam olarak ne yaptığını sırasıyla yazarsan belki eksik yeri görebiliriz.
Bu arada ilk adımları tekrar ettin değil mi, dosyayı çalıştırılabilir yapmak vs..
Bu arada ".htaccess" dosyasını her dizine koydum...
YanıtlaSilhttp://img183.imageshack.us/img183/4517/39602435lh6.png
http://img512.imageshack.us/img512/9184/81282672jt6.png
http://img518.imageshack.us/img518/4132/33099720qq5.png
http://img388.imageshack.us/img388/94/92125052vi0.png
En başına dosyanın python’nun yüklü oldugu yeri yazarsan sorun kalkar.
YanıtlaSil#!C:/apache2triad/python/bin/python.exe (win)
#!/usr/python (linux)
uft-8 yerine de türkçe karackter için 1254 kullan…
Apache_Mod_Python ile çalışacaksan mod_python modulü aktifleştirmelisin.
windows altında çalışma yapacaksan! apache2triad 1.4.4 versiyon ve apache2triadcp panelinden mod_python aktif edilmeli ve cgi-bin klasöründe çalışma yapacaksan gerekli dizin belirtilmeli ve dosya ismi yazılmalı…
Linux altında çalışma yapacaksan http.conf haricinde mod_python.conf da da degişiklik yapıp gerekli dizin ve izinleri belirttikten sonra sorun kalkar.Gentoo için mod python ve apache belgelerine bakarsan gerekli ayarları rahatlıkla yaparsın!Birde mod_python apache sürümünle uyumlu olmalı yoksa çalışmaz.
Şayet Django ile sadece çalışacaksan mod_python a gerek yok ama Django kullanıp Apache ile internete açılacaksan mod_python ayaraları şu şekilde olmalı…
http://docs.djangoproject.com/en/dev/howto/deployment/modpython/#howto-deployment-modpython
Gerekli linkler:
http://thinkhole.org/wp/2006/04/03/django-on-windows-howto/
Yorumu Yapan : Ahmet Muratoglu October 18, 2008 10:01 am ek-1 linux için gerekli ayar dosyası
/etc/apache2/modules.d/16_mod_python.conf
site linki:
http://www.gentoo-wiki.com/Apache_Modules_mod_python
.htaccess, yukle.html, yukle.py dosyalarını htdocs içerisine al.
YanıtlaSillocalhost/yukle.html
ve
localhost/htdocs/yukle.py
ile o dosyaları çalıştırabilirsin.
Vallahi o kadar uğraştık yine değişen olmadı, neyse ki benim barındırma alanı (hosting) piton destekliyormuş; yerel sunucuya tutuklu kalmaktan kurtulduk.
YanıtlaSilYardımcı olmaya çalışan arkadaşlar, sağ olun var olun. İlerleyen günlerde yeniden başınızı ağrıtacağıma dair söz verip, bu konuya nokta koyuyorum. :)
Vallahi böyle bir kaynak bulmam süper oldu, eline sağlık hocam. Fakat ben burayı bulmadan önceden internetten edindiğim bilgilere göre windows altında Apache2TRiAD python'u desteklediğini gördüm ve Apache2TRiAD'ı kurdum. Fakat örnek kendi çapımda şöyle birşey yazdım, denemek açısından (http://pae.st/qNm1/) çalıştırdığımda IDLE'de çıktı sorunsuz geliyor. Fakat Apache2TRiAD yapısında çalıştırdığımda ise farklı türlerde hata alıyorum.
YanıtlaSilMesela #!C:\apache2triad\python\bin\python.exe
#-*- coding: utf-8 -*- ikisinden biri olduğunda veya ikisi bir olduğunda bu hatayı;
http://e1201.hizliresim.com/t/u/23szm.png
ikiside olmadığında ise,
http://e1201.hizliresim.com/t/u/23szp.png
Tarayıcım google chrome, aynı zamanda firefox 3.6.4 de yüklü onda da aynı hataları alıyorum. Sanırım bir yerde yanlış yapıyorum ama nerde :/
Teşekkürler..