J'essaie de faire fonctionner ma classe d'utilisateur avec BaseModel et FlaskView. Cela entraîne l'erreur de conflit de métaclasse et je ne peux pas le résoudre.flask-classy et peewee, erreur de conflit de métaclasse
choses que j'ai essayé de résoudre le problème:
Cela ne fonctionne pas à cause de la de classmaker import noconflict. L'exemple est de juin 2003. Peut-être est-il trop vieux? Je cours sur python 2.7.3.
http://code.activestate.com/recipes/204197-solving-the-metaclass-conflict/
Vous avez également essayé cette solution, voir les blocs de code ci-dessous. -je obtenir cette erreur: AttributeError: objet de type 'BaseModel' n'a pas d'attribut 'métaclasse'
Double inheritance causes metaclass conflict
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
Quand je change la classe BaseModel au code suivant, je reçois une nouvelle erreur.
classe BaseModel (modèle): TypeError: Erreur lors de l'appel des bases de métaclasse ce constructeur ne prend aucun argument
from peewee import *
#sqlite is used for easy testing.
mysql_db = SqliteDatabase('test.db')
class BaseModel(Model):
class Meta:
database = mysql_db
__metaclass__ = Meta
Je ne sais pas comment je peux résoudre ce problème, je suis nouveau à Python. Mon objectif principal est de faire fonctionner le programme avec plusieurs classes. C'est pourquoi j'essaie de faire fonctionner flask classy.
Une façon de résoudre ce problème sans flask classy est tout aussi bienvenue que toute autre solution. Si vous n'utilisez pas le flacon chic, c'est plus facile, je vais essayer.
EDIT
When calling the metaclass bases, object.__init__() takes no parameters
class Meta(type):
database = mysql_db
Quand je change le code à ce que je reçois l'erreur suivante:
TypeError: Erreur lors de l'appel du conflit des bases de métaclasse: la métaclasse d'une classe dérivée doit être une sous-classe (non-stricte) des métaclasses de toutes ses bases