added profile page
This commit is contained in:
parent
124adf5580
commit
355ff7aac8
|
@ -2,6 +2,7 @@ CREATE TABLE `users` (
|
|||
`user_id` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`username` VARCHAR(20) NOT NULL,
|
||||
`password_hash` CHAR(73) NOT NULL,
|
||||
`signup_date` INT UNSIGNED NOT NULL,
|
||||
PRIMARY KEY (`user_id`)
|
||||
) ENGINE=InnoDB CHARSET utf8mb4;
|
||||
|
||||
|
|
26
database.py
26
database.py
|
@ -41,7 +41,7 @@ class Database():
|
|||
_DB = Database()
|
||||
|
||||
|
||||
def add_user(username, password):
|
||||
def add_user(username, password, timestamp):
|
||||
"""
|
||||
Adds a user to the database.
|
||||
"""
|
||||
|
@ -52,8 +52,8 @@ def add_user(username, password):
|
|||
|
||||
pw_hash = argon2.hash(password)
|
||||
_DB.execute(
|
||||
"INSERT INTO `users` (`username`, `password_hash`) VALUES (%s, %s)",
|
||||
(username, pw_hash))
|
||||
"INSERT INTO `users` (`username`, `password_hash`, `signup_date`) " \
|
||||
+ "VALUES (%s, %s, %s)", (username, pw_hash, timestamp))
|
||||
return "success"
|
||||
|
||||
|
||||
|
@ -151,3 +151,23 @@ def get_quest_data(quest_id):
|
|||
data = _DB.execute("SELECT * FROM `quest_data` WHERE `quest_id` = %s",
|
||||
(quest_id,)).fetchall()
|
||||
return data
|
||||
|
||||
|
||||
def get_user_info(username):
|
||||
"""
|
||||
Retrives relevant user data.
|
||||
"""
|
||||
data = _DB.execute(
|
||||
"SELECT `user_id`, `signup_date` FROM `users` WHERE `username` = %s",
|
||||
(username,)).fetchone()
|
||||
return data
|
||||
|
||||
|
||||
def get_user_quests(user_id):
|
||||
"""
|
||||
Retrieves all quests ran by a particular user_id.
|
||||
"""
|
||||
data = _DB.execute(
|
||||
"SELECT * FROM `quest_meta` WHERE `owner_id` = %s",
|
||||
(user_id,)).fetchall()
|
||||
return data
|
||||
|
|
7
templates/profile.html
Normal file
7
templates/profile.html
Normal file
|
@ -0,0 +1,7 @@
|
|||
{% extends "base.html" %}
|
||||
{% block title %}{{ username }}{% endblock %}
|
||||
{% block content %}
|
||||
<h1>{{ username }}'s profile</h1>
|
||||
Signed up: {{ signup_date | strftime }}<br />
|
||||
Num. quests ran: {{ num_quests }}<br />
|
||||
{% endblock %}
|
33
views.py
33
views.py
|
@ -71,6 +71,22 @@ def quest(quest_title):
|
|||
messages=messages)
|
||||
|
||||
|
||||
@views.route("/profile/<path:username>")
|
||||
def profile(username):
|
||||
"""
|
||||
Shows the profile page of the specified user.
|
||||
"""
|
||||
data = db.get_user_info(username)
|
||||
if not data:
|
||||
return "user_not_found"
|
||||
user_id, signup_date = data
|
||||
quests = db.get_user_quests(user_id)
|
||||
return render_template("profile.html",
|
||||
username=username,
|
||||
signup_date=signup_date,
|
||||
num_quests=len(quests))
|
||||
|
||||
|
||||
@views.route("/create_quest", methods=["GET", "POST"])
|
||||
@login_required(".login")
|
||||
def create_quest():
|
||||
|
@ -147,24 +163,25 @@ def signup():
|
|||
password_verify = request.form.get("pass_verify")
|
||||
|
||||
if len(username) > 20:
|
||||
"username_too_long"
|
||||
return "username_too_long"
|
||||
elif len(username) < 3:
|
||||
"username_too_short"
|
||||
return "username_too_short"
|
||||
chrs = [c not in string.ascii_letters + string.digits for c in username]
|
||||
if any(chrs):
|
||||
"username_bad_chars"
|
||||
return "username_bad_chars"
|
||||
if db.verify_username(username):
|
||||
"username_taken"
|
||||
return "username_taken"
|
||||
|
||||
if len(password) > 1024:
|
||||
"password_too_long"
|
||||
return "password_too_long"
|
||||
elif len(password) < 8:
|
||||
"password_too_short"
|
||||
return "password_too_short"
|
||||
|
||||
if password != password_verify:
|
||||
"passwords_dont_match"
|
||||
return "passwords_dont_match"
|
||||
|
||||
res = db.add_user(username, password)
|
||||
timestamp = int(time.time())
|
||||
res = db.add_user(username, password, timestamp)
|
||||
return redirect(url_for(".index"))
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user