Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django returns 403 error when sending a POST request

when I'm using following Python code to send a POST request to my Django website I'm getting 403: Forbidden error.

url = 'http://www.sub.domain.com/' values = { 'var': 'test' }  try:     data = urllib.urlencode(values, doseq=True)     req = urllib2.Request(url, data)     response = urllib2.urlopen(req)     the_page = response.read() except:     the_page = sys.exc_info()     raise 

When I'm opening any other website it works properly. domain.com is Django website too, and it works properly too. I think, that's Django config problem, can anyone tell me what should I do to provide access to my script?

like image 383
Djent Avatar asked Jul 23 '11 14:07

Djent


1 Answers

Look here https://docs.djangoproject.com/en/dev/ref/csrf/#how-to-use-it.

Try marking your view with @csrf_exempt. That way, Django's CSRF middleware will ignore CSRF protection. You'll also need to use from django.views.decorators.csrf import csrf_exempt. See: https://docs.djangoproject.com/en/dev/ref/csrf/#utilities

Please be advised that by disabling CSRF protection on your view, you are opening a gate for CSRF attacks.

If security is vital to you then consider using @csrf_exempt followed by @requires_csrf_token (see: https://docs.djangoproject.com/en/dev/ref/csrf/#unprotected-view-needs-the-csrf-token). Then, in your script pass this token and that's it.

like image 165
bx2 Avatar answered Sep 20 '22 07:09

bx2