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",
]

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 django.core.asgi import get_asgi_application

application = get_asgi_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. Getting started — install, quickstart, project layout
  2. Your first app — todo tutorial
  3. Troubleshooting — ports, proxies, CSRF

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.1.tar.gz (246.8 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.1-py3-none-any.whl (230.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: reflex_django-2.0.1.tar.gz
  • Upload date:
  • Size: 246.8 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.1.tar.gz
Algorithm Hash digest
SHA256 a6f7860842f52586cab4e7dbaa7d5104fc75ab12e179e13d2ab4d9b7a11c7d43
MD5 357ea08c7f85a4cda16d84da1f5b1535
BLAKE2b-256 855086206e98a6bd93f9a38db399ddd039f48b9a06c834a1f56592efbcce837b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: reflex_django-2.0.1-py3-none-any.whl
  • Upload date:
  • Size: 230.2 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 7b7649f48c4c71b97c3d09f6571f8741a83cd1612fff0bb4b06c88dd818bdea4
MD5 559246d3e6730856c40cf4bdbb74500f
BLAKE2b-256 d85b8576aa4d5478f9aa805d4d2433b798800cca9fd7a5e5f55bfeb518e2e9eb

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