rogerpence
3/4/2016 - 5:09 AM

Python code to handle an SQLAlchemy exception

Python code to handle an SQLAlchemy exception

from flask import (Flask, render_template, Blueprint,
                   session, redirect, url_for)
# from flask.ext.script import Manager
# from flask.ext.bootstrap import Bootstrap
# from flask.ext.moment import Moment
# from flask.ext.wtf import Form

from application.users.forms import LoginForm
from sqlalchemy import inspect
from sqlalchemy import exc
from application import db
from application.models import User
from sqlalchemy.orm import validates
from wtforms.validators import ValidationError



from pprint import pprint

users = Blueprint('users', __name__)

@users.route('/me')
def me():
    return "This is my page", 200

@users.route("/login", methods=['GET','POST'])
def login():
    mapper = inspect(User)
    for column in mapper.attrs:
        print(column.key)

    columns = inspect(User).columns.keys()

    formdata = {}

    form = LoginForm()

    formdata['form'] = form



    #formdata['form']['name'].data = 'Carlxxxx'



    # if form.validate_on_submit():
    #     formdata['name'] = form.name.data
    #     form.name.data = ''
    #     # return render_template('login.html', form=form, name=name, password=password)
    # return render_template('login.html', data = formdata)

    formdata['name'] = session.get('name')


    if form.validate_on_submit():
        session['name'] = form.name.data
        formdata['name'] = form.name.data

        # if db.session.query(User).filter(username=form.name.data).count():
        #     p = 'found'

        new_user = User(password=form.password.data, username=form.name.data)

        # try:
        #     new_user = User(password=form.password.data, username=form.name.data)
        #
        # except ValueError as e:
        #     form.name.errors.append(e)
        #     return render_template('login.html', data = formdata)
        # except:
        #     pass

        try:
            db.session.add(new_user)
            db.session.commit()
        except  exc.SQLAlchemyError as e:
            form.name.errors.append(e.orig.args[1])
            return render_template('login.html', data = formdata)


        form.name.data = ''
        return redirect(url_for('users.login'))

    return render_template('login.html', data = formdata)