diff --git a/app/forms.py b/app/forms.py index c9815bf..0a135a6 100644 --- a/app/forms.py +++ b/app/forms.py @@ -60,3 +60,13 @@ class UpdateAccountForm(FlaskForm): newsletter = BooleanField('Inscription à la newsletter', description='Un mail par trimestre environ, pour être prévenu des concours, évènements et nouveautés.') old_password = PasswordField('Ancien mot de passe :', validators=[DataRequired(), verify_authentication]) submit = SubmitField('Mettre à jour') + +# TODO: compléter le formulaire de recherche avancée +class AdvancedSearchForm(FlaskForm): + q = StringField('Rechercher :', validators=[DataRequired()]) + date = DateField('Date', validators=[Optional()]) + submit = SubmitField('Affiner la recherche') + +class SearchForm(FlaskForm): + q = StringField('Rechercher', validators=[DataRequired()]) + \ No newline at end of file diff --git a/app/routes.py b/app/routes.py index a8f89a9..a557daa 100644 --- a/app/routes.py +++ b/app/routes.py @@ -2,7 +2,7 @@ from flask import render_template, flash, redirect, url_for, request from flask_login import login_user, logout_user, current_user, login_required from werkzeug.urls import url_parse from app import app, db -from app.forms import LoginForm, RegistrationForm, UpdateAccountForm +from app.forms import LoginForm, RegistrationForm, UpdateAccountForm, SearchForm, AdvancedSearchForm from app.models.users import Member # Ce truc c'est la vie ! @@ -13,7 +13,9 @@ def _render_template(*args, **kwargs): # return render_template(*args, **kwargs, login_form=login_form) # return render_template(*args, **kwargs) login_form = LoginForm() - return render_template(*args, **kwargs, login_form=login_form) + search_form = SearchForm() + return render_template(*args, **kwargs, + login_form=login_form, search_form=search_form) @app.route('/') @@ -23,17 +25,24 @@ def index(): @app.route('/login', methods=['GET', 'POST']) def login(): - if request.method == 'GET': - return redirect(url_for('index')) - login_form = LoginForm() - if login_form.validate_on_submit(): - member = Member.query.filter_by(name=login_form.username.data).first() - if member is None or not member.check_password(login_form.password.data): + form = LoginForm() + if form.validate_on_submit(): + member = Member.query.filter_by(name=form.username.data).first() + if member is None or not member.check_password(form.password.data): flash('Pseudo ou mot de passe invalide', 'error') return redirect(request.referrer) - login_user(member, remember=login_form.remember_me.data) + login_user(member, remember=form.remember_me.data) flash('Connexion réussie', 'info') - return redirect(request.referrer) + r = request.args.get('next') + if r: + # TODO : prevent OpenRedirect security issues + return redirect(r) + else: + try: + return redirect(request.referer) + except: + return redirect(url_for('index')) + return _render_template('login.html', form=form) @app.route('/logout') def logout(): @@ -44,9 +53,10 @@ def logout(): @app.route('/account', methods=['GET', 'POST']) def account(): + # TODO: utiliser le décorateur @login_required if not current_user.is_authenticated: flash('Veuillez vous authentifier', 'warning') - return redirect(url_for('index')) + return redirect(url_for('login', next=url_for('account'))) form = UpdateAccountForm() if request.method == "POST": if form.validate_on_submit(): @@ -83,3 +93,8 @@ def validation(): if current_user.is_authenticated : return redirect(url_for('index')) return _render_template('validation.html') + +@app.route('/search') +def search(): + form = AdvancedSearchForm() + return _render_template('search.html', form=form) diff --git a/app/static/css/register.css b/app/static/css/register.css deleted file mode 100644 index 9e540c7..0000000 --- a/app/static/css/register.css +++ /dev/null @@ -1,49 +0,0 @@ -#register { - width: 30%; min-width: 350px; - margin: auto; -} - -#register form > div { - margin-bottom: 15px; -} - -#register form > div > label { - display: inline-block; - margin-bottom: 5px; -} - -#register form > div > input[type='text'], -#register form > div > input[type='email'], -#register form > div > input[type='date'], -#register form > div > input[type='password'], -#register form > div > textarea { - display: block; - width: 100%; padding: 6px 2.5%; - border: 1px solid #abcdef; -} -#register form > div > input[type='text']:focus, -#register form > div > input[type='email']:focus, -#register form > div > input[type='date']:focus, -#register form > div > input[type='password']:focus, -#register form > div > textarea:focus { - box-shadow: 0 0 4px rgba(0, 102, 255, .9); -} - -#register input[type="submit"] { - width: 100%; - background-color: #149641; - border-color: #0e692d; - color: #ffffff; -} -#register input[type="submit"]:hover, -#register input[type="submit"]:focus, -#register input[type="submit"]:active { - background-color: #0f7331; - border-color: #073617; -} - -#register form .msgerror { - color: red; - font-weight: 400; - margin-top: 5px; -} \ No newline at end of file diff --git a/app/templates/base/head.html b/app/templates/base/head.html index a33650f..a3fe2eb 100644 --- a/app/templates/base/head.html +++ b/app/templates/base/head.html @@ -13,6 +13,4 @@ - - diff --git a/app/templates/base/header.html b/app/templates/base/header.html index 2d4558e..b0e9837 100644 --- a/app/templates/base/header.html +++ b/app/templates/base/header.html @@ -1,6 +1,6 @@
-
- + + diff --git a/app/templates/base/navbar/account.html b/app/templates/base/navbar/account.html index f776200..d69ba41 100644 --- a/app/templates/base/navbar/account.html +++ b/app/templates/base/navbar/account.html @@ -49,7 +49,7 @@

Invité

- + {{ login_form.hidden_tag() }} {{ login_form.username(size=32, placeholder="Identifiant") }} {{ login_form.password(size=32, placeholder="Mot de passe") }} diff --git a/app/templates/login.html b/app/templates/login.html index b098caa..110441d 100644 --- a/app/templates/login.html +++ b/app/templates/login.html @@ -1,25 +1,27 @@ -{% extends "container.html" %} +{% extends "base/container.html" %} {% block content %} -

Sign In

- - {{ login_form.hidden_tag() }} -

- {{ login_form.username.label }}
- {{ login_form.username(size=32) }}
- {% for error in login_form.username.errors %} - [{{ error }}] - {% endfor %} -

-

- {{ login_form.password.label }}
- {{ login_form.password(size=32) }}
- {% for error in login_form.password.errors %} - [{{ error }}] - {% endfor %} -

-

{{ login_form.remember_me() }} {{ login_form.remember_me.label }}

-

{{ login_form.submit() }}

+
+

Sign In

+ + {{ form.hidden_tag() }} +

+ {{ form.username.label }}
+ {{ form.username(size=32) }}
+ {% for error in form.username.errors %} + [{{ error }}] + {% endfor %} +

+

+ {{ form.password.label }}
+ {{ form.password(size=32) }}
+ {% for error in form.password.errors %} + [{{ error }}] + {% endfor %} +

+

{{ form.remember_me() }} {{ form.remember_me.label }}

+

{{ form.submit() }}

+ +

New User? Click to Register!

-

New User? Click to Register!

{% endblock %} diff --git a/app/templates/search.html b/app/templates/search.html new file mode 100644 index 0000000..1a7951e --- /dev/null +++ b/app/templates/search.html @@ -0,0 +1,19 @@ +{% extends "base/container.html" %} + +{% block content %} +
+

Recherche avancée :

+ +
+
+ {{ form.q.label }} + {{ form.q(value=request.args.get('q')) }} +
+
+ {{ form.date.label }} + {{ form.date }} +
+
{{ form.submit(class_="bg-green") }}
+
+
+{% endblock %}