Flask-PythonアプリケーションにFlask-Loginを追加しようとしていますが、このエラーが発生しています。 私はuser.loaderが正しいとは思っていませんが、アイデアはIDまたは電子メールに基づいてユーザーを読み込むことです。DataError:(psycopg2.DataError)整数の入力構文が無効です
私は間違って何を考えていますか?事前
よろしくで
おかげ
フルエラー:
DataError: (psycopg2.DataError) invalid input syntax for integer: "[email protected]" LINE 3: WHERE users.uid = '[email protected]'
app.py
from flask import Flask, render_template, request, session, redirect, url_for
from models import db, User
from forms import SignupForm, LoginForm
from flask_login import LoginManager, UserMixin, \
login_required, login_user, logout_user
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://localhost/polex'
db.init_app(app)
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = "login"
app.secret_key = "development-key"
@login_manager.user_loader
def user_loader(uid):
"""Given *user_id*, return the associated User object.
:param unicode user_id: user_id (email) user to retrieve
"""
return User.query.get(uid)
@app.route("/")
def index():
return render_template("index.html")
@app.route("/about")
def about():
return render_template("about.html")
@app.route("/signup", methods=["GET", "POST"])
def signup():
if 'email' in session:
return redirect(url_for('home'))
form = SignupForm()
if request.method == "POST":
if form.validate() == False:
return render_template('signup.html', form=form)
else:
newuser = User(form.first_name.data, form.last_name.data, form.email.data, form.password.data)
db.session.add(newuser)
db.session.commit()
session['email'] = newuser.email
return redirect(url_for('home'))
elif request.method == "GET":
return render_template('signup.html', form=form)
@app.route("/login", methods=["GET", "POST"])
def login():
print db
form = LoginForm()
if request.method == "POST":
if form.validate() == False:
return render_template("login.html", form=form)
else:
email = form.email.data
password = form.password.data
user = User.query.filter_by(email=email).first()
if user is not None and user.check_password(password):
login_user(user, remember=True)
return redirect(url_for('home'))
else:
return redirect(url_for('login'))
elif request.method == 'GET':
return render_template('login.html', form=form)
@app.route("/logout")
def logout():
session.pop('email', None)
return redirect(url_for('index'))
@app.route("/home", methods=["GET", "POST"])
def home():
return render_template("home.html")
if __name__ == "__main__":
app.run(debug=True)
models.pyWERKZEUG輸入generate_password_hashからflask_sqlalchemy輸入SQLAlchemyの から0、輸入UserMixin
db = SQLAlchemy()
class User(db.Model):
__tablename__ = 'users'
uid = db.Column(db.Integer, primary_key = True)
firstname = db.Column(db.String(100))
lastname = db.Column(db.String(100))
email = db.Column(db.String(120), unique=True)
pwdhash = db.Column(db.String(54))
#-----login requirements-----
def is_active(self):
#all users are active
return True
def get_id(self):
# returns the user e-mail. not sure who calls this
return self.email
def is_authenticated(self):
return self.authenticated
def is_anonymous(self):
# False as we do not support annonymity
return False
def __init__(self, firstname, lastname, email, password):
self.firstname = firstname.title()
self.lastname = lastname.title()
self.email = email.lower()
self.set_password(password)
def set_password(self, password):
self.pwdhash = generate_password_hash(password)
def check_password(self, password):
return check_password_hash(self.pwdhash, password)
ご意見ありがとうございます。私はそれを試みたが、 'TypeError:この句のブール値は定義されていない ' – Perseverance
@perseveranceは' filter_by'を使って上記の修正を試みるように気をつけていますか? – rofls
まあ、実際には、エラーを 'AttributeError:' BaseQuery 'に変更しました。' is_authenticated '属性はありません。そのuser_emailは正しいですか?私は自分のmodel.pyのUserを参照していないからです。どのようにしてそのような電子メールを解析するのですか? 申し訳ありませんが、ありがとうございます! – Perseverance