From 8ab3ac64902e3216feaf6333a6ab93a0175b8b51 Mon Sep 17 00:00:00 2001 From: Thibaut Horel Date: Thu, 8 Nov 2012 22:22:36 +0100 Subject: User feature (view and edit profile) --- famille.py | 38 +++++++++++++++++++++++++++++++- schema.sql | 11 +++++++++- templates/user/edit.html | 57 ++++++++++++++++++++++++++++++++++++++++++++++++ templates/user/show.html | 15 +++++++++++++ 4 files changed, 119 insertions(+), 2 deletions(-) create mode 100644 templates/user/edit.html create mode 100644 templates/user/show.html diff --git a/famille.py b/famille.py index 1c2cdfc..e4174ca 100644 --- a/famille.py +++ b/famille.py @@ -127,7 +127,39 @@ def edit_news(news_id): @app.route('/user//') @login_required def view_user(user_id): - pass + user = query_db('SELECT * FROM users WHERE id= ?', (session['user_id'],), True) + return render_template("user/show.html", user=user) + +@app.route('/user/edit/', methods=['GET', 'POST']) +@login_required +def edit_user(): + if request.method == 'GET': + user = query_db('SELECT * FROM users WHERE id= ?', (session['user_id'],), + True) + user = {k: user[k] for k in user.keys() if user[k]} + return render_template("user/edit.html", user=user) + elif request.method == 'POST': + result = {} + try: + if request.form['password'] == request.form['password_confirm']: + result['password'] =hashlib.md5(request.form['password']).hexdigest() + else: + error = u"Les deux mots de passe ne coïncident pas" + return render_template("user/edit.html", user=request.form, + error=error) + except KeyError: + pass + result["notify"] = 1 if "notify" in request.form else 0 + for key in ['email', 'phone', 'birthday', 'nameday', 'address_line1', + 'address_line2', 'address_city_line']: + result[key] = request.form[key].encode("utf8") + set_string = ",".join("'{}'='{}'".format(key, value) + for key,value in result.iteritems()) + print set_string + g.db.execute("UPDATE users SET {} where id=?".format(set_string), + (session['user_id'],)) + g.db.commit() + return redirect(url_for('view_user', user_id=session['user_id'])) @app.route('/login/', methods=['GET', 'POST']) def login(): @@ -143,6 +175,10 @@ def login(): if user['password'] == password: session['user_name'] = user['user_name'] session['user_id'] = user['id'] + g.db.execute("UPDATE users SET last_seen=? WHERE id=?", + (datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%SZ"), + session['user_id'])) + g.db.commit() return redirect(url_for('list_news')) else: error = u'Mot de passe incorrect' diff --git a/schema.sql b/schema.sql index 18ee95c..e0668c6 100644 --- a/schema.sql +++ b/schema.sql @@ -2,7 +2,16 @@ drop table if exists users; create table users ( id integer primary key autoincrement, user_name string not null, - password string not null + password string not null, + last_seen string default (strftime('%Y-%m-%dT%H:%M:%SZ','now')), + birthday string, + nameday string, + notify boolean default 1, + email string, + phone string, + address_line1, + address_line2, + address_city_line ); drop table if exists news; diff --git a/templates/user/edit.html b/templates/user/edit.html new file mode 100644 index 0000000..e9d151a --- /dev/null +++ b/templates/user/edit.html @@ -0,0 +1,57 @@ +{% extends 'layout.html' %} + +{% block content %} +
+
+Paramètres +

Laisser les champs vides si vous ne souhaitez pas changer de mot de passe.

+ +

+ +
+ + +
+ + +
+

+
+ +
+Contact + +

+ +
+ + +
+ + +
+ + +
+ + +
+

+
+ +
+Informations personelles + +

+ +
+ + +
+

+
+

+
+ + +{% endblock %} diff --git a/templates/user/show.html b/templates/user/show.html new file mode 100644 index 0000000..ef70a08 --- /dev/null +++ b/templates/user/show.html @@ -0,0 +1,15 @@ +{% extends "layout.html" %} + +{% block content %} +

{{user.user_name}}

+ + + + + + + + +{% endblock %} -- cgit v1.2.3-70-g09d2
Email{{user.email or ""}}
Téléphone{{user.phone or ""}}
Anniversaire{{user.birthday or ""}}
Fête{{user.nameday or ""}}
Adresse{{user.address_line1 or ""}}
+ {{user.address_line2 or ""}}
+ {{user.address_city_line or ""}}
Dernière connexion{{user.last_seen|format_date}}