0

私が達成しようとしているのは、webapp2.cachedプロパティからユーザーオブジェクトを取得することです。現在のユーザーを取得するメソッドがリクエストハンドラーに定義されています。

@webapp2.cached_property
  def current_user(self):
  user_dict = self.auth.get_user_by_session()
  return self.auth.store.user_model.get_by_id(user_dict['user_id'])

次のようなモデルの1つのUserProperty()であるため、ユーザーオブジェクトを取得したいと思います。

class CountryImage(db.Model):
  image = db.BlobProperty()
  user = db.UserProperty()
  country = db.ReferenceProperty(Country)
  approved = db.BooleanProperty(default=False)

これで、アップロードフォームが投稿されると、データストアに「なし」と表示される「ユーザー」を除いて、すべてが正常に機能します。

インタラクティブコンソールで遊んでいるときに見つけた考えられる理由は、メソッドcurrent_userが実際のユーザーオブジェクトではなく、Webキャッシュされたプロパティを渡すことでした。

例えば:

< webapp2.cached_property object at 0xb46aee8c > 

今私の質問は、ユーザーオブジェクトを取得するための最良の方法は何でしょうか?よろしくお願いします。

エイミス

PS:編集:

以下は、画像をデータストアに保存しようとしているコードです。

NewImg = models.CountryImage()
NewImg.image = self.request.get('image')
NewImg.user = self.current_user
NewImg.country = models.Country.all().filter("url_name =", country).get()
continue_url = self.request.url
NewImg.put()

PS:

追加するだけで、「users.get_current_user()」メソッドを使用してみましたが、これも「None」を返します。

4

3 に答える 3

2

あなたの応答をありがとう、しかし、私はすでにこれを解決しました。Userモデル from webapp2_extras(これは User モデル from の拡張です) を使用している場合appengine.api.users、次のようにユーザーを取得できます。

from google.appengine.api import users
from webapp2_extras.appengine.auth.models import User

user = users.User(User.get_by_auth_id(self.current_user.auth_ids[0]).name)

また

user = users.User(User.get_by_auth_id(self.current_user.auth_ids[0]).email)
于 2012-06-06T18:40:03.887 に答える
1

気になるのですが、国の画像はユーザーによってアップロードされたものですか? それともリソースとして管理していますか?

そうでない場合は、ユーザー モデルで StringProperty を使用し、静的な画像アセットへの文字列パスを参照して、余分なデータベース ルックアップを保存することをお勧めします。

于 2012-05-19T05:26:33.447 に答える
0

users.get_current_user() を使用する必要がありますが、それにはユーザーが最初にログインする必要があります。匿名ユーザーをサポートしようとしていますか?

于 2012-05-19T03:23:12.603 に答える