2013-06-14 1 views
0

Google App Engine을 사용하여 간단한 웹 응용 프로그램을 만들려고합니다. 프론트 엔드 HTML 파일을 렌더링하는 데 jinja2를 사용합니다. 사용자는 AWS 자격 증명을 입력하고 영역의 출력을 가져 와서 가상 시스템과 연결합니다. 나는, 컨트롤러 파일이있는 나는 모델 파일을 가져 그것은 다음과 같습니다다른 모듈 내부에서 webapp.RequestHandler 클래스의 인스턴스를 호출하는 방법은 무엇입니까?

import boto.ec2 
import controller 
import sys 

if not boto.config.has_section('Boto'): 
    boto.config.add_section('Boto') 
boto.config.set('Boto', 'https_validate_certificates', 'False') 



a = controller.MainPage.get() 
b = controller.MainPage.get() 



class VM(object): 
    def __init__(self, a, b): 
     self.a = a 
     self.b = b 
     self.regions = boto.ec2.regions(aws_access_key_id = a, aws_secret_access_key = b) 

    def get_machines(self): 
     self.region_to_instance = {}#dictionary, which matches regions and instances for this region 
     for region in self.regions: 
      conn = region.connect(aws_access_key_id = self.a, aws_secret_access_key = self.b) 
      reservations = conn.get_all_instances()#get reservations(need understand them better) 
      if len(reservations) > 0:#if there are reservations in this region 
       self.instances = [i for r in reservations for i in r.instances]#creates a list of instances for that region 
       self.region_to_instance[region.name] = self.instances 
     return self.region_to_instance 

me = VM(a, b) 
me.get_machines() 
: 나는, 모델 파일이있는 내가 컨트롤러 파일을 가져 그것은 다음과 같습니다 다음
import webapp2 
import jinja2 
import os 
import model 

jinja_environment = jinja2.Environment(loader=jinja2.FileSystemLoader(os.path.dirname(__file__))) 


class MainPage(webapp2.RequestHandler): 
    def get(self):  
     template = jinja_environment.get_template('index.html') 
     self.response.out.write(template.render()) 

    def request_a(self): 
     a = self.reguest.get('a') 
     return a 

    def request_b(self): 
     b = self.reguest.get('b') 
     return b 

class Responce(webapp2.RequestHandler):  
    def get(self): 
     self.response.headers['Content-Type'] = 'text/plain' 
     self.response.write(testing_ec2.me.get_machines()) 


app = webapp2.WSGIApplication([('/2', MainPage), ('/responce', Responce)], debug=True) 

타입 객체 'MainPage'에 'request_a'속성이 없습니다. MainPage 클래스의 인스턴스를 호출하지 않고 클래스 자체를 호출하기 때문에 발생합니다. MainPage (그리고 그것의 부모는 webapp.RequestHandler) 클래스의 인스턴스는 무엇입니까? 다른 모듈 내부에서 어떻게 호출합니까?

+0

이 오타인가? "a = self.reguest.get ('a')"는 "a = self.request.get ('a')이어야합니다. –

+0

예, 죄송 합니다만, 주 질문은 그 영향을받지 않습니다. 새 오류 메시지 : 언 바운드 메서드 get()은 MainPage 인스턴스와 함께 첫 번째 인수로 호출되어야합니다. (아무 것도 얻지 못했습니다.) '내 생각을 확인합니다. – Nadia

답변

0

코드가 매우 이상해 보입니다. 나는 당신의 코딩 연습을 이해하지 못합니다.

일반적인 대답은 : MainPage의 메서드를 사용하려면 상속을 사용할 수 있습니다.

하지만. 내가 당신의 코드의 목표를 이해한다면. 응답 클래스에서 boto를 호출하는 것이 좋습니다. 하지만 여기에서는 AWS 자격 증명을 사용하여 양식을 게시하기 때문에 게시물을 사용해야하는 get을 사용합니다.

그래서 내가 제안 :

  1. 양식 포스트 방법에

  2. 을 처리하기 위해 GET 및 사후 방법과 MainPage을 만들 BOTO 요청을 사용자에게 신사로 결과를 전송 .

도 참조 GAE Python27 및 처리 양식을 시작하기

: https://developers.google.com/appengine/docs/python/gettingstartedpython27/handlingforms?hl=nl

+0

감사합니다. 나는 다른 API의 예제뿐만 아니라 여러 번 읽었다. 첫 번째 웹 애플리케이션을 만드는 것이 쉽지는 않습니다. – Nadia