python - flask-login not sure how to make it work using sqlite3 -
so far made user object , login function, don't understand user_loader part @ all. confused, here code, please point me in right direction.
@app.route('/login', methods=['get','post']) def login(): form = login() if form.validate(): user=request.form['name'] passw=request.form['password'] c = g.db.execute("select username users username = (?)", [user]) userexists = c.fetchone() if userexists: c = g.db.execute("select password users password = (?)", [passw]) passwcorrect = c.fetchone() if passwcorrect: #session['logged_in']=true #login_user(user) flash("logged in") return redirect(url_for('home')) else: return 'incorrecg pw' else: return 'fail' return render_template('login.html', form=form) @app.route('/logout') def logout(): logout_user() return redirect(url_for('home'))
my user
class user(): def __init__(self,name,email,password, active = true): self.name = name self.email = email self.password = password self.active = active def is_authenticated(): return true #return true if user authenticated, provided credentials def is_active(): return true #return true if user activte , authenticated def is_annonymous(): return false #return true if annon, actual user return false def get_id(): return unicode(self.id) #return unicode id user, , used load user user_loader callback def __repr__(self): return '<user %r>' % (self.email) def add(self): c = g.db.execute('insert users(username,email,password)values(?,?,?)',[self.name,self.email,self.password]) g.db.commit()
my database
import sqlite3 import sys import datetime conn = sqlite3.connect('data.db')#create db conn: cur = conn.cursor() cur.execute('pragma foreign_keys = on') cur.execute("drop table if exists posts") cur.execute("drop table if exists users") cur.execute("create table users(id integer primary key, username text, password text, email text)") cur.execute("create table posts(id integer primary key, body text, user_id int, foreign key(user_id) references users(id))")
i set loginmanager in init. not sure next, know have how set
@login_manager.user_loader def load_user(id): return user.query.get(id)
how adjust portion code work database?
edit: please let me know if looks correct or can improved :)
@login_manager.user_loader def load_user(id): c = g.db.execute("select id users username = (?)", [id]) userid = c.fetchone() return userid @app.route('/login', methods=['get','post']) def login(): form = login() if form.validate(): g.user=request.form['name'] g.passw=request.form['password'] c = g.db.execute("select username users username = (?)", [g.user]) userexists = c.fetchone() if userexists: c = g.db.execute("select password users password = (?)", [g.passw]) passwcorrect = c.fetchone() if passwcorrect: user = user(g.user, 'email', g.passw) login_user(user) flash("logged in") return redirect(url_for('home')) else: return 'incorrecg pw' else: return 'fail' return render_template('login.html', form=form) @app.route('/logout') def logout(): logout_user() return redirect(url_for('home')) import sqlite3 flask import g class user(): def __init__(self,name,email,password, active = true): self.name = name self.email = email self.password = password self.active = active def is_authenticated(self): return true #return true if user authenticated, provided credentials def is_active(self): return true #return true if user activte , authenticated def is_annonymous(self): return false #return true if annon, actual user return false def get_id(self): c = g.db.execute('select id users username = (?)', [g.user]) id = c.fetchone() return unicode(id) #return unicode id user, , used load user user_loader callback def __repr__(self): return '<user %r>' % (self.email) def add(self): c = g.db.execute('insert users(username,email,password)values(?,?,?)',[self.name,self.email,self.password]) g.db.commit()
user_loader callback function way tell flask-login on "how" user id database ? since using sqllite3, need implement user_loader function query sqllite database , fetch/return userid/username have stored. like:
@login_manager.user_loader def load_user(id): c = g.db.execute("select username users username = (?)", [id]) userrow = c.fetchone() userid = userrow[0] # or whatever index position return userid
when call login_user(user), calls load_user function figure out user id.
this how process flow works:
you verify user has entered correct username , password checking against database.
if username/password matches, need retrieve user "object" user id. user object userobj = user(userid,email..etc.). instantiate it.
login user calling login_user(userobj).
redirect wherever, flash etc.
Comments
Post a Comment