aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThibaut Horel <thibaut.horel@gmail.com>2012-11-08 22:22:36 +0100
committerThibaut Horel <thibaut.horel@gmail.com>2012-11-08 22:22:36 +0100
commit8ab3ac64902e3216feaf6333a6ab93a0175b8b51 (patch)
treec522a9cf9638305779339b2e4b2c8a63ac444cdc
parent3e83f67dd0f3e16631207596f849e0977aa6d020 (diff)
downloadfamille-flask-8ab3ac64902e3216feaf6333a6ab93a0175b8b51.tar.gz
User feature (view and edit profile)
-rw-r--r--famille.py38
-rw-r--r--schema.sql11
-rw-r--r--templates/user/edit.html57
-rw-r--r--templates/user/show.html15
4 files changed, 119 insertions, 2 deletions
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/<int:user_id>/')
@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 %}
+<form method="post" action="{{url_for('edit_user')}}" class="userform">
+<fieldset>
+<legend>Paramètres</legend>
+<p class="info">Laisser les champs vides si vous ne souhaitez pas changer de mot de passe.</p>
+
+<p>
+<label for="password">Nouveau mot de passe :</label>
+<input type="password" name="password" id="password"/><br/>
+
+<label for="confirm">Répéter le mot de passe :</label>
+<input type="password" name="password_confirm" id="confirm"/><br/>
+
+<label for="notify">Recevoir un mail lors<br/>d'une nouvelle actualité:</label>
+<input type="checkbox" name="notify" id="notify" {% if user.notify %}checked="checked"{% endif %} /> <br/>
+</p>
+</fieldset>
+
+<fieldset>
+<legend>Contact</legend>
+
+<p>
+<label for="email">Email <span class="info">(pour la famille)</span> :</label>
+<input type="text" id="email" name="email" size="25" value="{{user.email}}"/><br />
+
+<label for="phone">Téléphone :</label>
+<input type="text" id="phone" name="phone" size="15" value="{{user.phone}}"/><br />
+
+<label for="line1">Adresse <span class="info">(ligne 1)</span> :</label>
+<input type="text" id="line1" size="30" name="address_line1" value="{{user.address_line1}}"/><br />
+
+<label for="line2">Adresse <span class="info">(ligne 2)</span> :</label>
+<input type="text" id="line2" size="30" name="address_line2" value="{{user.address_line2}}"/><br />
+
+<label for="city_line">Ville, CP <span class="info">(dernière ligne)</span> :</label>
+<input type="text" id="city_line" size="30" name="address_city_line" value="{{user.address_city_line}}"/><br />
+</p>
+</fieldset>
+
+<fieldset>
+<legend>Informations personelles</legend>
+
+<p>
+<label for="birthday">Anniversaire <span class="info">(JJ/MM)</span> :</label>
+<input type="text" id="birthday" name="birthday" size="5" value="{{user.birthday}}" /><br/>
+
+<label for="nameday">Fête <span class="info">(JJ/MM)</span> :</label>
+<input type="text" id="nameday" name="nameday" size="5" value="{{user.nameday}}" /><br/>
+</p>
+</fieldset>
+<p class="submit"><input type="submit" id="submit" value="Enregistrer"/></p>
+</form>
+
+
+{% 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 %}
+<h1>{{user.user_name}}</h1>
+
+<table>
+ <tr><th>Email</th><td>{{user.email or ""}}</td></tr>
+ <tr><th>Téléphone</th><td>{{user.phone or ""}}</td></tr>
+ <tr><th>Anniversaire</th><td>{{user.birthday or ""}}</td></tr>
+ <tr><th>Fête</th><td>{{user.nameday or ""}}</td></tr>
+ <tr><th>Adresse</th><td>{{user.address_line1 or ""}}<br/>
+ {{user.address_line2 or ""}}<br/>
+ {{user.address_city_line or ""}}</td></tr>
+ <tr><th>Dernière connexion</th><td>{{user.last_seen|format_date}}</td></tr>
+{% endblock %}