I've made a login page using Python Flask which works with MySQL. I started learning Flask 2 days ago and it was fun, so I came up with this:
from flask import Flask, session, redirect, url_for, escape, request, render_template
from hashlib import md5
import MySQLdb
app = Flask(__name__)
#######################
# DATABASE CONFIG #
#######################
db = MySQLdb.connect(host="localhost", user="root", passwd="", db="test")
cur = db.cursor()
@app.route('/')
def index():
if 'username' in session:
username_session = escape(session['username']).capitalize()
return render_template('index.html', session_user_name=username_session)
return redirect(url_for('login'))
@app.route('/login', methods=['GET', 'POST'])
def login():
error = None
if 'username' in session:
return redirect(url_for('index'))
if request.method == 'POST':
username_form = request.form['username']
password_form = request.form['password']
cur.execute("SELECT COUNT(1) FROM users WHERE name = %s;", [username_form]) # CHECKS IF USERNAME EXSIST
if cur.fetchone()[0]:
cur.execute("SELECT pass FROM users WHERE name = %s;", [username_form]) # FETCH THE HASHED PASSWORD
for row in cur.fetchall():
if md5(password_form).hexdigest() == row[0]:
session['username'] = request.form['username']
return redirect(url_for('index'))
else:
error = "Invalid Credential"
else:
error = "Invalid Credential"
return render_template('login.html', error=error)
@app.route('/logout')
def logout():
session.pop('username', None)
return redirect(url_for('index'))
app.secret_key = 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT'
if __name__ == '__main__':
app.run(debug=True)
index.html
<!DOCTYPE html>
<html>
<head>
<title>Login</title>
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='css/bootstrap.min.css') }}">
<script src="{{url_for('static', filename='js/bootstrap.min.js')}}"></script>
</head>
<body>
<div class="container" style="margin-top:50px;">
<div class="row">
<div class="col-md-6 col-md-offset-3 text-center">
{% if session_user_name %}
<p>Hello <b>{{ session_user_name }}</b></p>
{% endif %}
<a href="{{ url_for('logout') }}">Logout</a>
</div>
</div>
</div>
</body>
</html>
login.html
<!DOCTYPE html>
<html>
<head>
<title>Login</title>
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='css/bootstrap.min.css') }}">
<script src="{{url_for('static', filename='js/bootstrap.min.js')}}"></script>
</head>
<body>
<div class="container" style="margin-top:50px;">
<div class="row">
<div class="col-md-6 col-md-offset-3">
<form action="" method="POST">
{% if error %}
<p class=error><strong>Error:</strong> {{ error }}
{% endif %}
<div class="input-group">
<span class="input-group-addon" id="basic-addon3">Your Username</span>
<input type="text" class="form-control" name="username" id="user" aria-describedby="basic-addon3">
</div>
<br>
<div class="input-group">
<span class="input-group-addon" id="basic-addon3">Your Password</span>
<input type="text" class="form-control" id="pass" name="password" aria-describedby="basic-addon3">
</div>
<br>
<input type="Submit" value="Login" class="btn btn-default btn-sm">
</form>
</div>
</div>
</div>
</body>
</html>