2009-06-25 8 views
0

저는 파이썬으로 웹 프로그래밍을 배우려고합니다. 나는 나의 오래된 PHP 플래시 프로젝트를 파이썬으로 변환하고있다. 이제 param 값을 설정하고 python을 사용하여 객체를 만드는 방법에 대해 혼란스러워합니다.param을 python으로 변환 하시겠습니까?

FYI 나는 flash.swf와 통신하기 위해 하나의 PHP 파일 인 index.php를 사용했습니다. 그래서, login.php, logout.php, mail.php, xml.php 등의 다른 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> 

에서 플래시 객체 호출은 무엇입니까? 또는 어떻게 수행 할 수 있는지에 대한 참고 자료가 있습니까?

건배 :)

+0

어떤 종류의 파이썬 웹 라이브러리/서비스를 사용하고 있습니까? – van

+0

나는 web2py를 시도하고있다 – Morison

답변

3

파이썬은 범용 언어이며 정확하게 웹 용으로 만들어지지 않았습니다. PHP와 비슷한 임베디드 솔루션이 있지만 대부분의 Python 웹 프레임 워크에서는 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 :

,617,
... 
<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}] 

그것을 요약하면 : :이 같은 것입니다 추가 지원 라이브러리없이, 파이썬 웹 프로그래밍은 어떻게 든 고통, 처음부터 포맷 출력에 URI 구문 분석에서 모든을 수행해야합니다. 그러나 좋은 라이브러리와 프레임 워크가 많아서 고통스럽지 않고 때로는 즐겁습니다 :) 더 자세히 알아보고 후회하지 않을 것이라고 믿습니다.

+0

제안 해 주셔서 감사합니다. 나는 web2py에서 노력하고 있는데 그것은 나에게 쉬운 일이 아닌 것처럼 보였다. – Morison

+0

죄송합니다. web2py에서 설명서 검색을 시도했지만 실패했습니다. routes.py에는 어떤 패턴 매칭 (? P ...)이있는 것으로 보입니다. 그러나 데이터가 컨트롤러로 전달되는 방식을 이해하지 못했습니다. – drdaeman

+0

"유명한 모델 - 뷰 - 컨트롤러 패턴"- 당신은 모델 - 템플릿 - 뷰를 의미합니까? –

0

PHP 자체가 generatin HTML을위한 템플릿 언어로 사용할 수 있지만 파이썬에서 당신이 사용할 수있는 several templating engines 중 하나를 사용해야합니다. 원하는 경우 string.Template 클래스를 사용하여 간단한 템플릿을 만들 수 있지만 원하는 것은 아닙니다.

첫 번째 단계는 당신이 사용하고자하는, 그리고이 제공하는 주형 사용하는 웹 프레임 워크를 결정해야한다 예를 들어, 장고

하지만 그냥 비행기 CGI 파이썬 스크립트를 원하는 경우, 당신은 당신의 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() 
+0

글쎄,하지만 플래시에서 매개 변수를 전달하는 방법을 모르겠다. 내 코드에서 볼 수 있듯이 $ _SERVER [ "REQUEST_URI"], strrpos ($ _ SERVER [ "SCRIPT_NAME"])를 사용했습니다. 이제 mail.py, login.py, logout.py가 있다고 가정하면 - – Morison

+0

web2py를 사용하면 표현식을 사용할 수 없지만 HTML/HTML 등의 모든 변수를 가져 와서 템플릿에 전달할 수있는 요청 객체에서 HTML 템플릿을 렌더링하는 뷰/함수가 있어야합니다.내가 왜 당신이 단일 스크립트를 가질 수있는 프레임 워크에서 스크립트 이름이 필요한지 모르겠다. –

+0

아니요, 스크립트 이름이 필요하지 않습니다. 그것들은 예를 들어 ... 함수/메소드 호출을 의미했습니다. – Morison

0

간단한 템플리트 시스템과 데이터베이스 관련 기능에 대한 간단한 ORM이있는 web.py와 같은 간단한 웹 프레임 워크를 사용해 볼 수도 있습니다. 기본 자습서는 here으로 제공되며, 자습서, 실행 및 실행과 같은 간단한 웹 페이지를 작성하는 데 도움이됩니다.

0

우선 {{BEAUTIFY (response.env)}}가 포함 된 web2py보기를 작성하면 web2py에 정의 된 모든 환경 시스템 변수를 볼 수 있습니다.

url의 기본 매핑을 web2py 변수로 보려면 슬라이드 24 (www.web2py.com)를 참조하십시오.

문제를 해결하려면 플래시 코드의 경로를 변경하는 것이 더 쉬운 방법 일 수 있지만 그럴 필요가 없다고 가정합니다. 대신 귀하의 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"폴더에 넣습니다.

나는 그것을 "+5"또는 "4"이상 여부에 확실하지 않다

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

을 포함하는 뷰 기본/index.html을 만듭니다. 시도 해봐.

경로를 변경하여 훨씬 간단한 방법이 있으므로이 토론을 web2py 메일 링리스트로 이동하는 것이 좋습니다.

+0

고마워요. 전에 대답을 보지 못했습니다. 그러나 어제 URL 구축 기술을 배웠습니다. – Morison

관련 문제