Конвертировать param в python? - PullRequest
0 голосов
/ 25 июня 2009

Я пытаюсь научиться веб-программированию на python. Я конвертирую свой старый проект php-flash в python. Теперь я запутался в том, как установить значение параметра и создать объект, используя python.

FYI Я использовал один файл php index.php для связи с flash.swf. Итак, другие мои php-файлы, такие как login.php, logout.php, mail.php, xml.php и т. Д., Вызывались из этого.

Ниже приведен вызов объекта flash из 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>

Может ли какой-нибудь выродок помочь мне с примерами, как я могу преобразовать это в python? Или какая-нибудь ссылка на то, как это можно сделать?

Приветствия:)

Ответы [ 4 ]

3 голосов
/ 25 июня 2009

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 (как в mod_rewrite для PHP от Apache), сложных шаблонах, доступе к базе данных, генерации форм, обработке и проверке, аутентификации пользователей, отладке и т. Д.

Существует множество различных фреймворков, каждый из которых имеет свои плюсы и минусы. Я рекомендую потратить некоторое время на чтение вступлений и выбор того, который вам нравится. Лично мне нравится 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 является болезненным и требует выполнения всего от синтаксического анализа URI до форматирования вывода с нуля. Однако, есть много хороших библиотек и фреймворков, которые делают работу не только безболезненной, но иногда даже приятной :) Узнайте о них больше, и я думаю, вы не пожалеете об этом.

0 голосов
/ 25 июня 2009

Прежде всего просто создайте представление web2py, которое содержит {{= BEAUTIFY (response.env)}}, и вы сможете увидеть все системные переменные среды, определенные в web2py.

Посмотрите на слайд 24 (www.web2py.com), чтобы увидеть отображение URL по умолчанию в переменные web2py.

Чтобы решить вашу проблему, проще было бы изменить пути во флэш-коде, но я предполагаю, что вы не хотите этого делать. Я буду считать, что вместо этого все ваши URL выглядят как

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

и ваше приложение web2py называется "приложением".

Вот что вы делаете:

Создает route.py в главной папке web2py, которая содержит

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 голосов
/ 25 июня 2009

Вы также можете попробовать использовать простой веб-фреймворк, такой как web.py, который имеет простую систему шаблонов вместе с простым ORM для функций, связанных с базой данных. Базовое учебное пособие доступно здесь , что достаточно, чтобы помочь вам получить простую веб-страницу, такую ​​как ваша, в рабочем состоянии.

0 голосов
/ 25 июня 2009

php сам по себе может использоваться в качестве языка шаблонов для генерирования html, но в python вам потребуется использовать один из нескольких доступных шаблонизаторов Если вы хотите, вы можете сделать простой шаблон с использованием класса string.Template, но это не то, что вы хотели бы сделать.

Ваш первый шаг должен состоять в том, чтобы выбрать веб-фреймворк, который вы собираетесь использовать, и использовать предоставляемые им шаблоны, например 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...