Django renvoie une erreur 403 lors de l'envoi d'une requête POST
quand je suis en utilisant le code Python suivant pour envoyer une requête POST à mon site web de Django, je suis 403: Forbidden erreur.
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
Quand je suis à l'ouverture de tout autre site web il fonctionne correctement.
domain.com est le site web de Django trop, et il fonctionne correctement aussi.
Je pense, que Django config problème, quelqu'un peut-il me dire ce que dois-je faire pour donner accès à mon script?
- Pouvez-vous aller à la page web à partir d'un navigateur web normal?
- Je peux obtenir à partir du navigateur. Mon serveur de logs sont vides, je n'ai pas suffisamment de piriveges à la vue de tous sur mon hébergement.
- stackoverflow.com/a/30210391/940098
Vous devez vous connecter pour publier un commentaire.
Le point de vue que vous poster pour avoir un Django Forme sur elle? Si oui, je me demande si c'est de donner une csrf erreur. Je pense que se manifeste comme une 403. Dans ce cas, vous devez ajouter le {{ csrf_token }} la balise. Juste une pensée.
Regardez ici https://docs.djangoproject.com/en/dev/ref/csrf/#how-to-use-it.
Essayer de marquage de votre point de vue avec
@csrf_exempt
. De cette façon, Django CSRF middleware ignore protection CSRF. Vous aurez également besoin d'utiliserfrom django.views.decorators.csrf import csrf_exempt
. Voir: https://docs.djangoproject.com/en/dev/ref/csrf/#utilitiesS'il vous plaît noter qu'en désactivant la protection CSRF sur votre vue, vous ouvrez une porte pour les attaques de type CSRF.
Si la sécurité est vital pour vous, alors pensez à utiliser
@csrf_exempt
suivie par@requires_csrf_token
(voir: https://docs.djangoproject.com/en/dev/ref/csrf/#unprotected-view-needs-the-csrf-token). Puis, dans votre script de passer cette marque et c'est tout.La réponse est 403 parce que django nécessite un jeton csrf (inclus dans le message de données) dans chaque POST que vous faites.
Il y a différentes façons de le faire, tels que:
Acquérir le jeton de cookies et de la méthode a été expliqué dans l'article entrez description du lien ici
ou
Vous pouvez y accéder depuis les DOM à l'aide de {{ csrf_token }}, disponible dans le modèle
Maintenant en utilisant la deuxième méthode:
Ou vous pouvez autoriser la permission de faire cette requête post.
Note: Doit être utilisé dans le cas où vous n'avez pas besoin d'authentifier les utilisateurs de poster quoi que ce soit sur notre serveur, disent, quand un nouvel utilisateur s'enregistre pour la première fois.
Note en outre que, Si vous voulez faire ce post formulaire de demande d'un autre domaine (dans le cas où le front de l'application est de Réagir ou angulaire et le backend est dans Django), assurez-vous que le ajoutez ce qui suit dans le fichier de paramètres:
Mise à jour de la INSTALLED_APPS l'utilisation de 'coreHeaders' :
INSTALLED_APPS = [
'corsheaders',
]
Liste blanche de votre front-end de domaine par l'ajout suivant au fichier de paramètres de nouveau:
CORS_ORIGIN_WHITELIST = (
'localhost:8080',
)
Documentation de Django fournit plusieurs façons de s'assurer que les jetons CSRF sont inclus. Voir https://docs.djangoproject.com/en/1.11/ref/csrf/ pour plus de détails.
J'ai eu cette erreur lorsqu'un Jeton d'authentification est expiré ou lorsque aucun Jeton a été envoyé avec la demande. À l'aide d'un signe renouvelé résolu le problème.
ou
selon le type de Jeton.