Я отменяю form.html
шаблон для комментариев фреймворки с моей собственнымПользователь без какой-либо адреса электронной почты не может оставить комментарий, используя комментарии рамки Джанго
{% load comments i18n %}
<form action="{% comment_form_target %}" method="post">{% csrf_token %}
<div><input type="hidden" name="next" value="{{ request.get_full_path }}" /></div>
{% for field in form %}
{% if field.is_hidden %}
<div>{{ field }}</div>
{% else %}
{% if field.name != "name" and field.name != "url" and field.name != "email" %}
{% if field.errors %}{{ field.errors }}{% endif %}
<p
{% if field.errors %} class="error"{% endif %}
{% ifequal field.name "honeypot" %} style="display:none;"{% endifequal %}
>
{{ field.label_tag }}<br />
{{ field }}
</p>
{% endif %}
{% endif %}
{% endfor %}
<p class="submit">
<input type="submit" name="post" class="submit-post" value="{% trans "Post" %}" />
</p>
</form>
Это в значительной степени только делает необходимые скрытые поля (для безопасности) и поле комментариев. Все comment.user
автоматически устанавливается как текущий зарегистрированный пользователь request.user
. Вот тонированное HTML:
<form action="/comments/post/" method="post"><div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='bd05094c2e3ba80e1fbec8a4237b132c' /></div>
<div><input type="hidden" name="next" value="/doors/orders/1/" /></div>
<div><input type="hidden" name="content_type" value="doors.order" id="id_content_type" /></div>
<div><input type="hidden" name="object_pk" value="1" id="id_object_pk" /></div>
<div><input type="hidden" name="timestamp" value="1333125894" id="id_timestamp" /></div>
<div><input type="hidden" name="security_hash" value="c6791aafdd682cd8db5595681073c9a21c5fe7dd" id="id_security_hash" /></div>
<p>
<label for="id_comment">Comment</label><br />
<textarea id="id_comment" rows="10" cols="40" name="comment"></textarea>
</p>
<p style="display:none;" >
<label for="id_honeypot">If you enter anything in this field your comment will be treated as spam</label><br />
<input type="text" name="honeypot" id="id_honeypot" />
</p>
<p class="submit">
<input type="submit" name="post" class="submit-post" value="Post" />
</p>
</form>
Проблема в том, я заметил, что если зарегистрированный пользователь не имеет адрес электронной почты, то комментарии идет к preview.html
(который я не переопределяется). Вот скриншот:
Это вопрос безопасности, поскольку она позволяет кому-то изменить свое имя вместо использования зарегистрированного имени пользователя перед отправкой (когда я перечисляю комментарии, я использую comment.user.get_full_name
вместо comment.name
так что это не проблема, но она все равно может запутать, скажем, страницу администратора).
Так что мои вопросы:
- Как разрешить пользователям не по электронной почте, чтобы комментировать?
- Как сделать не Позвольте форме перейти на
preview.html
? - Действительно ли мой код и дизайн хороши?
Комментарии Django далеки от совершенства. Но вы можете переопределить их и использовать свою собственную модель и форму. – ilvar
Но они позаботятся о некоторых хороших мерах безопасности, таких как поле honeypot, двойная проводка, timestamped POST, хэш безопасности и т. Д. – hobbes3
Вам не нужно все это прочь. Просто измените модель и форму (которая также может быть унаследована от вклада Django). – ilvar