How to do I integrate a 304 in Django?
Asked Answered
T

2

6

When a user requests the same page, with the same data...I'd like Django to return a 304, so that the browser doesn't have to load the page all over again.

I'm new to this. How can this be done?

Thanks.

Trifacial answered 18/2, 2010 at 9:7 Comment(0)
A
13

There's extensive description in Django documentation: Conditional view processing

Following tools are particularly useful:

  1. @last_modified and @etag view decorators. You supply them with a function to compute the value from request and everything else is done automatically.
  2. django.middleware.http.ConditionalGetMiddleware -- it generates required ETag and returns 304 if there's a cache hit, but this still takes server time to generate full HTML and only network time is saved. Still very good for one-line configuration change.
Allusion answered 18/2, 2010 at 9:10 Comment(0)
S
6

You could look into Django's caching system, or if you can easily check if the user is requesting the same data, you can return a HttpResponseNotModified() - this returns a 304. Check out the docs here.

Simar answered 18/2, 2010 at 9:26 Comment(2)
Server-side caching is useful, but unrelated to HTTP 304. And it's true that you can return HttpResponseNotModified yourself, but Django already has built-in mechanisms to check for same response and return the 304 for you; see Alex Lebedev's answer.Iroquois
Thanks Carl, I didn't know that! I've still got a ton to learn about Django.Simar

© 2022 - 2024 — McMap. All rights reserved.