Привет и благодарю вас за ваш ответ.Как обращаться с защитой csrf в представлениях Django?
1) У меня есть модель с текстом и цифры
class Mention(models.Model):
mentionn = models.ForeignKey(Step, on_delete=models.CASCADE)
mention_text = models.TextField()
mention_digit = models.IntegerField()
2), выполненный на заказ из (не в Джанго, так что без ModelForm и так далее), которые обращаются с просьбой текст и цифра
<form action="/addcomment{{ stepid }}" method="post">
{% csrf_token %}
<label>
Your text
<textarea name = "mention_text" class="text-area-width" placeholder="You rваш отзыв"></textarea>
</label>
<label>How much stars?
<select name="mention_digit">
<option value="5">5 star</option>
<option value="4">4 star</option>
<option value="3">3 star</option>
<option value="2">2 star</option>
<option value="1">1 star</option>
</select>
</label>
<input type="submit" class="success expanded button" value="publish"/>
</form>
3) Далее я сделал вид, что genetate его:
def addcomment(request, step_id):
done = csrf(request)
if request.POST:
mentionn = Step(id=step_id)
mention_text = request.POST.get('mention_text', '')
mention_digit = request.POST.get('mention_digit', '')
mentionn_obj = Mention(mentionn=mentionn, mention_text=mention_text, mention_digit=mention_digit)
mentionn_obj.save()
return redirect('/step'+ step_id, done)
И возникает проблема, что csrf_token отсутствует или неверен. Если я устанавливаю декоратор @csrf_exempt на мой взгляд, eveything работает (но защита отключена).
Так что моя задача - заставить его работать. Я не хочу использовать формы джанго, так как это довольно сложно сделать и выглядеть красиво.
Глобальная модель для веб-страницы:
class Step(models.Model):
title = models.CharField(max_length=200)
description = models.CharField(max_length=200)
annotation = models.TextField()
main_text = models.TextField()
main_photo = models.ImageField(upload_to='', height_field=None, width_field=None, max_length=100)
true_question = models.TextField()
true_answer = models.TextField()
true_link = models.CharField(max_length=200, default="http://lieman.ru/exshelp/")
View, которые генерируют все страницы:
def step(request, step_id):
stepfields = get_object_or_404(Step, id = step_id)
navigators = Navigation_bar.objects.filter(navigatorr_id = step_id)
mentionship = Mention.objects.filter(mentionn_id = step_id)
username = auth.get_user(request).username
stepid = step_id
context = {
"stepfieldst" : stepfields,
"navigators" : navigators,
"mentionship" : mentionship,
"stepid" : stepid,
"username" : username,
}
return render_to_response('bakot/step.html', context)
Можете ли вы добавить трассировку ошибки и ваш 'views.py'? –
Что делает функция 'csrf' в вашем представлении? – GwynBleidD