-
Notifications
You must be signed in to change notification settings - Fork 8
Commit v0.25
kwmccabe edited this page Apr 17, 2018
·
7 revisions
v0.25 - Add User columns: cnt_login, mod_login, mod_create, mod_update
- +7 -1 [M] mysql/scripts/tables.sql
- +1 -2 [M] web/app/item/views.py
- +4 -0 [M] web/app/user/forms.py
- +16 -0 [M] web/app/user/models.py
- +5 -0 [M] web/app/user/templates/user_edit.html
- +5 -1 [M] web/app/user/views.py
- Add columns to user database table.
`keyname` varchar(63) NOT NULL,
`user_email` varchar(255) DEFAULT NULL,
`user_pass` varchar(255) DEFAULT NULL,
+ `cnt_login` smallint(6) DEFAULT '0',
+ `mod_login` datetime DEFAULT NULL,
+ `mod_create` datetime DEFAULT CURRENT_TIMESTAMP,
+ `mod_update` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `user_keyname` (`keyname`),
KEY `user_active` (`active`),
- KEY `user_email` (`user_email`)
+ KEY `user_email` (`user_email`),
+ KEY `user_login` (`mod_login`),
+ KEY `user_create` (`mod_create`)
) ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8;
DESCRIBE `user`;
SELECT "table `user` created" AS MSG;
-from flask import flash, redirect, render_template, request, session, url_for
+from flask import abort, flash, redirect, render_template, request, session, url_for
- Add columns to
EditUserForm
.
user_email = StringField('Email', validators=[InputRequired(),Length(1,63),Email(),validate_usermail], filters=[filter_useremail])
password = PasswordField('Password', validators=[EqualTo('password2',message="Passwords must match.")])
password2 = PasswordField('Confirm Password')
+ cnt_login = IntegerField('Login Count')
+ mod_login = DateTimeField('Last Login')
+ mod_create = DateTimeField('User Created')
+ mod_update = DateTimeField('User Updated')
submit = SubmitField('Update User')
- Add columns to
UserModel
. - Create method for incrementing
cnt_login
and updatingmod_login
.
+from datetime import datetime
...
keyname = db.Column(db.String(63), nullable=False, unique=True, index=True, default='')
user_email = db.Column(db.String(255), nullable=False, unique=True, index=True)
user_pass = db.Column(db.String(128))
+ cnt_login = db.Column(db.Integer, default=0)
+ mod_login = db.Column(db.DateTime)
+ mod_create = db.Column(db.DateTime, default=datetime.utcnow, index=True)
+ mod_update = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
...
+ def update_mod_login(self):
+ self.cnt_login = self.cnt_login + 1
+ self.mod_login = datetime.utcnow()
+ db.session.add(self)
+ db.session.commit()
+ logging.debug( "update_mod_login(%s)" % self.user_email)
+
def to_json(self):
json_user = {
#'url': url_for('api.get_user', id=self.id),
'active' : self.active,
'keyname' : self.keyname,
'user_email': self.user_email,
+ 'cnt_login' : self.cnt_login,
+ 'mod_login' : self.mod_login,
+ 'mod_create': self.mod_create,
+ 'mod_update': self.mod_update,
}
- Add columns (display only) to the template for
EditUserForm
.
</form>
+{{ form.cnt_login.label }} : {{ form.cnt_login.data }}<br/>
+{{ form.mod_login.label }} : {{ form.mod_login.data }}<br/>
+{{ form.mod_create.label }} : {{ form.mod_create.data }}<br/>
+{{ form.mod_update.label }} : {{ form.mod_update.data }}<br/>
+
</div> <!-- end class="panel-body" -->
- Add
user.update_mod_login()
to route/login
. - Remove non-editable form fields prior to update.
form = LoginForm(user)
if form.validate_on_submit():
user = UserModel.query.filter_by(user_email=form.user_email.data).first()
+ if user is not None and user.user_pass is None:
+ user.password = form.password.data
if user is not None and user.verify_password(form.password.data):
+ user.update_mod_login()
login_user(user, form.remember.data)
return redirect(form.next.data or url_for('main.main_home'))
- flash('Invalid username or password')
+ flash('Invalid username or password','warning')
else:
flash_errors(form)
form.next.data = request.args.get('next') or url_for('main.main_home')
...
def user_edit( id ):
user = UserModel.query.get_or_404(id)
form = EditUserForm(user)
+ del form.mod_create, form.mod_update
if form.validate_on_submit():
Commit-v0.24 | Commit-v0.25 | Commit-v0.26
- FlaskApp Tutorial
- Table of Contents
- About
- Application Setup
- Modules, Templates, and Layouts
- Database Items, Forms, and CRUD
- List Filter, Sort, and Paginate
- Users and Login
- Database Relationships
- API Module, HTTPAuth and JSON
- Refactoring User Roles and Item Status
- AJAX and Public Pages