我关注miguelgrinberg 教程,想要创建一个没有登录页面的个人资料页面,所以当我有http:... / user / peg正如我所说我得到了错误,我认为因为它无法与数据库连接。我使用python命令将数据放入User中
>>> u = models.User(nickname='peg', email='peg@email.com')
>>> db.session.add(u)
>>> db.session.commit()
我有一个问题,那就是存储用户和帖子的数据库在哪里?为什么他没有定义表?(因为在app.db中我们有一个包含三列1.reponsity_id 2. reponsity_path 3. id的表)请告诉我如何解决错误。感谢名单
views.py
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.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), 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)
db_create.py
#!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 %}
答案 0 :(得分:4)
您需要将模型导入views
模块:
from models import User
答案 1 :(得分:0)
添加:
class User(flask_login.UserMixin):
pass
为我解决了这个问题。