The exception is very definitely being raised by me trying to distinguish things based on REQUEST_METHOD type. Here's the traceback:
Traceback (most recent call last): File "/usr/lib/python2.6/dist-packages/django/core/handlers/base.py", line 92, in get_response response = callback(request, *callback_args, **callback_kwargs) File "/home/andrew/djprj/helpers/request_handler.py", line 77, in __call__ raise NoMethodError(request.method) NoMethodError: The HEAD method is not allowed for this path ---- The relevant code in helpers/request_handler.py is this: class RestHandler(object): def __call__(self, request, *args, **kwargs): method = request.method.upper() if hasattr(self, method): return getattr(self, method)(request, *args, **kwargs) raise NoMethodError(request.method) class NoMethodError(Exception): def __init__(self, method): super(Exception, self).__init__( "The %s method is not allowed for this path" % method) --- Graham, are you suggesting that if I receive a HEAD request, I should behave exactly the same as if I received a GET request? That is, I should assume Apache / mod_wsgi will take care of translating my response into one appropriate for a HEAD request? -- Andrew On Jul 6, 7:28 pm, Graham Dumpleton <graham.dumple...@gmail.com> wrote: > On Jul 7, 2:14 am, Andrew Fong <fongand...@gmail.com> wrote: > > > Thanks for the response. I'm using Apache/mod_wsgi and getting error > > messages in production because my handlers don't know how to handle a > > HEAD request. If the server is supposed to automatically translate the > > HEAD requests into GETs, then I probably have something set up > > incorrectly. Any idea where to start looking? > > As I described, it doesn't always translate HEAD to GET and that > shouldn't matter. Neither should it really matter in the Django layers > either. If you in your code are trying to distinguish things based on > REQUEST_METHOD type, then it is more likely to be in your code. > > I would suggest you post the Python traceback so others can say > whether it is an issue in Django layers to eliminate that, and then > perhaps point at where problem may lie. Ie., in your code or > elsewhere. > > Graham > > > > > -- Andrew > > > On Jul 2, 7:16 pm, Graham Dumpleton <graham.dumple...@gmail.com> > > wrote: > > > > On Jul 3, 4:55 am, Andrew Fong <fongand...@gmail.com> wrote: > > > > > How exactly should I handle a HEAD request in Django? > > > > > So ... assuming my view looks like this... > > > > > def handle_request(request): > > > > if request.method == 'POST': return do_post(request) > > > > elif request.method == 'GET': return do_get(request) > > > > elif request.method == 'HEAD': return do_head(request) > > > > > ... what should the do_head method return? The W3 standard says "The > > > > HEAD method is identical to GET except that the server MUST NOT return > > > > a message-body in the response". > > > > > How exactly do I not return a message body though? Do I just return > > > > None? Do I return the response I would for a GET and then modify it > > > > somehow? > > > > You generally don't need to do anything different, the standard says > > > 'the ***server***'. > > > > So, for sane web servers, the underlying server will deal with this > > > and the application doesn't need to. You should just do exactly what > > > you would normally do for a GET request. The web server would then > > > return all the headers but just throw the response content away and > > > not return it to the client. > > > > If you do act differently, you potentially break the requirement that > > > response headers for the HEAD should match what would be returned for > > > a GET request against same resource. Thus, the suggestion of returning > > > an empty string could stuff up returned content length for a start. > > > > FWIW, in Apache/mod_wsgi it will deliberately at times translate a > > > HEAD into a GET when it is passed into the WSGI application. This will > > > occur when there are Apache output filters registered that may want to > > > change response headers and modify the content. For example, > > > mod_deflate, which would compress the response. If this isn't done and > > > the application acted differently for a HEAD, then the data received > > > by Apache output filter would not be the same as for the GET and > > > result returned to client would be different than what it should be. > > > > Graham --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~----------~----~----~----~------~----~------~--~---