从数据库获取VARCHAR(80)而不是昵称

编程入门 行业动态 更新时间:2024-10-23 15:17:28
本文介绍了从数据库获取VARCHAR(80)而不是昵称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我使用此处的代码使用Steam登录我的网站。我需要获得认证后的用户的用户名。我在HTML模板中有什么:

{%如果g.user被定义,g.user不是%} {#用户已经登录#} < li>您好,{{g.user.nickname}}!< / li> < li>< a href =/ logout>注销< / a>< / li> $ b $ {%else%} {#用户未登录#} < li>< a href =/ login>< input type = imagename =SignInvalue =SignInsrc =static / steam.png/>< / a>< / li> {%endif%}

但是这会返回VARCHAR(80)而不是用户名。我的错误是什么? 编辑。这里是我提到的例子中的代码:

from flask import Flask,render_template,redirect,session,json,g,从flask_bootstrap导入引导从flask.ext.sqlalchemy导入引导从flask.ext.openid导入SQLAlchemy 导入OpenID 导入urllib 导入re app = Flask(__ name__) app.secret_key ='A0Zr98j / 3yX R〜XHH!jmN] LWX /,?RT' 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()如果rv是None: rv = User() rv.steam_id = steam_id db.session.add(rv) return rv db。 create_all() $ b $ def get_steam_userinfo(steam_id): options = {$ b $ key':app.config ['STEAM_API_KEY'],'steamids':steam_id } url ='api.steampowered/ISteamUser/'\ 'GetPlayerSummaries / v0001 /?%s'%urllib.urlencode(options) rv = json.load(urllib.urlopen(url)) return rv ['response'] ['players'] ['player'] [0]或{} _steam_id_re = repile('steamcommunity/openid/id/(.*?)$') @ app.route('/ login') @ oid.loginhandler def login():如果g.user不是None: return redirect(oid.get_next_url()) return oid.try_login('steamcommunity/ 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.n ickname = steamdata ['personaname'] db.sessionmit() session ['user_id'] = g.user.id return redirect(oid.get_next_url()) @ app.before_request def before_request(): g.user = None 如果会话中有'user_id': 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)

$你没有定义 User.nickname 作为一个列,你刚刚分配了一个SQL键入它。

nickname = db.Column(db.String)

code>

I'm using code from here to Sign In my web-site using Steam. I need to get the username of the user after authentication. What I have in html template:

{% if g.user is defined and g.user is not none %} {# User has logged in #} <li>Hello, {{ g.user.nickname }}!</li> <li><a href="/logout">Logout</a></li> {% else %} {# User has not logged in #} <li><a href="/login"><input type="image" name="SignIn" value="SignIn" src="static/steam.png"/></a></li> {% endif %}

But this returns VARCHAR(80) instead of the username. What's my mistake ? EDIT. Here is the code from the example that I mentioned:

from flask import Flask, render_template, redirect, session, json, g, flash 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 = 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT' 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 db.create_all() def get_steam_userinfo(steam_id): options = { 'key': app.config['STEAM_API_KEY'], 'steamids': steam_id } url = 'api.steampowered/ISteamUser/' \ 'GetPlayerSummaries/v0001/?%s' % urllib.urlencode(options) rv = json.load(urllib.urlopen(url)) return rv['response']['players']['player'][0] or {} _steam_id_re = repile('steamcommunity/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('steamcommunity/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.sessionmit() session['user_id'] = g.user.id 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)

解决方案

You didn't define User.nickname as a column, you just assigned a SQL type to it. Change it to be a column with that type.

nickname = db.Column(db.String)

更多推荐

从数据库获取VARCHAR(80)而不是昵称

本文发布于:2023-10-28 01:02:13,感谢您对本站的认可!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:而不是   昵称   数据库   VARCHAR

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!