簡體   English   中英

flask-classy和peewee,元類沖突錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM