[英]flask-classy and peewee, metaclass conflict error
我正在嘗試讓我的用戶類與BaseModel和FlaskView一起使用。 這會導致元類沖突錯誤,而我無法解決。
我嘗試解決此問題的方法:
由於noconflict導入類創建者的影響,這沒用 。 這個例子是從2003年6月開始的。也許它太舊了? 我正在python 2.7.3上運行。
http://code.activestate.com/recipes/204197-solving-the-metaclass-conflict/
也嘗試過此解決方案,請參見下面的代碼塊。 我收到此錯誤:AttributeError:類型對象'BaseModel'沒有屬性' metaclass '
雙重繼承導致元類沖突
from base_model import BaseModel
from flask.ext.classy import FlaskView
class CombinedMeta(BaseModel.__metaclass__, FlaskView.__metaclass__):
pass
from peewee import *
#sqlite is used for easy testing.
mysql_db = SqliteDatabase('test.db')
class BaseModel(Model):
class Meta:
database = mysql_db
from combined_meta import CombinedMeta
from base_model import BaseModel
from flask.ext.classy import FlaskView
from flask.ext.classy import route
from peewee import *
from flask import request
from utility import response_json
from utility import send_email
from utility import random_string
class User(BaseModel, FlaskView):
__metaclass__ = CombinedMeta
@route('/<username>', methods=['GET'])
def read_user(self, username):
#cool method stuff
當我將BaseModel類更改為以下代碼時,出現新錯誤。
class BaseModel(Model):TypeError:調用元類基礎時出錯,此構造方法不接受任何參數
from peewee import *
#sqlite is used for easy testing.
mysql_db = SqliteDatabase('test.db')
class BaseModel(Model):
class Meta:
database = mysql_db
__metaclass__ = Meta
我不知道如何解決這個問題,我是Python的新手。 我的主要目標是使程序與多個類一起使用。 這就是為什么我要讓燒瓶優雅地工作。
與其他解決方案一樣,沒有燒瓶優雅的情況下解決此問題的方法也同樣受歡迎。 如果不使用flask classy比較容易,我會嘗試一下。
編輯
調用元類基數時,object .__ init __()不帶參數
class Meta(type):
database = mysql_db
當我將代碼更改為此時,出現以下錯誤:
TypeError:調用元類基礎元類沖突時出錯:派生類的元類必須是其所有基礎元類的(非嚴格)子類
我設法不使用flask-classy解決了這個問題。 相反,我使用的是藍圖, flask文檔 。 我不再需要BaseModel和FlakView,現在只需要BaseModel。
這是我的工作代碼:
我不再需要FlaskView,因為我不再使用flak-classy。 沒有更多的流星類錯誤!
_ 初始化 _.py
from flask import Flask
import user
app = Flask(__name__)
app.register_blueprint(user.bp)
user.py
from base_model import BaseModel
class User(BaseModel):
username = CharField(primary_key=True)
password = CharField(null=False)
bp = Blueprint('user', __name__)
@bp.route('/user/method', method=['GET'])
def method()
#method stuff
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.