Skip to content

Commit a34821e

Browse files
authoredMay 4, 2019
Add files via upload
1 parent 0ac548b commit a34821e

File tree

7 files changed

+198
-0
lines changed

7 files changed

+198
-0
lines changed
 

‎python_flask_user_crud/app.py

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
from flask import Flask
2+
3+
app = Flask(__name__)
4+
app.secret_key = "secret key"

‎python_flask_user_crud/db_config.py

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from app import app
2+
from flaskext.mysql import MySQL
3+
4+
mysql = MySQL()
5+
6+
# MySQL configurations
7+
app.config['MYSQL_DATABASE_USER'] = 'root'
8+
app.config['MYSQL_DATABASE_PASSWORD'] = ''
9+
app.config['MYSQL_DATABASE_DB'] = 'roytuts'
10+
app.config['MYSQL_DATABASE_HOST'] = 'localhost'
11+
mysql.init_app(app)

‎python_flask_user_crud/main.py

+117
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
import pymysql
2+
from app import app
3+
from tables import Results
4+
from db_config import mysql
5+
from flask import flash, render_template, request, redirect
6+
from werkzeug import generate_password_hash, check_password_hash
7+
8+
@app.route('/new_user')
9+
def add_user_view():
10+
return render_template('add.html')
11+
12+
@app.route('/add', methods=['POST'])
13+
def add_user():
14+
try:
15+
_name = request.form['inputName']
16+
_email = request.form['inputEmail']
17+
_password = request.form['inputPassword']
18+
# validate the received values
19+
if _name and _email and _password and request.method == 'POST':
20+
#do not save password as a plain text
21+
_hashed_password = generate_password_hash(_password)
22+
# save edits
23+
sql = "INSERT INTO tbl_user(user_name, user_email, user_password) VALUES(%s, %s, %s)"
24+
data = (_name, _email, _hashed_password,)
25+
conn = mysql.connect()
26+
cursor = conn.cursor()
27+
cursor.execute(sql, data)
28+
conn.commit()
29+
flash('User added successfully!')
30+
return redirect('/')
31+
else:
32+
return 'Error while adding user'
33+
except Exception as e:
34+
print(e)
35+
finally:
36+
cursor.close()
37+
conn.close()
38+
39+
@app.route('/')
40+
def users():
41+
try:
42+
conn = mysql.connect()
43+
cursor = conn.cursor(pymysql.cursors.DictCursor)
44+
cursor.execute("SELECT * FROM tbl_user")
45+
rows = cursor.fetchall()
46+
table = Results(rows)
47+
table.border = True
48+
return render_template('users.html', table=table)
49+
except Exception as e:
50+
print(e)
51+
finally:
52+
cursor.close()
53+
conn.close()
54+
55+
@app.route('/edit/<int:id>')
56+
def edit_view(id):
57+
try:
58+
conn = mysql.connect()
59+
cursor = conn.cursor(pymysql.cursors.DictCursor)
60+
cursor.execute("SELECT * FROM tbl_user WHERE user_id=%s", id)
61+
row = cursor.fetchone()
62+
if row:
63+
return render_template('edit.html', row=row)
64+
else:
65+
return 'Error loading #{id}'.format(id=id)
66+
except Exception as e:
67+
print(e)
68+
finally:
69+
cursor.close()
70+
conn.close()
71+
72+
@app.route('/update', methods=['POST'])
73+
def update_user():
74+
try:
75+
_name = request.form['inputName']
76+
_email = request.form['inputEmail']
77+
_password = request.form['inputPassword']
78+
_id = request.form['id']
79+
# validate the received values
80+
if _name and _email and _password and _id and request.method == 'POST':
81+
#do not save password as a plain text
82+
_hashed_password = generate_password_hash(_password)
83+
print(_hashed_password)
84+
# save edits
85+
sql = "UPDATE tbl_user SET user_name=%s, user_email=%s, user_password=%s WHERE user_id=%s"
86+
data = (_name, _email, _hashed_password, _id,)
87+
conn = mysql.connect()
88+
cursor = conn.cursor()
89+
cursor.execute(sql, data)
90+
conn.commit()
91+
flash('User updated successfully!')
92+
return redirect('/')
93+
else:
94+
return 'Error while updating user'
95+
except Exception as e:
96+
print(e)
97+
finally:
98+
cursor.close()
99+
conn.close()
100+
101+
@app.route('/delete/<int:id>')
102+
def delete_user(id):
103+
try:
104+
conn = mysql.connect()
105+
cursor = conn.cursor()
106+
cursor.execute("DELETE FROM tbl_user WHERE user_id=%s", (id,))
107+
conn.commit()
108+
flash('User deleted successfully!')
109+
return redirect('/')
110+
except Exception as e:
111+
print(e)
112+
finally:
113+
cursor.close()
114+
conn.close()
115+
116+
if __name__ == "__main__":
117+
app.run()

‎python_flask_user_crud/tables.py

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from flask_table import Table, Col, LinkCol
2+
3+
class Results(Table):
4+
user_id = Col('Id', show=False)
5+
user_name = Col('Name')
6+
user_email = Col('Email')
7+
user_password = Col('Password', show=False)
8+
edit = LinkCol('Edit', 'edit_view', url_kwargs=dict(id='user_id'))
9+
delete = LinkCol('Delete', 'delete_user', url_kwargs=dict(id='user_id'))
+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<doctype html>
2+
<title>Add User - Python Flask MySQL CRUD</title>
3+
<h2>Add User</h2>
4+
<form method="post" action="/add">
5+
<dl>
6+
<p>
7+
<input name="inputName" value="" type="text" placeholder="Name" autocomplete="off" required>
8+
</p>
9+
<p>
10+
<input name="inputEmail" value="" type="text" placeholder="Email" autocomplete="off" required>
11+
</p>
12+
<p>
13+
<input name="inputPassword" value="" type="password" placeholder="Password" autocomplete="off" required>
14+
</p>
15+
</dl>
16+
<p>
17+
<input type="submit" value="Submit">
18+
</p>
19+
</form>
+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<doctype html>
2+
<title>Edit User - Python Flask MySQL CRUD</title>
3+
<h2>Edit User</h2>
4+
<form method="post" action="/update">
5+
<dl>
6+
<p>
7+
<input name="inputName" value="{{ row['user_name'] }}" type="text" placeholder="Name" autocomplete="off" required>
8+
</p>
9+
<p>
10+
<input name="inputEmail" value="{{ row['user_email'] }}" type="text" placeholder="Email" autocomplete="off" required>
11+
</p>
12+
<p>
13+
<input name="inputPassword" value="" type="password" placeholder="Password" autocomplete="off" required>
14+
</p>
15+
</dl>
16+
<p>
17+
<input name="id" value="{{ row['user_id'] }}" type="hidden">
18+
<input type="submit" value="Submit">
19+
</p>
20+
</form>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<doctype html>
2+
<title>List of users - Python Flask MySQL CRUD</title>
3+
4+
<p><a href="{{ url_for('.add_user_view') }}"> Add User </a></p>
5+
6+
<p>
7+
{% with messages = get_flashed_messages() %}
8+
{% if messages %}
9+
<ul class=flashes>
10+
{% for message in messages %}
11+
<li>{{ message }}</li>
12+
{% endfor %}
13+
</ul>
14+
{% endif %}
15+
{% endwith %}
16+
</p>
17+
18+
{{ table }}

0 commit comments

Comments
 (0)
Please sign in to comment.