rustango 0.60.0

Batteries-included web framework for Rust: ORM + migrations + auto-admin + multi-tenancy + audit log + auth (sessions, JWT, OAuth2/OIDC, HMAC) + APIs (ViewSet, OpenAPI auto-derive, JSON:API) + jobs (in-mem + Postgres) + email + media (S3 / R2 / B2 / MinIO + presigned uploads + collections + tags) + production middleware (CSRF, CSP, rate-limiting, compression, idempotency, etc.).
Documentation
{% extends "base.html" %}
{% block title %}
    {{ title }} — {{ admin_title }}
{% endblock title %}
{% block body %}
    <nav class="breadcrumb" aria-label="breadcrumb">
        <ol>
            <li>
                <a href="{{ admin_prefix }}/">{{ admin_title }}</a>
            </li>
            <li>
                <strong>{{ title }}</strong>
            </li>
        </ol>
    </nav>
    <h1>{{ title }}</h1>
    {% if success %}
        <p class="success flash">{{ success }}</p>
    {% endif %}
    {% if error %}
        <p class="error flash">{{ error }}</p>
    {% endif %}
    <form method="post" action="{{ action }}">
        {{ csrf_input | safe }}
        <fieldset class="form-fieldset">
            <table>
                <tr>
                    <th>
                        <label for="current_password">Current password</label>
                    </th>
                    <td>
                        <input id="current_password"
                               type="password"
                               name="current_password"
                               autocomplete="current-password"
                               required>
                    </td>
                </tr>
                <tr>
                    <th>
                        <label for="new_password">New password</label>
                    </th>
                    <td>
                        <input id="new_password"
                               type="password"
                               name="new_password"
                               autocomplete="new-password"
                               minlength="8"
                               required>
                        <p>
                            <small>At least 8 characters.</small>
                        </p>
                    </td>
                </tr>
                <tr>
                    <th>
                        <label for="new_password_confirm">Confirm new password</label>
                    </th>
                    <td>
                        <input id="new_password_confirm"
                               type="password"
                               name="new_password_confirm"
                               autocomplete="new-password"
                               minlength="8"
                               required>
                    </td>
                </tr>
            </table>
        </fieldset>
        <div class="action-row form-submit-row">
            <button type="submit" class="btn btn-primary">Change password</button>
        </div>
    </form>
{% endblock body %}