← flask-blog

login

f9aaff23131706126966b6dcbc73cc5d6f435210 · ovidiucs · May 16, 2015 23:39

+24 −2 · 1 file changed

  • flask-blog.py +24 −2
diff --git a/flask-blog.py b/flask-blog.py
index 50cae2d..1bfd5ac 100644
--- a/flask-blog.py
+++ b/flask-blog.py
@@ -1,13 +1,17 @@
 import os
 import imghdr
+from werkzeug.security import generate_password_hash, check_password_hash
 from datetime import datetime
 from flask import Flask, render_template, request, session, g, \
     make_response, jsonify, url_for, redirect
 from flask.ext.bootstrap import Bootstrap
 from flask.ext.wtf import Form
-from wtforms import StringField, SubmitField, FileField, ValidationError
+from wtforms import PasswordField, StringField, SubmitField, FileField, \
+    ValidationError, BooleanField
 from wtforms.validators import Required, Length
 from flask.ext.sqlalchemy import SQLAlchemy
+from flask.ext.login import LoginManager, UserMixin, login_user, logout_user, \
+    login_required
 
 
 app = Flask(__name__)
@@ -21,6 +25,9 @@ app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///data.sqlite3'
 db = SQLAlchemy(app)
 # initialize extension
 bootstrap = Bootstrap(app)
+# login manager
+lm = LoginManager(app)
+lm.login_view = 'login'
 
 
 class NameForm(Form):
@@ -47,7 +54,7 @@ class UploadForm(Form):
 # length for our String fields in the database. Using our models is also extremely
 # simple, thanks to the SQLAlchemy query syntax
 
-class User(db.Model):
+class User(UserMixin, db.Model):
     __tablename__ = 'users'
     id = db.Column(db.Integer, primary_key=True)
     name = db.Column(db.String(16), index=True, unique=True)
@@ -74,6 +81,18 @@ class User(db.Model):
         return '<User {0}>'.format(self.name)
 
 
+@lm.user_loader
+def load_user(id):
+    return User.query.get(int(id))
+
+
+class LoginForm(Form):
+    username = StringField('Username', validators=[Required(), Length(1, 16)])
+    password = PasswordField('Password', validators=[Required()])
+    remember_me = BooleanField('Remember Me')
+    submit = SubmitField('Submit')
+
+
 @app.route('/')
 def hello_world():
     return render_template('index.html')
@@ -213,6 +232,9 @@ def sqla():
     return render_template('sqla.html', form=form, name=name, new=new)
 
 
+@app.route('/login', methods=['GET', 'POST'])
+def login():
+
 @app.errorhandler(404)
 def not_found(e):
     return render_template('404.html')