2016-05-25 14 views
3

Es ist sehr schwierig, dieses grundlegende Problem zu umgehen. Ich benutze Python 2.7.10, um einem Flaschentutorial zu folgen, das mit Python 3.4 geliefert wird. Ich bin mir einiger Unterschiede zwischen den beiden Versionen bewusst, aber es scheint, dass das Wissen nicht ausreicht, um diese Situation zu überwinden. Ich habe Amateur-Level-Erfahrung in Python. Ich habe das Gefühl, dass es etwas mit der Klassendefinition zu tun hat, aber nicht dazu in der Lage ist. Und ja, ich habe die Lösungen für ähnliche Fehler durchgespielt, konnte aber die Lösung nicht auf mein Problem beziehen.Fehler beim Aufrufen der Metaklassenbasen

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) 

Meine Verzeichnisstruktur:

├── __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) 

wählte ich nicht mit wtforms zu markieren, wie ich mit mehr besorgt bin, was ich bin fehlt, wenn es um metaclasses zwischen 2,7 und 3,4 kommt.

Antwort

3

Dies hat nichts mit Python-Versionen zu tun.

Sie importieren die falsche Sache in Ihrem form.py; Sie haben form anstelle von Form. Ersteres ist ein Modul, letzteres ist die Klasse, von der Sie erben sollten.

+0

Vielen Dank. Hatte auch "Methode" anstelle von "Methoden" in views.py. Alles bereit! – papu

Verwandte Themen