提示错误如下
C:\Documents and Settings\Administrator\PycharmProjects\flaskr>python manage.py runserverTraceback (most recent call last): File "manage.py", line 7, in <module> from app import create_app File "C:\Documents and Settings\Administrator\PycharmProjects\flaskr\app\__init__.py", line 9, in <module> from .views import init_views File "C:\Documents and Settings\Administrator\PycharmProjects\flaskr\app\views.py", line 8, in <module> from .models import User File "C:\Documents and Settings\Administrator\PycharmProjects\flaskr\app\models.py", line 4, in <module> from . import dbImportError: cannot import name db
代码如下所示
__init__.py
from flask import Flaskfrom flask_bootstrap import Bootstrapfrom flask_sqlalchemy import SQLAlchemyimport osfrom .views import init_viewsbasedir = os.path.abspath(os.path.dirname(__file__))bootstrap = Bootstrap()db = SQLAlchemy()#定义create_app函数def create_app(): app = Flask(__name__)#设置密匙 app.config['SECRET_KEY'] = 'hard to guess string'#配置数据库 app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////' + os.path.join(basedir,'data.sqlite') #app.config['SQLALCHEMY_DATABASE_URL'] = 'sqlite:////' + os.path.join(basedir,'data.sqlite') app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True #app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True bootstrap.init_app(app) db.init_app(app) init_views(app) return app
models.py
from . import db#定义模型class Role(db.Model): __tablename__ = 'roles' id = db.Column(db.Integer,primary_key=True) name = db.Column(db.String(64),unique=True) users = db.relationship('User',backref='role',lazy='dynamic') def __repr__(self): return '<Role %r>' % self.nameclass User(db.Model): __tablename__ = 'users' id = db.Column(db.Integer,primary_key=True) username = db.Column(db.String(64),unique=True,index=True) role_id = db.Column(db.Integer,db.ForeignKey('roles.id')) def __repr__(self): return '<User %r>' %self.username
views.py
from flask import render_template,make_response,redirect,session,abortfrom .forms import NameFormfrom .models import Userfrom . import dbdef init_views(app): #视图函数 @app.route('/',methods=['GET','POST']) def index(): ##在视图函数中操作数据库 form = NameForm() if form.validate_on_submit(): user = User.query.filter_by(username=form.name.data).first() if user is None: user = User(username = form.name.data) db.session.add(user) session['known']=False else: session['known']=True session['name'] = form.name.data form.name.data='' return redirect('index') return render_template('index.html',form=form,name=session.get('name'),known=session.get('known',False)) @app.route('/make_response') def make_request(): response = make_response('<h1>Hello!!!</h1>') response.set_cookie('answer','42') return response @app.route('/user/<name>') def user(name): return render_template('user.html',name=name) @app.route('/test/') def test_get(): return render_template('test.html') #重定向 @app.route('/redirect') def redirect_test(): return redirect('http://www.baidu.com') @app.route('/abort/<id>') def get_abort(id): user = load_user(id) if not user: abort(404) return '<h1>Hello,%s</h1>'%user.name @app.errorhandler(404) def page_not_found(e): return render_template('404.html'),404 @app.errorhandler(500) def internal_server_error(e): return render_template('500.html'),500
forms.py
from flask_wtf import Formfrom wtforms import StringField,SubmitFieldfrom wtforms.validators import Required##表单类class NameForm(Form): name=StringField('what is you name?',validators=[Required()]) submit =SubmitField('Submit')