Also in meinem django app zu kommentieren, ich versuche, Ajax zu machen, und ich habe das angetroffen:
Forbidden (CSRF token missing or incorrect.): /app/437/
Fehler. Nach dem durch viele Lese SO beantwortet sie die am häufigsten verwendete und einfache Methode, mit diesem Fehler, indem sie durch die csrf Token ist durch $ Schnipsel() Daten wie diese zu behandeln scheint:
$('.comment_form').on('submit', function(e) {
e.preventDefault();
var url = window.location.href.split('?')[0];
console.log(url)
$.ajax({
type: 'POST',
url: url,
data: {
text: $('.comment_text').val(),
'csrfmiddlewaretoken': '{{csrf_token}}',
},
success: function() {
$('.comment_div').append("<div class='comment_div'><h3>username</h3><p>" + text + "</p></div>");
console.log(text);
}
})
});
Hier ist meine Vorlage, wenn Sie neugierig:
{% block comments %}
{% load widget_tweaks %}
<div class="commentsContainer">
<form action="" class="comment_form">{{csrf_token}}
{{ comment.comment_text|add_class:"comment_text" }} <!-- this is a textarea-->
<input type="submit" value="Comment" class="comment_submit">
</form>
<div class="comment_div">
<h3>username1</h3>
<p>Some text</p>
</div>
</div>
{% endblock %}
Hier ist meine Ansicht:
def article(request, category, id):
name = resolve(request.path).kwargs['category']
for a, b in CATEGORY_CHOICES:
if b == name:
name = a
instance = get_object_or_404(Post, id=id, category=name)
allauth_login = LoginForm(request.POST or None)
allauth_signup = SignupForm(request.POST or None)
comment = CommentForm(request.POST or None)
context = {
'comment': comment,
'instance': instance,
'allauth_login': allauth_login,
'allauth_signup': allauth_signup
}
return render(request, 'article.html', context)
Sie haben Ihre Ansicht nicht angezeigt, so können wir nicht sagen, ob das Problem dort sein könnte. [Die Dokumente] (https://docs.djangoproject.com/en/1.10/ref/csrf/#ajax) beschreiben, wie Sie eine Kopfzeile für alle Ajax-Anforderungen festlegen können, sodass Sie das Token nicht manuell hinzufügen müssen zu den Post-Daten, wie Sie es versuchen. Für Nicht-Ajax-Anfragen sollten Sie '{% csrf_token%}' im '' -Tag haben, nicht '{{csrf_token}}'. – Alasdair
Die Ansichten hinzugefügt. Und ist das nicht eine Ajax-Anfrage? Deshalb habe ich es von '{% csrf_token%}' auf '{{csrf_token}}' – Zorgan
Wenn Sie ändern '{{csrf_token}}' auf '{% csrf_token%}' dann den versteckten Eingang in Ihrem '