python - How do I reject a request prematurely with django? -


i'm getting lot of spambot requests (requests referrer spam site). how reject request prematurely process_request on middleware django don't respond requests made specific referrer?

you can create rejectspambotrequestsmiddleware class reject requests if referer of request specific referrer.

it should return either none or httpresponse object. if returns none, django continue processing request, executing other process_request() middlewares, then, process_view() middleware, , finally, appropriate view. normally, 403 forbidden response sent user if incoming request fails checks performed middleware.

from django.http import httpresponseforbidden      class rejectspambotrequestsmiddleware(object):        def process_request(self, request):           referer = request.meta.get('http_referer')         if referer == 'spambot_site_referer':             return httpresponseforbidden() # reject request , return 403 forbidden response          return # return none in case of valid request 

then add middleware middleware_classes in settings.py file.

middleware_classes = (     'django.middleware.common.commonmiddleware',     'django.middleware.csrf.csrfviewmiddleware',     ...     ...     # custom middleware here     'my_project.middlewares.rejectspambotrequestsmiddleware', ) 

note: here, rejectspambotrequestsmiddleware run @ end django applies middleware in order it’s defined in middleware_classes, top-down. can change order of middleware_classes per need.


Comments