3 votes

Erreur lors de l'appel des bases de métaclasses

Je trouve qu'il est très difficile de faire le tour de ce problème de base. J'utilise python 2.7.10 pour suivre un tutoriel sur Flask qui est dispensé avec python 3.4. Je suis conscient de certaines différences entre les deux versions, mais il semble que cette connaissance ne soit pas suffisante pour surmonter cette situation. J'ai une expérience de niveau amateur en python. J'ai l'impression que cela a quelque chose à voir avec la définition des classes, mais je ne parviens pas à trouver la solution. Et oui, j'ai parcouru les solutions pour une erreur similaire, mais je n'ai pas été en mesure de relier la solution à mon problème.

Traceback (most recent call last):
  File "manage.py", line 5, in <module>
    from flask_init import app
  File "/Users/sapp/Desktop/ude/flask_init/__init__.py", line 12, in <module>
    from author import views
  File "/Users/sapp/Desktop/ude/flask_init/author/views.py", line 3, in     <module>
    from form import RegisterForm
   File "/Users/sapp/Desktop/ude/flask_init/author/form.py", line 5, in <module>
    class RegisterForm(form):
TypeError: Error when calling the metaclass bases
module.__init__() takes at most 2 arguments (3 given)

Ma structure de répertoire :

├── __init__.py
├── __init__.pyc
├── author
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── form.py
│   ├── form.pyc
│   ├── models.py
│   ├── models.pyc
│   ├── views.py
│   └── views.pyc
├── blog
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── views.py
│   └── views.pyc
├── manage.py
├── requirements.txt
├── settings.py
├── settings.pyc
├── templates
│   ├── author
│   └── base.html
└── venv
    ├── bin
    ├── include
    ├── lib
    └── pip-selfcheck.json

manage.py :

import os, sys

from flask_script import Manager, Server
from flask_init import app

manager = Manager(app)

manager.add_command("runserver", Server(
    do something
    ))

if __name__ == "__main__":
    manager.run()

form.py :

from flask_wtf import form
from wtforms import validators, StringField, PasswordField
from wtforms.fields.html5 import EmailField

class RegisterForm(form):
    pass

init.py :

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config.from_object('settings')
db = SQLAlchemy(app)
import blog.views
from author import views

views.py :

from flask_init import app
from flask import render_template, redirect
from form import RegisterForm

@app.route('/register', method=('GET', 'POST'))
def register():
    form = RegisterForm()
    return render_template('author/register.html', form=form)

J'ai choisi de ne pas baliser avec wtforms car je suis plus préoccupé par ce qui me manque en matière de métaclasses entre 2.7 et 3.4.

3voto

Daniel Roseman Points 199743

Cela n'a rien à voir avec les versions de Python.

Vous importez la mauvaise chose dans votre form.py ; vous avez form au lieu de Form . Le premier est un module, le second est la classe, dont vous devez hériter.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X