title: flask - NameError: name 'app' is not defined
body: <p>I'm running Flask through thescript, below (<strong>run.py</strong>)</p>
  
  <pre><code>#!flask/bin/python
  from app import app
  app.run(debug=True)
  </code></pre>
  
  <p>When running the script, I have this traceback</p>
  
  <pre><code>File "./run.py", line 2, in &lt;module&gt;
      from app import app
    File "/home/andy.kwok/microblog/app/__init__.py", line 11, in &lt;module&gt;
      lm.init_app(app)
  NameError: name 'app' is not defined
  </code></pre>
  
  <p>I've tried to add <code>from app import app</code> into models.py and models.py but it does not work.</p>
  
  <p>What am I doing wrong?  </p>
  
  <p>My <strong>__init__.py</strong> </p>
  
  <pre><code>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
  </code></pre>
  
  <p>My <strong>models.py</strong></p>
  
  <pre><code>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), index=True, 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 '&lt;User %r&gt;' % (self.nickname)
  </code></pre>
  
  <p>My <strong>views.py</strong></p>
  
  <pre><code>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
  </code></pre>