NameError:未定义全局名称“User”

问题描述 投票:0回答:2

我按照miguelgrinberg 教程,想要创建一个没有登录页面的个人资料页面,所以当我有http:... / user / peg正如我所说我得到错误,我认为因为它无法连接数据库。我用python命令将数据放入User中

>>> u = models.User(nickname='peg', email='[email protected]')
>>> db.session.add(u)
>>> db.session.commit()

我有一个问题,那就是存储User和Post的数据库在哪里?为什么他没有定义表?(因为在app.db中我们有一个包含三列1.reponsity_id 2. reponsity_path 3. id的表)请告诉我如何解决错误。感谢名单

views.朋友

from app import app
from flask import render_template, flash, redirect


@app.route('/')
@app.route('/index')
def index():
    user = {'nickname': 'Miguel'}
    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('/user/<nickname>')
 def user(nickname):
     #here I got error NameError: global name 'User' is not defined
     user = User.query.filter_by( nickname = nickname).first() 
     posts = [
          {'author': user, 'body': 'Test post #1'},
          {'author': user, 'body': 'Test post #2'}
     ]
     return render_template('user.html',
               user=user,
               posts=posts)

models.朋友

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 __repr__(self):
        return '<User %r>' % (self.nickname)

class Post(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    body = db.Column(db.String(140))
    timestamp = db.Column(db.DateTime)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

    def __repr__(self):
       return '<Post %r>' % (self.body)

都不_create.朋友

#!flask/bin/python
from migrate.versioning import api
from config import SQLALCHEMY_DATABASE_URI
from config import SQLALCHEMY_MIGRATE_REPO
from app import db
import os.path
db.create_all()

if not os.path.exists(SQLALCHEMY_MIGRATE_REPO):
    api.create(SQLALCHEMY_MIGRATE_REPO, 'database repository')
    api.version_control(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
else:
    api.version_control(SQLALCHEMY_DATABASE_URI,
    SQLALCHEMY_MIGRATE_REPO, api.version(SQLALCHEMY_MIGRATE_REPO))

user.html

<!-- extend base layout -->
{% extends "base.html" %}

{% block content %}
<h1>User: {{ user.nickname }}!</h1>
<hr>
{% for post in posts %}
<p>
{{ post.author.nickname }} says: <b>{{ post.body }}</b>
 </p>
{% endfor %}
{% endblock %}
python flask sqlalchemy flask-sqlalchemy
2个回答
4
投票

您需要将模型导入views模块:

from models import User

0
投票

添加:

class User(flask_login.UserMixin):
     pass

为我解决了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.