2009-06-25 12 views
0

私はPythonでウェブプログラミングを学ぼうとしています。私は古いphp-flashプロジェクトをpythonに変換しています。今、私はparam値を設定し、Pythonを使用してオブジェクトを作成する方法について混乱しています。paramをpythonに変換しますか?

FYI flash.swfと通信するために、単一のphpファイルindex.phpを使用しました。だから、login.php、logout.php、mail.php、xml.phpなどの私の他のphpファイルはこれから呼び出されていました。

以下いずれかのオタクは、私のpythonにこれを変換することができる方法の例で私を助けることができる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> 

からフラッシュオブジェクトの呼び出しがありますか?または、どのようにしてそれを行うことができるかについての参考資料ですか?

乾杯:)

+0

どのような種類のPython Webライブラリ/サービスを使用していますか? – van

+0

私はweb2pyを試しています – Morison

答えて

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に登録(ジャンゴでは、と呼ばれる特殊なファイルがあり、 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のWebプログラミングは何とか痛みがあり、かつURIの解析から、最初から出力フォーマットへすべてをやっ必要です。しかし、多くの良い図書館やフレームワークがあり、仕事を苦痛を伴うだけでなく時には楽しいものにしています:)もっと学び、あなたがそれを後悔しないと信じています。

+0

あなたの提案に感謝します。私はweb2pyを試していますが、それは私にはほとんど役に立たないようです。 – Morison

+0

申し訳ありませんが、web2pyでドキュメントを検索しようとしましたが、失敗しました。 routes.pyにはいくつかのパターンマッチング(?P ...)がありますが、これは関連性が高いと思われますが、データがどのようにコントローラに渡されるのか理解できませんでした。 – drdaeman

+0

"その有名なModel-View-Controllerパターンから" - あなたはModel-Template-Viewですか? –

0

PHP自体がgeneratin HTML用のテンプレート言語として使用することができますが、Pythonで使用可能なseveral templating enginesのいずれかを使用する必要があります。あなたが望むなら、string.Templateクラスを使って単純なテンプレートを行うことができますが、それはあなたがやりたいことではありません。

あなたの最初のステップは、あなたが使用しようとしている、そして、それが提供するテンプレート化使用するWebフレームワークを決定することであるべき例えばジャンゴ

しかし、あなただけのプレーンCGIのPythonスクリプトをしたい場合、あなたはあなたのHTMLを記述する必要がありますstdoutに。 単純な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モジュールを使用できます。

import cgi 
form = cgi.FieldStorage() 
+0

まあ、しかし、私はどのように/フラッシュからのパラメータを渡すでしょうか?私のコードで見たように、私は$ _SERVER ["REQUEST_URI"]、strrpos($ _ SERVER ["SCRIPT_NAME"])を使った。今、私はmail.py、login.py、logout.pyを持っていると仮定すると - – Morison

+0

web2pyでエクスペリエンスを持っていませんが、HTMLなどのテンプレートをレンダリングするビュー/関数が必要です。リクエストオブジェクトから、URIなどのすべての変数を取得してテンプレートに渡すことができます。なぜ私はあなたが単一のスクリプトを持つことができますこのようなフレームワークでスクリプト名が必要なのかわかりません –

+0

いいえ、私はスクリプトの名前は必要ありません。それらは単なる例です...私は関数/メソッド呼び出しを意味しました。 – Morison

0

web.pyのようなシンプルなWebフレームワークを使用することもできます。単純なテンプレートシステムと、データベース関連の機能のための簡単なORMがあります。基本的なチュートリアルはhereで利用できます。このチュートリアルでは、自分のものなど、簡単なWebページを手に入れるのに役立ちます。

0

まず、{{BEAUTIFY(response.env)}}を含むweb2pyビューを作成すると、web2pyで定義されているすべての環境システム変数を見ることができます。

urlのweb2py変数へのデフォルトマッピングを確認するには、スライド24(www.web2py.com)を参照してください。

問題を解決するには、フラッシュコード内のパスを変更する方が簡単ですが、そのようにしたくないと思われます。あなたの代わりにあなたのURLはすべて

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

と思われ、web2pyアプリケーションは「app」と呼ばれます。ここで

は、あなたが何をすべきかです:

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を作成をマップが含まれているメインweb2pyのフォルダにroutes.pyを作成します。
def index(): return dict() 

ファイル "flash.swf"を "app/static"フォルダに置きます。

<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」であるかどうかについて確認していないが含まれているビューのデフォルト/ index.htmlを作成します。試してみる。

パスを変更することでずっと簡単な方法があるので、この議論をweb2pyメーリングリストに移すことをお勧めします。

+0

ありがとうございました。私は前にあなたの答えを見ていませんでした。しかし、私は昨日URL構築技術を学びました。 – Morison

関連する問題