<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Django Unleashed - Medium]]></title>
        <description><![CDATA[Unleashing the Full Potential of Web Development - Medium]]></description>
        <link>https://medium.com/django-unleashed?source=rss----401bc7164e65---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Django Unleashed - Medium</title>
            <link>https://medium.com/django-unleashed?source=rss----401bc7164e65---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 15:54:41 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/django-unleashed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Global Exception Handling in Django: A Centralized Approach to Clean Error Responses]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-snippet">If you&#x2019;ve built a few Django REST Framework (DRF) APIs, you&#x2019;ve probably written code like this countless times:</p><p class="medium-feed-link"><a href="https://medium.com/django-unleashed/global-exception-handling-in-django-a-centralized-approach-to-clean-error-responses-a151ae00739a?source=rss----401bc7164e65---4">Continue reading on Django Unleashed »</a></p></div>]]></description>
            <link>https://medium.com/django-unleashed/global-exception-handling-in-django-a-centralized-approach-to-clean-error-responses-a151ae00739a?source=rss----401bc7164e65---4</link>
            <guid isPermaLink="false">https://medium.com/p/a151ae00739a</guid>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[django-rest-framework]]></category>
            <category><![CDATA[backend-development]]></category>
            <category><![CDATA[django]]></category>
            <category><![CDATA[python]]></category>
            <dc:creator><![CDATA[Akshat Gadodia]]></dc:creator>
            <pubDate>Mon, 05 Oct 2026 06:37:49 GMT</pubDate>
            <atom:updated>2026-10-07T11:13:01.920Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[A Button That Sends Command+Shift+3]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/django-unleashed/a-button-that-sends-command-shift-3-2e5a1c6da8e0?source=rss----401bc7164e65---4"><img src="https://cdn-images-1.medium.com/max/2000/1*PIlctxGIPTuCSnjqSgfuYA.png" width="2000"></a></p><p class="medium-feed-snippet">So I built a tiny remote out of an ESP32-C3. It shows up as a keyboard named Screenshot Remote, pairs once with the iPad, and types&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/django-unleashed/a-button-that-sends-command-shift-3-2e5a1c6da8e0?source=rss----401bc7164e65---4">Continue reading on Django Unleashed »</a></p></div>]]></description>
            <link>https://medium.com/django-unleashed/a-button-that-sends-command-shift-3-2e5a1c6da8e0?source=rss----401bc7164e65---4</link>
            <guid isPermaLink="false">https://medium.com/p/2e5a1c6da8e0</guid>
            <category><![CDATA[micropython]]></category>
            <category><![CDATA[touch]]></category>
            <category><![CDATA[esp32]]></category>
            <category><![CDATA[18650]]></category>
            <category><![CDATA[python]]></category>
            <dc:creator><![CDATA[Nuno Bispo]]></dc:creator>
            <pubDate>Mon, 28 Sep 2026 06:59:29 GMT</pubDate>
            <atom:updated>2026-09-28T06:59:28.933Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[I Installed Free-Threaded Python — The GIL Came Back Anyway]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/django-unleashed/i-installed-free-threaded-python-the-gil-came-back-anyway-6e53989f2559?source=rss----401bc7164e65---4"><img src="https://cdn-images-1.medium.com/max/1546/1*Gm7i6dspugrkgC_Hc14nEg.png" width="1546"></a></p><p class="medium-feed-snippet">Python 3.14 made the free-threaded build officially supported. Nice change log line.</p><p class="medium-feed-link"><a href="https://medium.com/django-unleashed/i-installed-free-threaded-python-the-gil-came-back-anyway-6e53989f2559?source=rss----401bc7164e65---4">Continue reading on Django Unleashed »</a></p></div>]]></description>
            <link>https://medium.com/django-unleashed/i-installed-free-threaded-python-the-gil-came-back-anyway-6e53989f2559?source=rss----401bc7164e65---4</link>
            <guid isPermaLink="false">https://medium.com/p/6e53989f2559</guid>
            <category><![CDATA[python]]></category>
            <category><![CDATA[free-thread]]></category>
            <category><![CDATA[free-threaded-python]]></category>
            <category><![CDATA[gil]]></category>
            <dc:creator><![CDATA[Nuno Bispo]]></dc:creator>
            <pubDate>Mon, 21 Sep 2026 07:13:50 GMT</pubDate>
            <atom:updated>2026-09-21T07:13:49.928Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Why request.user Isn't Available in Django Middleware When Using JWT (And How to Fix It)]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/django-unleashed/why-request-user-isnt-available-in-django-middleware-when-using-jwt-and-how-to-fix-it-41e93d1b11af?source=rss----401bc7164e65---4"><img src="https://cdn-images-1.medium.com/max/632/1*hrKpq7FFdR-zPSpMUWP78Q.png" width="632"></a></p><p class="medium-feed-snippet">Django REST Framework (DRF) and JWT authentication are a popular combination for building modern APIs. But many developers run into a&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/django-unleashed/why-request-user-isnt-available-in-django-middleware-when-using-jwt-and-how-to-fix-it-41e93d1b11af?source=rss----401bc7164e65---4">Continue reading on Django Unleashed »</a></p></div>]]></description>
            <link>https://medium.com/django-unleashed/why-request-user-isnt-available-in-django-middleware-when-using-jwt-and-how-to-fix-it-41e93d1b11af?source=rss----401bc7164e65---4</link>
            <guid isPermaLink="false">https://medium.com/p/41e93d1b11af</guid>
            <category><![CDATA[python]]></category>
            <category><![CDATA[django]]></category>
            <category><![CDATA[django-rest-framework]]></category>
            <category><![CDATA[authentication]]></category>
            <category><![CDATA[web-development]]></category>
            <dc:creator><![CDATA[Akshat Gadodia]]></dc:creator>
            <pubDate>Fri, 18 Sep 2026 10:24:46 GMT</pubDate>
            <atom:updated>2026-10-07T11:13:06.403Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Django Connection Pooling in Production: Built-In Pooling vs PgBouncer (And When You Still Need…]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/django-unleashed/django-connection-pooling-in-production-built-in-pooling-vs-pgbouncer-and-when-you-still-need-12283f769f45?source=rss----401bc7164e65---4"><img src="https://cdn-images-1.medium.com/max/738/1*HZXBEQdquPv3R9MbluUidA.jpeg" width="738"></a></p><p class="medium-feed-snippet">Database connections are expensive resources.</p><p class="medium-feed-link"><a href="https://medium.com/django-unleashed/django-connection-pooling-in-production-built-in-pooling-vs-pgbouncer-and-when-you-still-need-12283f769f45?source=rss----401bc7164e65---4">Continue reading on Django Unleashed »</a></p></div>]]></description>
            <link>https://medium.com/django-unleashed/django-connection-pooling-in-production-built-in-pooling-vs-pgbouncer-and-when-you-still-need-12283f769f45?source=rss----401bc7164e65---4</link>
            <guid isPermaLink="false">https://medium.com/p/12283f769f45</guid>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[system-design-interview]]></category>
            <category><![CDATA[django]]></category>
            <category><![CDATA[database]]></category>
            <category><![CDATA[backend-development]]></category>
            <dc:creator><![CDATA[Akshat Gadodia]]></dc:creator>
            <pubDate>Fri, 18 Sep 2026 10:24:43 GMT</pubDate>
            <atom:updated>2026-10-07T09:04:59.936Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[FastAPI Instead of Django REST Framework: When Should You Make the Switch?]]></title>
            <link>https://medium.com/django-unleashed/fastapi-instead-of-django-rest-framework-when-should-you-make-the-switch-f94776f55262?source=rss----401bc7164e65---4</link>
            <guid isPermaLink="false">https://medium.com/p/f94776f55262</guid>
            <category><![CDATA[django]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[django-rest-framework]]></category>
            <category><![CDATA[fastapi]]></category>
            <category><![CDATA[api]]></category>
            <dc:creator><![CDATA[Osirus Djodji]]></dc:creator>
            <pubDate>Fri, 11 Sep 2026 19:00:30 GMT</pubDate>
            <atom:updated>2026-09-11T16:19:09.736Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/836/1*IdxgL2x8sAaKGYq8EhhUTg@2x.jpeg" /></figure><p>Django REST Framework has been one of the most popular choices for building APIs with Python for years.</p><p>It is mature, well documented, and deeply integrated with Django’s ORM, authentication, permissions, serializers, and admin ecosystem.</p><p>But then FastAPI arrived.</p><p>FastAPI quickly became popular for building modern APIs, particularly for microservices, asynchronous applications, AI systems, and high-performance backends.</p><p>This raises an increasingly common question:</p><p>Should I use FastAPI instead of Django REST Framework?</p><p>The answer is more nuanced than simply comparing benchmark numbers.</p><p>The real question is:</p><p>What kind of application are you building?</p><p>Let’s compare the two from an architectural perspective.</p><p>Django REST Framework vs FastAPI</p><p>At first glance, they solve a similar problem.</p><p>Both allow you to build APIs with Python.</p><p>But they come from very different philosophies.</p><p>Django REST Framework extends Django.</p><p>Django</p><pre>Django<br>   │<br>   ├── ORM<br>   ├── Authentication<br>   ├── Admin<br>   ├── Middleware<br>   ├── Models<br>   └── Django REST Framework<br>             │<br>             └── API</pre><p>FastAPI takes a more lightweight approach:</p><pre>FastAPI<br>   │<br>   ├── Pydantic<br>   ├── Starlette<br>   ├── Dependency Injection<br>   └── Your database layer</pre><p>FastAPI doesn’t try to provide an entire application ecosystem.</p><p>And that’s precisely one of its strengths.</p><ol><li>Start With the Architecture</li><li>The biggest difference isn’t performance.</li><li>It’s architecture.</li><li>With Django REST Framework, you’re usually building inside a Django application.</li><li>For example:</li></ol><pre>class Order(models.Model):<br>    customer = models.ForeignKey(Customer, ...)<br>    amount = models.DecimalField(...)<br>    created_at = models.DateTimeField(...)</pre><p>Then your API sits naturally on top:</p><pre>class OrderViewSet(ModelViewSet):<br>    queryset = Order.objects.all()<br>    serializer_class = OrderSerializer</pre><p>You get a lot for free.</p><p>FastAPI doesn’t impose an ORM or application architecture.</p><p>You can choose:</p><ul><li>SQLAlchemy</li><li>SQLModel</li><li>Tortoise ORM</li><li>MongoDB</li><li>PostgreSQL directly</li><li>Another data access layer</li></ul><p>That flexibility is powerful.</p><p>But it also means you have more architectural decisions to make.</p><h3><strong>2. Django REST Framework Wins When Django Is Already Your Platform</strong></h3><p>If you’re already using Django, DRF is often the obvious choice.</p><p>Imagine your application already has:</p><pre>Users<br>Organizations<br>Permissions<br>Admin<br>Models<br>Billing<br>Notifications<br>Background jobs<br>Reports</pre><p>Replacing DRF with FastAPI doesn’t automatically make this application better.</p><p>You would potentially need to reproduce or integrate many existing Django capabilities.</p><p>DRF gives you direct access to:</p><pre>request.user</pre><p>Django permissions:</p><pre>permission_classes = [<br>    IsAuthenticated<br>]</pre><p>And the ORM:</p><pre>Order.objects.filter(<br>    customer=request.user<br>)</pre><p>That’s a tremendous productivity advantage.</p><h3>3. FastAPI Shines in Focused Services</h3><p>Now imagine you’re building a service whose only responsibility is:</p><pre>Receive event<br>      ↓<br>Process data<br>      ↓<br>Return result</pre><p>For example:</p><ul><li>AI inference</li><li>IoT gateway</li><li>Hardware micro-agent</li><li>Machine telemetry</li><li>Image processing</li><li>Real-time data processing</li><li>Internal microservice</li></ul><p>You may not need:</p><ul><li>Django Admin</li><li>Django templates</li><li>Django authentication</li><li>Django’s entire application stack</li><li>FastAPI becomes very attractive.</li></ul><p>A service can be incredibly small:</p><pre>from fastapi import FastAPI<br><br>app = FastAPI()<br><br>@app.get(&quot;/health&quot;)<br>async def health():<br>    return {&quot;status&quot;: &quot;ok&quot;}</pre><p>There is very little framework overhead.</p><h3>4. Async Changes the Conversation</h3><p>This is one of FastAPI’s strongest arguments.</p><p>FastAPI was designed with asynchronous Python applications in mind.</p><pre>@app.get(&quot;/devices&quot;)<br>async def devices():<br>    result = await read_devices()<br>    return result</pre><p>This is particularly useful for workloads involving a lot of I/O:</p><pre>API<br> │<br> ├── External API<br> ├── Database<br> ├── Hardware<br> ├── Message broker<br> └── Another service</pre><p>Instead of blocking while waiting for each operation, asynchronous code can efficiently manage concurrent I/O.</p><p>But there’s an important caveat.</p><p>Async doesn’t automatically make your application faster.</p><p>If your workload is primarily CPU-bound, simply adding async won’t solve the problem.</p><p>And Django has also evolved significantly in its support for asynchronous views and operations.</p><p>So the decision shouldn’t be based on the word “async” alone.</p><h3>5. Performance Isn’t the Only Metric</h3><p>FastAPI is frequently promoted through benchmarks.</p><p>And yes, FastAPI can deliver excellent performance.</p><p>But production API performance depends on much more than the framework.</p><p>Consider:</p><pre>Framework<br>   ↓<br>Database queries<br>   ↓<br>Serialization<br>   ↓<br>External APIs<br>   ↓<br>Caching<br>   ↓<br>Network</pre><p>An inefficient query can destroy the performance advantage of a lightweight framework.</p><p>This:</p><pre>Order.objects.all()</pre><p>followed by hundreds of unnecessary related-object queries can be far more damaging than the choice between DRF and FastAPI.</p><p>Good architecture beats framework benchmarks.</p><h3>6. Validation: Both Are Excellent</h3><p>FastAPI has a particularly elegant validation model.</p><p>Using Pydantic:</p><pre>from pydantic import BaseModel<br><br>class OrderCreate(BaseModel):<br>    customer_id: int<br>    amount: float</pre><p>FastAPI automatically validates incoming requests.</p><p>DRF has a similar concept with serializers:</p><pre>class OrderSerializer(serializers.ModelSerializer):<br><br>    class Meta:<br>        model = Order<br>        fields = [<br>            &quot;customer&quot;,<br>            &quot;amount&quot;<br>        ]</pre><p>Both approaches work well.</p><p>The difference is philosophy.</p><p>FastAPI heavily embraces Python type hints.</p><p>DRF is deeply integrated with Django models and serializers.</p><h3>7. Automatic API Documentation</h3><p>FastAPI is particularly impressive here.</p><p>Define:</p><pre>@app.post(&quot;/orders&quot;)<br>async def create_order(order: OrderCreate):<br>    ...</pre><p>FastAPI automatically generates OpenAPI documentation.</p><p>You get interactive documentation with minimal configuration.</p><p>DRF also provides excellent OpenAPI tooling, but depending on your project and tooling choices, documentation can require more configuration.</p><p>For teams that value API contracts heavily, FastAPI’s approach is extremely appealing.</p><h3>8. Authentication and Permissions</h3><p>This is where Django starts to pull ahead.</p><p>Django has an extensive ecosystem around:</p><ul><li>Users</li><li>Groups</li><li>Permissions</li><li>Sessions</li><li>Authentication</li><li>Admin</li><li>OAuth integrations</li><li>DRF builds directly on top of this.</li></ul><p>For example:</p><pre>class OrderViewSet(ModelViewSet):<br>    permission_classes = [<br>        IsAuthenticated<br>    ]</pre><p>You can then implement more sophisticated authorization:</p><pre>if request.user.role != &quot;admin&quot;:<br>    ...</pre><p>FastAPI has dependency injection, which is powerful:</p><pre>async def get_current_user():<br>    ...</pre><p>But you’re responsible for designing more of the authentication architecture.</p><p>This isn’t necessarily bad.</p><p>It simply means FastAPI gives you freedom instead of defaults.</p><h3>9. The Admin Interface Is a Major Django Advantage</h3><p>This is often underestimated.</p><p>Suppose your application contains:</p><pre>Customers<br>Orders<br>Invoices<br>Companies<br>Payments<br>Tickets<br>Notifications</pre><p>With Django, you can expose these through the admin interface relatively quickly.</p><pre>@admin.register(Order)<br>class OrderAdmin(admin.ModelAdmin):<br>    list_display = (<br>        &quot;id&quot;,<br>        &quot;customer&quot;,<br>        &quot;amount&quot;,<br>        &quot;status&quot;<br>    )</pre><p>You immediately get an operational interface.</p><p>FastAPI doesn’t provide an equivalent built-in administration system.</p><p>If your business needs an internal back office, Django’s ecosystem can save enormous development time.</p><h3>10. FastAPI Is Excellent for Microservices</h3><p>This is where the comparison becomes particularly interesting.</p><p>Instead of replacing Django completely, you can use both.</p><p>For example:</p><pre>                 Frontend<br>                    │<br>                    ▼<br>              Django / DRF<br>                    │<br>          ┌─────────┼──────────┐<br>          ▼         ▼          ▼<br>       FastAPI   FastAPI    FastAPI<br>        AI       IoT       Analytics</pre><p>Django becomes the main business platform.</p><p>FastAPI handles specialized workloads.</p><p>This is often more practical than choosing one framework for everything.</p><h3>11. A Hardware Example</h3><p>Django handles:</p><ul><li>Users</li><li>Organizations</li><li>Business logic</li><li>Permissions</li><li>Database</li><li>Reporting</li></ul><p>FastAPI handles:</p><ul><li>Hardware communication</li><li>Local device discovery</li><li>Real-time commands</li><li>Device events</li></ul><p>This separation makes a lot of sense.</p><h3>12. What About Analytics?</h3><p>The same principle applies to analytics.</p><p>Your Django application might contain your transactional models:</p><pre>Customer<br>Order<br>Payment<br>Invoice</pre><p>But a dedicated FastAPI service could provide:</p><pre>Analytics API<br>     │<br>     ├── Aggregations<br>     ├── Forecasting<br>     ├── Data processing<br>     └── External BI integration</pre><p>The frontend doesn’t necessarily care which framework powers the endpoint.</p><p>It only cares about the API contract.</p><h3>13. When Should You Choose DRF?</h3><p>Choose Django REST Framework when:</p><p><strong>Your application is already Django</strong></p><p>Don’t introduce another framework without a reason.</p><p><strong>You need a relational business application</strong></p><p>Especially when you have complex relationships and workflows.</p><p><strong>You need Django Admin</strong></p><p>This can dramatically reduce development time.</p><p><strong>You need mature authentication and permissions</strong></p><p>Django provides an extensive ecosystem.</p><p><strong>Your team knows Django</strong></p><p>Developer productivity matters more than theoretical benchmarks.</p><h3>14. When Should You Choose FastAPI?</h3><p>FastAPI is a strong choice when:</p><p><strong>You’re building a new API-only service</strong></p><p>Especially when you don’t need Django’s broader ecosystem.</p><p><strong>You have high I/O concurrency</strong></p><p>For example:</p><pre>API<br> ↓<br>External services<br> ↓<br>Message queues<br> ↓<br>Hardware</pre><p><strong>You need a lightweight microservice</strong></p><p>Small services benefit from minimal framework overhead.</p><p><strong>You want strong type-driven APIs</strong></p><p>Pydantic and Python type hints provide an excellent developer experience.</p><p><strong>You’re building AI or data services</strong></p><p>FastAPI has become particularly popular around ML inference and data-processing services.</p><h3>15. Don’t Choose Based on Performance Alone</h3><p>This is perhaps the most important lesson.</p><p>Don’t ask:</p><p>“Which framework is faster?”</p><p>Ask:</p><p>“Which framework makes this system easier to build, operate, and scale?”</p><p>A DRF application with:</p><pre>Good indexes<br>Efficient queries<br>Caching<br>Pagination<br>Background jobs<br>Proper architecture</pre><p>can outperform a poorly designed FastAPI application.</p><p>Likewise, a lightweight FastAPI service can be a much better choice for a focused high-concurrency workload.</p><h3>16. The Hybrid Approach</h3><p>For many organizations, the best answer isn’t:</p><p>Django or FastAPI.</p><p>It’s:</p><p>Django and FastAPI.</p><p>For example:</p><pre>                 Web / Mobile<br>                      │<br>                      ▼<br>                Django REST API<br>                      │<br>        ┌─────────────┼─────────────┐<br>        │             │             │<br>        ▼             ▼             ▼<br>    PostgreSQL    FastAPI       FastAPI<br>                  Analytics     Hardware<br>                      │             │<br>                      ▼             ▼<br>                  ML / BI       Devices</pre><p>Each technology does what it does best.</p><p>Django becomes the business platform.</p><p>FastAPI becomes the specialized service layer.</p><h3>The Real Question Isn’t “Which Is Better?”</h3><p>FastAPI isn’t the replacement for Django REST Framework.</p><p>And DRF isn’t necessarily the better choice simply because it is mature.</p><p>They optimize for different things.</p><pre>| Requirement            |   DRF | FastAPI |<br>| ---------------------- | ----: | ------: |<br>| Django application     | ⭐⭐⭐⭐⭐ |      ⭐⭐ |<br>| Built-in ecosystem     | ⭐⭐⭐⭐⭐ |     ⭐⭐⭐ |<br>| Admin interface        | ⭐⭐⭐⭐⭐ |       — |<br>| Authentication         | ⭐⭐⭐⭐⭐ |     ⭐⭐⭐ |<br>| Type-driven APIs       |   ⭐⭐⭐ |   ⭐⭐⭐⭐⭐ |<br>| Async-first services   |   ⭐⭐⭐ |   ⭐⭐⭐⭐⭐ |<br>| Microservices          |  ⭐⭐⭐⭐ |   ⭐⭐⭐⭐⭐ |<br>| AI/ML APIs             |  ⭐⭐⭐⭐ |   ⭐⭐⭐⭐⭐ |<br>| Rapid CRUD development | ⭐⭐⭐⭐⭐ |    ⭐⭐⭐⭐ |<br>| Specialized services   |  ⭐⭐⭐⭐ |   ⭐⭐⭐⭐⭐ |<br></pre><p>These aren’t absolute rankings — they’re architectural tendencies.</p><h3>Final Thoughts</h3><p>Choosing between Django REST Framework and FastAPI shouldn’t be a popularity contest.</p><p>DRF is excellent when your API is part of a larger Django application.</p><p>You get an ORM, authentication, permissions, administration, serializers, middleware, and a mature ecosystem.</p><p>FastAPI is excellent when your API is a focused service.</p><p>You get lightweight architecture, excellent type support, asynchronous capabilities, automatic OpenAPI documentation, and the freedom to choose the components around it.</p><p>And sometimes the best architecture uses both.</p><p>The interesting question isn’t:</p><p>“Should I replace DRF with FastAPI?”</p><p>It’s:</p><p>“Which part of my system actually needs FastAPI?”</p><p>That’s where the architectural decision becomes much more valuable than the framework debate.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f94776f55262" width="1" height="1" alt=""><hr><p><a href="https://medium.com/django-unleashed/fastapi-instead-of-django-rest-framework-when-should-you-make-the-switch-f94776f55262">FastAPI Instead of Django REST Framework: When Should You Make the Switch?</a> was originally published in <a href="https://medium.com/django-unleashed">Django Unleashed</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Building an MCP Server for Dokku with FastMCP]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/django-unleashed/building-an-mcp-server-for-dokku-with-fastmcp-33b68f7ddf20?source=rss----401bc7164e65---4"><img src="https://cdn-images-1.medium.com/max/1200/1*Is5ObnpCsj_CZZ_IvTjtvg.png" width="1200"></a></p><p class="medium-feed-snippet">This post walks through dokku-mcp, a FastMCP server that talks to Dokku over SSH, returns structured results, and ships with guardrails so&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/django-unleashed/building-an-mcp-server-for-dokku-with-fastmcp-33b68f7ddf20?source=rss----401bc7164e65---4">Continue reading on Django Unleashed »</a></p></div>]]></description>
            <link>https://medium.com/django-unleashed/building-an-mcp-server-for-dokku-with-fastmcp-33b68f7ddf20?source=rss----401bc7164e65---4</link>
            <guid isPermaLink="false">https://medium.com/p/33b68f7ddf20</guid>
            <category><![CDATA[cursor]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[fastmcp]]></category>
            <category><![CDATA[dokku]]></category>
            <category><![CDATA[mcps]]></category>
            <dc:creator><![CDATA[Nuno Bispo]]></dc:creator>
            <pubDate>Fri, 11 Sep 2026 11:02:05 GMT</pubDate>
            <atom:updated>2026-09-11T11:02:38.286Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Your Voice Pipeline Is Too Flexible]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/django-unleashed/your-voice-pipeline-is-too-flexible-037475cf1209?source=rss----401bc7164e65---4"><img src="https://cdn-images-1.medium.com/max/2600/0*F6Q_hD6Vcegq7QbY" width="3704"></a></p><p class="medium-feed-snippet">This piece follows one booking from mic to side effect: voice &#x2192; transcribe &#x2192; extract &#x2192; validate &#x2192; tool.</p><p class="medium-feed-link"><a href="https://medium.com/django-unleashed/your-voice-pipeline-is-too-flexible-037475cf1209?source=rss----401bc7164e65---4">Continue reading on Django Unleashed »</a></p></div>]]></description>
            <link>https://medium.com/django-unleashed/your-voice-pipeline-is-too-flexible-037475cf1209?source=rss----401bc7164e65---4</link>
            <guid isPermaLink="false">https://medium.com/p/037475cf1209</guid>
            <category><![CDATA[whisper]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[pydantic]]></category>
            <dc:creator><![CDATA[Nuno Bispo]]></dc:creator>
            <pubDate>Thu, 03 Sep 2026 08:06:17 GMT</pubDate>
            <atom:updated>2026-09-03T08:06:17.450Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Your Data Structure Is Too Flexible]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/django-unleashed/your-data-structure-is-too-flexible-bc9db2e84f53?source=rss----401bc7164e65---4"><img src="https://cdn-images-1.medium.com/max/2600/0*iG4VCK-bc8Ph9XWa" width="3840"></a></p><p class="medium-feed-snippet">Python makes it easy to pass data around as dicts, nested JSON blobs, and &#x201C;whatever the client sent&#x201D;. That flexibility is useful when you&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/django-unleashed/your-data-structure-is-too-flexible-bc9db2e84f53?source=rss----401bc7164e65---4">Continue reading on Django Unleashed »</a></p></div>]]></description>
            <link>https://medium.com/django-unleashed/your-data-structure-is-too-flexible-bc9db2e84f53?source=rss----401bc7164e65---4</link>
            <guid isPermaLink="false">https://medium.com/p/bc9db2e84f53</guid>
            <category><![CDATA[pydantic]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[data-structures]]></category>
            <dc:creator><![CDATA[Nuno Bispo]]></dc:creator>
            <pubDate>Mon, 24 Aug 2026 13:13:46 GMT</pubDate>
            <atom:updated>2026-08-24T13:13:46.347Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Django Translations and the Hidden JSON Serialization Trap]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/django-unleashed/django-translations-and-the-hidden-json-serialization-trap-661e5fccc68f?source=rss----401bc7164e65---4"><img src="https://cdn-images-1.medium.com/max/1200/1*x4bNHaxIcQu7gRt71tqygQ.png" width="1200"></a></p><p class="medium-feed-snippet">If you&#x2019;ve worked with Django&#x2019;s translation system, you&#x2019;ve probably used gettext_lazy (or its alias _()) countless times.</p><p class="medium-feed-link"><a href="https://medium.com/django-unleashed/django-translations-and-the-hidden-json-serialization-trap-661e5fccc68f?source=rss----401bc7164e65---4">Continue reading on Django Unleashed »</a></p></div>]]></description>
            <link>https://medium.com/django-unleashed/django-translations-and-the-hidden-json-serialization-trap-661e5fccc68f?source=rss----401bc7164e65---4</link>
            <guid isPermaLink="false">https://medium.com/p/661e5fccc68f</guid>
            <category><![CDATA[django]]></category>
            <category><![CDATA[backend]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[debugging]]></category>
            <category><![CDATA[web-development]]></category>
            <dc:creator><![CDATA[Akshat Gadodia]]></dc:creator>
            <pubDate>Mon, 24 Aug 2026 06:41:53 GMT</pubDate>
            <atom:updated>2026-10-07T11:11:59.802Z</atom:updated>
        </item>
    </channel>
</rss>