我正在通过下面的脚本运行Flask(run.py)
#!flask/bin/python from app import app app.run(debug=True)
运行脚本时,我有这个回溯
File "./run.py",line 2,in <module> from app import app File "/home/andy.kwok/microblog/app/__init__.py",line 11,in <module> lm.init_app(app) NameError: name 'app' is not defined
我试图从app导入应用程序添加到models.py和models.py但它不起作用.
我究竟做错了什么?
我的__init__.py
from flask import Flask from flask.ext.sqlalchemy import sqlAlchemy import os from flask.ext.login import LoginManager from flask.ext.openid import OpenID from config import basedir lm= LoginManager() lm.init_app(app) oid = OpenID(app,os.path.join(basedir,'tmp')) lm.login_view = 'login' app = Flask(__name__) app.config.from_object('config') db = sqlAlchemy(app) from app import views,models
我的models.py
from app import db class User(db.Model): id = db.Column(db.Integer,primary_key=True) nickname = db.Column(db.String(64),index=True,unique=True) email = db.Column(db.String(120),unique=True) posts = db.relationship('Post',backref='author',lazy='dynamic') def is_authenticated(self): return True def is_active(self): return True def is_anonymous(self): return False def get_id(self): try: return unicode(self.id) # python 2 except NameError: return str(self.id) # python 3 def __repr__(self): return '<User %r>' % (self.nickname)
我的views.py
from flask import render_template,flash,redirect,session,url_for,request,g from flask.ext.login import login_user,logout_user,current_user,login_required from app import app from app import db from app import lm from app import oid from .forms import LoginForm from .models import User @app.route('/') @app.route('/index') @login_required def index(): user = g.user posts = [ { 'author': {'nickname': 'John'},'body': 'Beautiful day in Portland!' },{ 'author': {'nickname': 'Susan'},'body': 'The Avengers movie was so cool!' } ] return render_template('index.html',title='Home',user=user,posts=posts) @app.route('/login',methods=['GET','POST']) @oid.loginhandler def login(): if g.user is not None and g.user.is_authenticated(): return redirect(url_for('index')) form = LoginForm() if form.validate_on_submit(): session['remember_me'] = form.remember_me.data return oid.try_login(form.openid.data,ask_for=['nickname','email']) return render_template('login.html',title='Sign In',form=form,providers=app.config['OPENID_PROVIDERS']) @lm.user_loader def load_user(id): return User.query.get(int(id)) @oid.after_login def after_login(resp): if resp.email is None or resp.email == "": flash('Invalid login. Please try again.') return redirect(url_for('login')) user = User.query.filter_by(email=resp.email).first() if user is None: nickname = resp.nickname if nickname is None or nickname == "": nickname = resp.email.split('@')[0] user = User(nickname=nickname,email=resp.email) db.session.add(user) db.session.commit() remember_me = False if 'remember_me' in session: remember_me = session['remember_me'] session.pop('remember_me',None) login_user(user,remember = remember_me) return redirect(request.args.get('next') or url_for('index')) @app.before_request def before_request(): g.user= current_user
解决方法
您在导入之前使用该应用程序,此处为lm.init_app(app),尚未定义应用程序.
它应该如下所示:
from flask import Flask from flask.ext.sqlalchemy import sqlAlchemy import os from flask.ext.login import LoginManager from flask.ext.openid import OpenID from config import basedir app = Flask(__name__) app.config.from_object('config') lm= LoginManager() lm.init_app(app) oid = OpenID(app,'tmp')) lm.login_view = 'login' db = sqlAlchemy(app) from app import views,models
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。