アプリエンジンWebApp.RequestHandler Child Instancesにはself.requestがありません__init__

StackOverflow https://stackoverflow.com/questions/2960641

  •  23-10-2019
  •  | 
  •  

質問

私はアプリでリクエストを処理するために変更されたwebapp.requesthandlerを使用します。

class MyRequestHandler(webapp.RequestHandler):
    """
    Request handler with some facilities like user.
    self.out is the dictionary to pass to templates 
    """
    def __init__(self, *args, **kwargs):
        super(MyRequestHandler, self).__init__(*args, **kwargs)
        self.out = {
            'user': users.get_current_user(),
            'logout_url': users.create_logout_url(self.request.uri)
            }

    def render(self, template_name):
        """
        Shortcut to render templates
        """
        self.response.out.write(template.render(template_name, self.out))


class DeviceList(MyRequestHandler):
    def get(self):
        self.out['devices'] = GPSDevice.all().fetch(1000)
        self.render('templates/device_list.html')

しかし、私は例外を取得します:

line 28, in __init__
    self.out['logout_url'] = users.create_logout_url(self.request.uri)
AttributeError: 'DeviceList' object has no attribute 'request'

例外を引き起こすコードが移動されたとき __init__ すべて順調:

class MyRequestHandler(webapp.RequestHandler):
    """
    Request handler with some facilities like user.
    self.out is the dictionary to pass to templates and initially it contains user object for example
    """
    def __init__(self, *args, **kwargs):
        super(MyRequestHandler, self).__init__(*args, **kwargs)
        self.out = { 'user': users.get_current_user(), }

    def render(self, template_name):
        """
        Shortcut to render templates
        """
        self.out['logout_url'] = users.create_logout_url(self.request.uri)
        self.response.out.write(template.render(template_name, self.out))

それは誰ですか?なぜないのか self.request 親の後(すなわちwebapp.requesthandler's) __init__ 実行されましたか?

役に立ちましたか?

解決

http://code.google.com/appengine/docs/python/tools/webapp/requesthandlerclass.html#requesthandler_initialize

初期化(リクエスト、応答)リクエストと応答オブジェクトでハンドラーインスタンスを初期化します。通常、WSGIAPPLICATIONは、ハンドラークラスをインスタンス化した後にこれを行います。

リクエストオブジェクトがすでに入力されていると予想している場合、initの代わりに初期化をオーバーライドしたいようです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top