クラスメソッドをFlaskで実行するのに問題があります。
でmodels/User.py
:
from mongoengine import *
class User(Document):
first_name = StringField()
last_name = StringField()
...
def __init__(self, arg1, arg2, ...):
self.first_name = arg1
self.last_name = arg2
...
@classmethod
def create(self, arg1, arg2, ...):
#do some things like salting and hashing passwords...
user = self(arg1, arg2, ...)
user.save()
return user
メインアプリケーションのPythonファイル:
from models import User
...
def func():
...
#Throws "AttributeError: type object 'User' has no attribute 'create'"
user = User.create(arg1, arg2, ...)
Userオブジェクトをインスタンス化せずにUserクラスでcreateを呼び出すことはできませんか?Python 2.7.2を使用しており、デコレータ以外の構文を使用してみましcreate = classmethod(create)
たが、機能しませんでした。前もって感謝します!
編集:1つの問題を見つけました:modelsフォルダーに__init__.py
ファイルが含まれていなかったため、モジュールではなかったため、from models import User
実際に必要なファイルをインポートしていませんでした。以前はアプリケーションのPythonスクリプトと同じディレクトリにモジュールがあったため、エラーは発生しませんでしたが、削除した後、対応するファイルmodels.py
を削除することはありませんでした。.pyc
これで、以前のエラーではなくエラーが発生しますAttributeError: 'module' object has no attribute 'create'
が、正しいファイルがインポートされていると確信しています。
EDIT2:解決しました。次に、インポートをに変更しましたfrom models.User import User
。これでメソッドがヒットします。