Skip to main content

Run a Django backend (Django ORM, Django Admin) alongside a Reflex app.

Project description

reflex-django

Keep Django. Get a reactive UI in Python. One process, shared cookies, native Reflex dev.

PyPI Python Docs License

Documentation · GitHub · PyPI


What is it?

You love Django. You also want a modern, reactive UI in Python, not a separate React repo.

reflex-django runs Django and Reflex together. Reflex config lives in settings.py. Pages live in views.py. The SPA catch-all mounts automatically. The session from /admin/login/ is the same session your Reflex handlers see.

  • One commandpython manage.py run_reflex
  • Same cookiesself.request.user inside every @rx.event
  • Same middleware — your full settings.MIDDLEWARE chain on events
  • Two dev ports — Vite on :3000, backend on :8000 (proxies wire admin/API for you)

Minimal setup

uv add django reflex reflex-django

config/settings.py:

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "reflex_django",
    "shop",
]

MIDDLEWARE = [
    "django.middleware.security.SecurityMiddleware",
    "django.contrib.sessions.middleware.SessionMiddleware",
    "django.middleware.common.CommonMiddleware",
    "django.middleware.csrf.CsrfViewMiddleware",
    "django.contrib.auth.middleware.AuthenticationMiddleware",
    "django.contrib.messages.middleware.MessageMiddleware",
    "django.middleware.clickjacking.XFrameOptionsMiddleware",
    "reflex_django.bridge.streaming.AsyncStreamingMiddleware",
]

REFLEX_DJANGO_RX_CONFIG = {
    "app_name": "shop",
    "frontend_port": 3000,
    "backend_port": 8000,
}

config/urls.py:

import shop.views  # noqa: F401

from django.contrib import admin
from django.urls import path

urlpatterns = [path("admin/", admin.site.urls)]

config/asgi.py:

import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")

from reflex_django.asgi.entry import application  # noqa: E402,F401

shop/views.py:

import reflex as rx
from reflex_django.pages.decorators import page
from reflex_django.states import AppState


class HomeState(AppState):
    @rx.event
    async def on_load(self):
        user = self.request.user
        self.greeting = (
            f"Hi, {user.get_username()}!"
            if user.is_authenticated
            else "Hello, guest. Log in at /admin/."
        )


@page(route="/", title="Home", on_load=HomeState.on_load)
def index() -> rx.Component:
    return rx.vstack(
        rx.heading("My Shop"),
        rx.text(HomeState.greeting),
    )

Run:

python manage.py migrate
python manage.py run_reflex

Open http://localhost:3000/ for the Reflex UI. Admin at http://localhost:8000/admin/ (or via :3000 when Vite proxies are active).


Read the docs

Start here on the docs site:

  1. Learning path — pick your route from zero to shipping
  2. Your first app — 15-minute todo tutorial
  3. Troubleshooting — when ports, proxies, or CSRF fight back

More essentials:

Full site: https://web7ai.github.io/reflex-django/


Versions

Version
Python 3.12+
Django 6.0+
Reflex 0.9.4+

Common commands

python manage.py run_reflex
python manage.py run_reflex --env dev      # single-port compile dev
python manage.py export_reflex             # build SPA for deploy
python manage.py migrate
python manage.py createsuperuser

Author: Mohannad Irshedat · GitHub · Docs

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

reflex_django-2.0.0.tar.gz (260.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

reflex_django-2.0.0-py3-none-any.whl (245.7 kB view details)

Uploaded Python 3

File details

Details for the file reflex_django-2.0.0.tar.gz.

File metadata

  • Download URL: reflex_django-2.0.0.tar.gz
  • Upload date:
  • Size: 260.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.0 {"installer":{"name":"uv","version":"0.11.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for reflex_django-2.0.0.tar.gz
Algorithm Hash digest
SHA256 f444f7e8bebe38ce2ecf745bdba7b38c03a4adfdde8e7ca9472f1796e9b01d60
MD5 357e9c41bb8610e3e0bcb326555e4b43
BLAKE2b-256 6ccad5eaf0937aa96ae3e76befc4074b19415ec7ccddb9ff246748653c4d4da5

See more details on using hashes here.

File details

Details for the file reflex_django-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: reflex_django-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 245.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.0 {"installer":{"name":"uv","version":"0.11.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for reflex_django-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ffc4369c3898634290700da2f9cc99111db7bd10ec020a5dfd959737b386295b
MD5 83545162ba524e28023bbf1ce82c3f4f
BLAKE2b-256 5100d38dfa4f31209bd6efbecf6a3ef68389198e9201fe867a2e648d7ae7b08f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page