2015-11-18 224 views
0

我完全不熟悉烧瓶和Web开发。我需要的是使用蒸汽ID登录到一个网站。我做它,因为它说here,但出现以下错误:OperationalError:(sqlite3.OperationalError)no such table:user

OperationalError: (sqlite3.OperationalError) no such table: user

它似乎正确地打开蒸汽网站,但是当我按登录它打破。那么,我的错误是什么?任何帮助表示赞赏。 代码:

from flask import Flask, render_template, redirect, session, json, g 
from flask_bootstrap import Bootstrap 
from flask.ext.sqlalchemy import SQLAlchemy 
from flask.ext.openid import OpenID 
import urllib 
import re 

app = Flask(__name__) 
app.secret_key = '123' 
Bootstrap(app) 
app.config.from_pyfile('settings.cfg') 
db = SQLAlchemy(app) 
oid = OpenID(app) 

class User(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    steam_id = db.Column(db.String(40)) 
    nickname = db.String(80) 

    @staticmethod 
    def get_or_create(steam_id): 
     rv = User.query.filter_by(steam_id=steam_id).first() 
     if rv is None: 
      rv = User() 
      rv.steam_id = steam_id 
      db.session.add(rv) 
     return rv 

def get_steam_userinfo(steam_id): 
    options = { 
     'key': app.config['STEAM_API_KEY'], 
     'steamids': steam_id 
    } 
    url = 'http://api.steampowered.com/ISteamUser/' \ 
      'GetPlayerSummaries/v0001/?%s' % urllib.urlencode(options) 
    rv = json.load(urllib.urlopen(url)) 
    return rv['response']['players']['player'][0] or {} 

_steam_id_re = re.compile('steamcommunity.com/openid/id/(.*?)$') 

@app.route('/login') 
@oid.loginhandler 
def login(): 
    if g.user is not None: 
     return redirect(oid.get_next_url()) 
    return oid.try_login('http://steamcommunity.com/openid') 

@oid.after_login 
def create_or_login(resp): 
    match = _steam_id_re.search(resp.identity_url) 
    g.user = User.get_or_create(match.group(1)) 
    steamdata = get_steam_userinfo(g.user.steam_id) 
    g.user.nickname = steamdata['personaname'] 
    db.session.commit() 
    session['user_id'] = g.user.id 
    flash('You are logged in as %s' % g.user.nickname) 
    return redirect(oid.get_next_url()) 

@app.before_request 
def before_request(): 
    g.user = None 
    if 'user_id' in session: 
     g.user = User.query.get(session['user_id']) 

@app.route('/') 
def homepage(): 
    return render_template('mainpage.html') 

@app.route('/logout') 
def logout(): 
    session.pop('user_id', None) 
    return redirect(oid.get_next_url()) 

if __name__ == '__main__': 
    app.run(debug=True) 

回答

0

您需要在运行你的应用程序之前运行db.create_all()。 这将创建您的模型在数据库中描述的所有表格。

如果您是烧瓶新手,可以按照快速入门指导here

相关问题