我正在尝试在python中学习Web编程。我正在将我的旧php-flash项目转换为python。现在,我对如何使用python设置param值和创建对象感到困惑。
仅供参考我使用单个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吗?或者,有关如何完成的任何参考?
干杯:)
答案 0 :(得分:3)
Python是一种通用语言,并非完全针对Web。存在一些可嵌入的类似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.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>
...
虽然这对于如此微不足道的任务似乎有很多工作,但当你必须编写比简单的值替换脚本更大的东西时,框架会回报。例如,您实际上可以在不到100行代码中编写一个简单的博客应用程序。该框架将自动处理URL解析(以某种方式像Apache的PHP的mod_rewrite),复杂的模板,数据库访问,表单生成,处理和验证,用户身份验证,调试等。
有很多不同的框架,每个框架都有自己的优点和缺点。我建议花一些时间阅读介绍并选择你喜欢的。就个人而言,我喜欢Django,并且在web.py取得了成功。我也听说过关于Pylons和TurboGears的好消息。
如果你需要一些非常简单的东西(比如在你的例子中),你几乎不需要任何东西,你可以编写小的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解析中执行所有从头开始输出格式。然而,有很多好的图书馆和框架,让工作不仅无痛,有时甚至是愉快:)了解更多,我相信你不会后悔。
答案 1 :(得分:0)
php本身可以用作genratin html的模板语言,但是在python中你需要使用several templating engines中的一个。如果你想要你可以使用string.Template类进行简单的模板化,但这不是你想要做的。
您的第一步应该是决定您将要使用的Web框架,并使用它提供的模板,例如django
但是如果你只想要一个平面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你可以使用cgi模块,例如
import cgi
form = cgi.FieldStorage()
答案 2 :(得分:0)
您还可以尝试使用简单的Web框架,例如web.py,它具有简单的模板系统以及用于数据库相关功能的简单ORM。我们提供了一个基本教程here,它足以帮助您获得一个简单的网页,例如您的网页,并启动并运行。
答案 3 :(得分:0)
首先只需创建一个包含{{= BEAUTIFY(response.env)}}的web2py视图,您将能够看到web2py中定义的所有环境系统变量。
查看幻灯片24(www.web2py.com),查看url到web2py变量的默认映射。
要解决您的问题,更简单的方法是更改闪存代码中的路径,但我会假设您不想这样做。我会假设您的网址看起来像
http://127.0.0.1:8000/[..script..].php[..anything..]
并且您的web2py应用程序名为“app”。
以下是您的工作:
在包含
的主web2py文件夹中创建routes.pyroutes_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邮件列表上移动此讨论,因为通过更改路径有一种更简单的方法。