如何将param转换为Python?

0 投票
4 回答
524 浏览
提问于 2025-04-15 12:29

我正在学习用Python进行网页编程,想把我以前的php-flash项目转换成Python。现在,我对如何在Python中设置参数值和创建对象感到困惑。

顺便说一下,我用一个单独的php文件,index.php,来和flash.swf进行通信。所以,我的其他php文件,比如login.php、logout.php、mail.php、xml.php等等,都是通过这个文件来调用的。

下面是从index.php调用flash对象的代码-

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

有没有哪位高手能给我一些例子,教我怎么把这个转换成Python?或者,有没有相关的参考资料可以看看?

谢谢大家 :)

4 个回答

0

首先,创建一个web2py的视图,里面包含{{=BEAUTIFY(response.env)}},这样你就能看到web2py中定义的所有环境系统变量。

你可以查看第24页的幻灯片(www.web2py.com),了解默认的URL是如何映射到web2py变量的。

要解决你的问题,最简单的方法是修改flash代码中的路径,但我假设你不想这样做。我会假设你的URL看起来都是这样的:

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

而你的web2py应用叫做“app”。

接下来,你需要做的是:

在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”文件夹里。

创建一个视图default/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的邮件列表上,因为通过改变路径有更简单的方法。

0

你也可以试试使用像 web.py 这样的简单网页框架,它有一个简单的模板系统,还提供了一个简单的 ORM(对象关系映射)来处理数据库相关的功能。这里有一个基础教程 可以查看,足够帮助你搭建一个简单的网页,比如你想要的那种。

3

Python是一种通用编程语言,并不是专门为网页开发设计的。虽然有一些可以嵌入的类似PHP的解决方案,但在大多数Python网页框架中,你需要把Python代码和HTML(模板)代码分开写。

比如在Django框架中,你首先要写一个视图(视图——你知道的,就是那个著名的模型-视图-控制器模式中的视图)函数:

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

然后把它注册到URL调度器中(在Django中,有一个特别的文件,叫做urls.py):

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

接着你需要写一个my_view.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="{{ 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解析(有点像PHP的Apache的mod_rewrite)、复杂的模板、数据库访问、表单生成、处理和验证、用户认证、调试等等。

有很多不同的框架,每个框架都有自己的优缺点。我建议你花点时间阅读一些介绍,选择一个你喜欢的。个人来说,我喜欢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解析到输出格式化。然而,有很多好的库和框架,可以让工作不仅不痛苦,有时甚至很愉快 :) 多了解它们,我相信你不会后悔的。

撰写回答