rustango 0.40.0

Django-shaped 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" style="
            padding: var(--space-2) var(--space-3);
            background: color-mix(in srgb, var(--color-success, #2a7) 14%, transparent);
            border: 1px solid var(--color-success, #2a7);
            border-radius: var(--radius);
            color: var(--color-success, #2a7);">{{ success }}</p>
    {% endif %}
    {% if error %}
        <p class="error" style="
            padding: var(--space-2) var(--space-3);
            background: color-mix(in srgb, var(--color-danger, #d33) 14%, transparent);
            border: 1px solid var(--color-danger, #d33);
            border-radius: var(--radius);
            color: var(--color-danger, #d33);">{{ error }}</p>
    {% endif %}
    <form method="post" action="{{ action }}">
        <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 %}