Migrate app to use WTForms for auth form validation

- Not finished yet, major styling breakage in this commit
- Also encapsulated GET & POST requests of /login and /signup routes into one route.
This commit is contained in:
Xevion
2022-03-29 02:30:19 -05:00
parent 2e8688f59b
commit 3b5307ab47
11 changed files with 148 additions and 159 deletions

View File

@@ -11,7 +11,7 @@
<a href="{{ url_for('main.edit_user', username=current_user.username) }}"><i class="fas fa-cog fa-1x"></i></a>
| <a href="{{ url_for('auth.logout') }}">Logout</a>
{% else %}
<a href="{{ url_for('main.login') }}">Login</a> or <a href="{{ url_for('main.signup') }}">Sign-up</a>!
<a href="{{ url_for('auth.login') }}">Login</a> or <a href="{{ url_for('auth.signup') }}">Sign-up</a>!
{% endif %}
</div>
</div>

View File

@@ -1,12 +1,14 @@
{% macro render_field(field) %}
<dt>{{ field.label }}
<dd>{{ field(**kwargs)|safe }}
{% if field.errors %}
<ul class=errors>
{% for error in field.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</dd>
<field>
<label>{{ field.label }}</label>
{{ field(**kwargs)|safe }}
{% if field.errors %}
<ul class=errors>
{% for error in field.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
<br>
</field>
{% endmacro %}

View File

@@ -1,4 +1,6 @@
{% extends 'layouts/index.html' %}
{% from 'macros.html' import render_field %}
{% block content %}
{% with messages = get_flashed_messages() %}
{% if messages %}
@@ -7,29 +9,14 @@
</span>
{% endif %}
{% endwith %}
<form method="POST" action="{{ url_for('auth.login_post') }}" class="login-form">
<div class="field">
<div class="control">
Username
<input class="input is-large" type="text" name="username" placeholder="Username" autofocus="true">
</div>
</div>
<form method="POST" action="{{ url_for('auth.login') }}" class="login-form">
{{ render_field(form.username) }}
{{ render_field(form.password) }}
{{ render_field(form.remember_me) }}
<p><input type=submit value=Login>
<div class="field">
<div class="control">
Password
<input class="input is-large" type="password" name="password" placeholder="Password">
</div>
</div>
<div class="field">
<label class="checkbox">
<input type="checkbox">
Remember me
</label>
</div>
<button class="button">Login</button>
</form>
<p class="form-subtext">
Don't have a login? <a href="{{ url_for('main.signup') }}">Sign-up</a> instead!
Don't have a login? <a href="{{ url_for('auth.signup') }}">Sign-up</a> instead!
</p>
{% endblock content %}

View File

@@ -1,45 +1,19 @@
{% extends 'layouts/index.html' %}
{% from "macros.html" import render_field %}
{% block content %}
{% with messages = get_flashed_messages() %}
{% if messages %}
<span class="error-message">
{{ messages[0] }}. Go to <a href="{{ url_for('main.login') }}">login page</a>.
</span>
{% endif %}
{% endwith %}
<form method="POST" action="{{ url_for('auth.signup_post') }}" class="login-form">
<div class="field">
<div class="control">
Username
<input class="input" type="text" name="username" placeholder="Username" autofocus>
</div>
</div>
<div class="field">
<div class="control">
Name
<input class="input" type="text" name="name" placeholder="Name" autofocus>
</div>
</div>
<div class="field">
<div class="control">
Password
<input class="input" type="password" name="password" placeholder="Password">
</div>
</div>
<div class="field">
<div class="control">
Confirm Password
<input class="input" type="password" name="confirm" placeholder="Confirm Password">
</div>
</div>
<button>Sign Up</button>
<form method=post class="login-form">
<dl>
{{ render_field(form.username) }}
{{ render_field(form.name) }}
{{ render_field(form.password) }}
{{ render_field(form.confirm) }}
{{ render_field(form.accept_tos) }}
</dl>
<p><input type=submit value=Register>
</form>
<p class="form-subtext">
Already have a login? <a href="{{ url_for('main.login') }}">Login</a> instead!
Already have a login? <a href="{{ url_for('auth.login') }}">Login</a> instead!
</p>
{% endblock content %}