2013-07-23 7 views
0

Я пытаюсь заставить мой пользовательский класс работать как с BaseModel, так и с FlaskView. Это приводит к ошибке конфликта метакласса, и я не могу ее решить.flask-classy и peewee, ошибка конфликта метакласса

Вещи, которые я пытался решить эту проблему:
Это не работает из-за от noconflict импорта classmaker. Пример с июня 2003 года. Может быть, он слишком стар? Я работаю на python 2.7.3.
http://code.activestate.com/recipes/204197-solving-the-metaclass-conflict/

Также попробовал это решение, см. Ниже код. я получаю эту ошибку: AttributeError: тип объекта 'BaseModel' не имеет атрибута 'метакласса'
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 

Когда я изменяю класс BaseModel к следующему коду я получаю новую ошибку.
класс BaseModel (модель): 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. Моя основная цель - заставить программу работать с несколькими классами. Вот почему я пытаюсь работать с фляжкой.

Способ устранения этой проблемы без колб-класса так же желанен, как и любое другое исправление. Если не использовать флягу класса легче, я попробую.

EDIT
When calling the metaclass bases, object.__init__() takes no parameters

class Meta(type): 
    database = mysql_db 

Когда я изменить код для этого я получаю следующее сообщение об ошибке:
TypeError: Ошибка при вызове Метакласс основывает метакласса конфликт: метакласс производного класса должен быть (нестрогим) подклассом метаклассов всех его оснований

ответ

0

Мне удалось решить проблему, не используя класс флажков. Вместо этого я использую чертежи, flask documentation. Мне больше не нужны как BaseModel, так и FlakView, теперь требуется только BaseModel.

Вот мой рабочий код:
Мне больше не нужен FlaskView, потому что я больше не использую flak-classy. Больше ошибок по меткам!

_ INIT _.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 

 Смежные вопросы

  • Нет связанных вопросов^_^