Skip to content

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


Files changed (6)

File mysql/scripts/tables.sql MODIFIED

  • 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;

File web/app/item/views.py MODIFIED

-from flask import flash, redirect, render_template, request, session, url_for
+from flask import abort, flash, redirect, render_template, request, session, url_for

File web/app/user/forms.py MODIFIED

  • 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')

File web/app/user/models.py MODIFIED

  • Add columns to UserModel.
  • Create method for incrementing cnt_login and updating mod_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,
         } 

File web/app/user/templates/user_edit.html MODIFIED

  • 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" -->

File web/app/user/views.py MODIFIED

  • 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

Clone this wiki locally