rustango 0.43.1

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 body %}
<h1>{{ admin_title | default(value='Rustango Admin') }}</h1>
<div class="index-shell">
<div class="index-main">
{% if models | length == 0 %}
<p><em>No models registered.</em></p>
{% else %}
{% for group in groups %}
<section>
  <h2>{{ group.app }}</h2>
  <table>
    <thead>
      <tr><th>Model</th><th>Table</th><th>Fields</th></tr>
    </thead>
    <tbody>
    {% for m in group.models %}
      <tr>
        <td><a href="{{ admin_prefix }}/{{ m.table }}">{{ m.name }}</a></td>
        <td>{{ m.table }}</td>
        <td>{{ m.field_count }}</td>
      </tr>
    {% endfor %}
    </tbody>
  </table>
</section>
{% endfor %}
{% endif %}
</div>
{% if recent_actions and recent_actions | length > 0 %}
<aside class="recent-actions">
  <h3>Recent actions</h3>
  <ul>
  {% for a in recent_actions %}
    <li>
      <strong>{{ a.operation }}</strong>
      <a href="{{ a.url }}">{{ a.table }}/{{ a.pk }}</a>
      <small>{{ a.occurred_at }}{% if a.source %} &middot; {{ a.source }}{% endif %}</small>
    </li>
  {% endfor %}
  </ul>
</aside>
{% endif %}
</div>
{% endblock body %}