36👍
Does the view that you are posting to have a Django Form on it? If so, I wonder if it’s giving a csrf error. I think that manifests itself as a 403. In that case, you’d need to add the {{ csrf_token }} tag. Just a thought.
52👍
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.
- [Django]-Can "list_display" in a Django ModelAdmin display attributes of ForeignKey fields?
- [Django]-How do I reuse HTML snippets in a django view
- [Django]-Can WordPress be replaced by a Framework like Django or Ruby on Rails?
3👍
The response is 403 because django requires a csrf token (included in the post data) in every POST request you make.
There are various ways to do this such as:
Acquiring the token from cookie and the method has been explained in article enter link description here
or
You can access it from DOM using {{ csrf_token }}, available in the template
So now using the second method:
var post_data = {
...
'csrfmiddlewaretoken':"{{ csrf_token }}"
...
}
$.ajax({
url:'url',
type:'POST'
data:post_data,
success:function(data){
console.log(data);
},
error:function(error){
console.log(error);
}
});
- [Django]-GeoDjango GEOSException error
- [Django]-Django FileField: How to return filename only (in template)
- [Django]-Django, ModelChoiceField() and initial value
2👍
Or you can allow the permission to make this post request.
Note: Should be used in the cases where you don’t need to authenticate the users for posting anything on our server, say, when a new user registers for the first time.
from rest_framework.permissions import AllowAny
class CreateUser(APIView):
permission_classes = (AllowAny,)
def post(self, request, format=None):
return(Response("hi"))
Further Note that, If you want to make that post request form a different domain (in case when the front of the application is in React or angular and the backend is in Django), make sure the add following in the settings file:
-
Update the INSTALLED_APPS to use ‘coreHeaders’ :
INSTALLED_APPS = [
‘corsheaders’,
] -
White list your front end domain by adding following to settings file again:
CORS_ORIGIN_WHITELIST = (
‘localhost:8080’,
)
- [Django]-Create a field whose value is a calculation of other fields' values
- [Django]-Django abstract models versus regular inheritance
- [Django]-Fields.E304 Reverse accessor clashes in Django
1👍
Django documentation provides several ways to ensure that CSRF tokens are included. See https://docs.djangoproject.com/en/1.11/ref/csrf/ for details.
- [Django]-Django – How to set default value for DecimalField in django 1.3?
- [Django]-How to duplicate virtualenv
- [Django]-Django DoesNotExist
1👍
I got this error when an authentication Token was expired or when no Token was sent with the request. Using a renewed token fixed the problem.
curl -X POST -H "Authorization: Token mytoken" -d "name=myname&age=0" 127.0.0.1:8000/myapi/
or
curl -X POST -H "Authorization: JWT mytoken" -d "name=myname&age=0" 127.0.0.1:8000/myapi/
depending on Token type.
- [Django]-Access request in django custom template tags
- [Django]-Django – How to set default value for DecimalField in django 1.3?
- [Django]-Django Rest Framework pagination extremely slow count
0👍
I too had this problem, because I Tried to access the Main endpoint from another endpoint using '../url'
URL Jumping.
My Solution was to add another path for the same viewset;
router.register('main/url',ViewSet,'name');
router.register('secondary/url',ViewSet,'name')
But in Your Case You are Trying to access it from a completely different Location, From Django’s Point of view So You need to mark you ViewSet with @crsf_exempt
middleware which will Disable Security Protocols Related to CRSF.
- [Django]-How to create a Django FloatField with maximum and minimum limits?
- [Django]-Django – "no module named django.core.management"
- [Django]-How can I build multiple submit buttons django form?