2009-06-25 93 views
0

我想在python中學習web編程。我正在將我的舊php-flash項目轉換爲python。現在,我對如何設置參數值和使用python創建對象感到困惑。將參數轉換爲python?

FYI我使用單個PHP文件,index.php來與flash.swf通信。所以,我的其他php文件像login.php,logout.php,mail.php,xml.php等曾經被調用。

下面是index.php-

<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> 

flash對象調用任何怪胎能幫助我的例子我怎麼能轉換成蟒蛇呢?或者,有關如何完成的任何參考?

乾杯:)

+0

你正在使用什麼樣的python網絡庫/服務? – van 2009-06-25 06:31:21

+0

我正在嘗試web2py – Morison 2009-06-25 06:36:18

回答

3

Python是一種通用語言,並不完全是爲了網絡。存在一些可嵌入PHP的解決方案,但在大多數Python Web框架中,您分別編寫Python和HTML(模板)代碼。

例如在Django web framework你先寫一個view(視圖 - 你知道 - 從著名Model-View-Controller模式)功能:

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

而且隨着URL dispatcher註冊它(在Django,有一個特殊的文件,名爲urls.py):

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

然後,my_view.htmltemplate

... 
<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> 
... 

雖然這可能看起來像很多工作,爲這麼小的任務,當你寫的東西比簡單的值替代腳本越大,框架自付回來。例如,您可能實際上使用少於100行的代碼編寫了一個簡單的博客應用程序。該框架將自動處理URL解析(Apache的mod_rewrite for PHP),複雜的模板,數據庫訪問,表單生成,處理和驗證,用戶身份驗證,調試等等。

有很多不同的框架,各有其自己的好和壞的方面。我建議花點時間閱讀介紹並選擇一個你喜歡的。就我個人而言,我喜歡Django,並且在web.py上取得了成功。我也聽說過關於PylonsTurboGears的好消息。

如果你需要一些非常簡單的東西(比如你的例子),你幾乎不需要任何東西,你可以編寫小的WSGI應用程序,然後可以使用它,例如,可以使用Apache的mod_python或mod_wsgi。這將是這樣的:

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}] 

概括起來:無需額外的支持庫,Python的網絡編程是有點痛苦的,需要從URI解析輸出從頭格式化做一切。然而,有許多優秀的圖書館和框架,使工作不僅無痛,而且有時甚至令人愉快:)更多地瞭解它們,我相信你不會後悔的。

0

PHP本身可以作爲generatin HTML模板語言,但在Python中,你將需要使用可用的several templating engines之一。如果你想要,你可以使用string.Template類來做簡單的模板,但這不是你想要做的。

你的第一步應該是對web框架決定你要使用,並使用模板化提供,如Django的

但是如果你想只是一個平面CGI Python腳本,你需要編寫你的HTML標準輸出。 ,因此請創建一個簡單的html並用您的參數替換模板值。

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) 

與cgi一起使用可以使用cgi模塊例如

import cgi 
form = cgi.FieldStorage() 
+0

好吧,但我不明白我將如何將參數傳入/傳出Flash?就像在我的代碼中看到的一樣,我使用$ _SERVER [「REQUEST_URI」],strrpos($ _ SERVER [「SCRIPT_NAME」] ..現在,假設我有mail.py,login.py,logout.py - 如何做? – Morison 2009-06-25 06:41:46

+0

我不'具有web2py exp,但它必須有一些視圖/函數,您將呈現html模板,從請求對象你可以得到所有的變量,如URI等,並傳遞給模板。我不知道爲什麼你需要腳本名稱,在這樣的框架中,你可以有單個腳本 – 2009-06-25 06:53:08

0

您也可以嘗試使用簡單的web框架,如web.py,它具有簡單的模板系統以及用於數據庫相關功能的簡單ORM。一個基本的教程是可用here這足以幫助您獲得一個簡單的網頁,如你的,啓動和運行。

0

首先製作一個包含{{= BEAUTIFY(response.env)}}的web2py視圖,您將能夠看到web2py中定義的所有環境系統變量。

查看幻燈片24(www.web2py.com)以查看默認的url映射到web2py變量。

要解決您的問題,更簡單的方法是更改​​Flash代碼中的路徑,但我會假設您不想這樣做。我會假設,而不是你的網站看起來像

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

和您的web2py應用程序被稱爲「應用程序」。

這裏是你做什麼:

中包含的主要web2py的文件夾中創建routes.py

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>'),) 

這個映射

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 

創建包含

控制器default.py
def index(): return dict() 

將文件「flash.swf」放入「app/static」文件夾中。

創建一個視圖默認/ index.html中包含

<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> 

我不知道它是否是「+5」或「+4」上面。試一試。

我建議將此討論轉移到web2py郵件列表上,因爲通過更改路徑有一種更簡單的方法。