Python içine param dönüştürme?

4 Cevap php

Python web programlama öğrenmeye çalışıyorum. Python içine benim eski php flash projesini dönüştürme duyuyorum. Şimdi, ben param değerini ayarlayın ve Python kullanarak nesne oluşturmak için nasıl hakkında karıştı.

Bilginize index.php flash.swf ile iletişim kurmak için tek bir php dosyası kullanılır. Yani, benim diğer php dosyaları login.php gibi, logout.php, mail.php 'yi, xml.php vb bu çağrılabilir için kullanılır.

Aşağıda index.php-flash nesne çağrı

<object classid="clsid:XXXXXXXXX-YYYY-ZZZZ-AAAA-BBBBBBBBBB" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="100%" height="100%" id="main" align="middle">
<param name="allowScriptAccess" value="all" />
<param name="flashvars" value= />
<param name="movie" value="flash.swf?<?=substr($_SERVER["REQUEST_URI"],strrpos($_SERVER["SCRIPT_NAME"],"/")+1);?>" />

<param name="loop" value="false" />
<param name="quality" value="high" />
<param name="bgcolor" value="#eeeeee" />
<embed src="flash.swf?<?=substr($_SERVER["REQUEST_URI"],strrpos($_SERVER["SCRIPT_NAME"],"/")+1);?>" loop="false" quality="high" bgcolor="#eeeeee" width="100%" height="100%" name="main" align="middle" allowScriptAccess="all" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>

Herhangi bir inek Python içine bu dönüştürmek nasıl örnekler ile bana yardımcı olabilir misiniz? Ya da, bu nasıl yapılabilir herhangi bir referans?

Cheers :)

4 Cevap

Python tam olarak web için yapılmış bir genel amaçlı dilidir. Orada bazı gömülebilir PHP gibi çözümler var, ama çoğu Python web çerçeveler içinde, ayrı ayrı Python ve HTML (şablon) kodu yazmak.

: Fonksiyonu Örneğin Django web framework Önce bir view - (- bildiğiniz meşhur Model-View-Controller desen view from) yazmak

def my_view(request, movie):
    return render_to_template('my_view.html',
                              {'movie': settings.MEDIA_URL + 'flash.swf?' + movie})

Ve URL dispatcher ile kayıt (Django, özel bir dosya var, urls.py):

...
url(r'/flash/(?P<movie>.+)$', 'myapp.views.my_view'),
...

Daha sonra a my_view.html template,

...
<object classid="clsid:XXXXXXXXX-YYYY-ZZZZ-AAAA-BBBBBBBBBB" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="100%" height="100%" id="main" align="middle">
<param name="allowScriptAccess" value="all" />
<param name="flashvars" value= />
<param name="movie" value="{{ movie }}" />
<param name="loop" value="false" />
<param name="quality" value="high" />
<param name="bgcolor" value="#eeeeee" />
<embed src="{{ movie }}" loop="false" quality="high" bgcolor="#eeeeee" width="100%" height="100%" name="main" align="middle" allowScriptAccess="all" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
...

Basit değer yerine komut daha büyük bir şey yazmak zorunda olduğunda bu, böyle küçük bir görev için bir sürü iş gibi görünse de, çerçeve geri öder. Örneğin, aslında kod az 100 hatlarında basit bir blog uygulaması yazabilirsiniz. Çerçevesi otomatik (nasılsa PHP için Apache mod_rewrite gibi) ayrıştırma URL ilgilenir, karmaşık çiftleşmiş, veritabanı erişimi, form üretim, işleme ve doğrulama, kullanıcı kimlik doğrulama, hata ayıklama vb.

Farklı çerçeveler bir yeri vardır, her biri kendi iyi ve kötü yanları olan. Ben biraz zaman tanıtımları okuma ve sizin gibi birini seçerek harcama önerilir. Şahsen, Django gibi, ve web.py ile başarılı oldu. Ben de Pylons ve TurboGears hakkında iyi şeyler duydum.

Eğer neredeyse bir şey gerekmez (sizin örnekte olduğu gibi) gerçekten basit bir şey, gerekiyorsa, sadece Apache mod_python veya mod_wsgi, örneğin daha sonra kullanılabilecek küçük WSGI uygulaması, yazabilir . Bu gibi bir şey olacaktır:

def return_movie_html(environ, start_response):
    request_uri = environ.get('REQUEST_URI')
    movie_uri = request_uri[request_uri.rfind('/')+1:]
    start_response('200 OK', [('Content-Type', 'text/html')])
    return ['''
            <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
                                  "http://www.w3.org/TR/html4/strict.dtd">
            <html>
            ...
            <object ...>
            <param name="allowScriptAccess" value="all" />
            <param name="flashvars" value= />
            <param name="movie" value="%(movie)s" />
            <param name="loop" value="false" />
            <param name="quality" value="high" />
            <param name="bgcolor" value="#eeeeee" />
            <embed src="%(movie)s" loop="false" ... />
            </object>
            ...
            </html>
            ''' % {'movie': movie_uri}]

O Özetle: ek destek kütüphaneler olmadan, Python web programlama şekilde acı ve sıfırdan biçimlendirme çıktı ayrıştırma URI everything yapıyor gerektirir. Ancak, işi sadece ağrısız yapmak için iyi kütüphaneler ve çerçeveler bir yeri vardır, ancak bazen hoş :) daha onlar hakkında bilgi edinin, ve ben pişman olmayacağına inanıyorum.

php kendisi generatin html çiftleşmiş dili olarak kullanılabilir, ancak Python size several templating engines mevcut birini kullanmanız gerekecektir. İsterseniz string.Template sınıfını kullanarak basit çiftleşmiş yapabilirsiniz ama bu yapmak istediğiniz ne değildir.

İlk adım, kullanmak için gidiyoruz web çerçeve karar olacak ve bu, örneğin django sağlar çiftleşmiş kullanmalısınız

But if you want just a plane cgi python script, you will need to write your html to stdout. so create a simple html and replace template values with your parameters e.g.

from string import Template 

htmlTemplate = Template(""" 
<html>
<title>$title</title>
</html> 
""")

myvalues = {'title':'wow it works!'}
print "Content-type: text/html"
print
print htmlTemplate.substitute(myvalues)

Eğer kullanabileceğiniz CGI ile çalışmaya cgi modülü örneğin

import cgi
form = cgi.FieldStorage()

Ayrıca veritabanı ile ilgili işlevleri için basit bir ORM ile birlikte basit bir şablon sistemi vardır web.py gibi basit bir web çerçevesini kullanarak deneyebilirsiniz. Temel öğretici sizinki gibi basit bir web sayfası, yukarı ve çalışan almak için yeterli olduğunu here hangi mevcuttur.

Her şeyden önce, sadece {{= güzelleştirmek (response.env)}} Sen web2py tanımlanan tüm çevre sistemleri değişkenleri görmek mümkün olacak içeren bir web2py görünümü yapmak.

Web2py değişkenlerin içine url'lerin varsayılan eşleme görmek için slayt 24 (www.web2py.com) içine bak.

Sorunu çözmek için, kolay bir yol flaş kodu yollarını değiştirmek olacaktır, ama ben bunu yapmak istemiyorum üstlenecek. Senin yerine adresler gibi tüm bakmak üstlenecek

http://127.0.0.1:8000/[..script..].php[..anything..]

ve web2py app "app" denir.

İşte yapmanız budur:

Içeren ana web2py klasöründe routes.py oluşturun

routes_in=(('/(?P<script>\w+)\.php(?P<anything>.*)',
            '/app/default/\g<script>\g<anything>'),
          (('/flash.swf','/app/static/slash.swf'))
routes_out(('/app/default/(?P<script>\w+)\.php(?P<anything>.*)',
            '/\g<script>\.php\g<anything>'),)

Bu haritalar

http://127.0.0.1:8000/index.php into http://127.0.0.1:8000/app/default/index
http://127.0.0.1:8000/index.php/junk into http://127.0.0.1:8000/app/default/index/junk
http://127.0.0.1:8000/flash.swf into http://127.0.0.1:8000/app/static/flash.swf

içeren bir kontrol default.py oluşturmak

def index(): return dict()

"App / statik" klasöründeki dosya "flash.swf" koydu.

Içeren bir görünüm default / index.html oluşturmak

<object classid="clsid:XXXXXXXXX-YYYY-ZZZZ-AAAA-BBBBBBBBBB" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="100%" height="100%" id="main" align="middle">
<param name="allowScriptAccess" value="all" />
<param name="flashvars" value= />
<param name="movie" value="flash.swf?{{=request.env.web2py_original_uri[len(request.function)+5:]}}" />

<param name="loop" value="false" />
<param name="quality" value="high" />
<param name="bgcolor" value="#eeeeee" />
<embed src="flash.swf?{{=request.env.web2py_original_uri[len(request.function)+5:]}}" />
" loop="false" quality="high" bgcolor="#eeeeee" width="100%" height="100%" name="main" align="middle" allowScriptAccess="all" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>

Ben yukarıdaki "+5" veya "4" olup olmadığı konusunda emin değilim. Bir deneyin.

Yolları değiştirerek çok daha basit bir yol olduğundan ben web2py posta listesinde bu tartışmayı hareket öneririz.