3

コメント フレームワークの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>

ほとんどの場合、必要な非表示フィールド (セキュリティのため) とコメント フィールドのみをレンダリングします。Allcomment.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ため、問題ではありませんが、混乱を招く可能性があります。たとえば、 、管理ページ)。

だから私の質問は:

  1. メールアドレスを持たないユーザーがコメントできるようにするにはどうすればよいですか?
  2. フォームが に移動できないようにするにはどうすればよいpreview.htmlですか?
  3. 私のコードとデザインはこれまでのところ良いですか?
4

1 に答える 1

2

カスタマイズドキュメントを使用して、コメント フレームワークからのコメントを処理するカスタム アプリを作成できます。COMMENTS_APP = 'my_comment_app'設定ファイルで設定し、アプリでカスタム フォームを返すメソッドを指定する必要がありget_form()ます__init__.py

カスタムフォームは以下に基づいている必要がcontrib.comments.forms.CommentFormあり、次のように見える必要があります。

class CustomForm(comment_forms.CommentForm):
    def __init__(*args, **kwargs):
        super(CustomFors, self).__init__(*args, **kwargs)
        self.fields["email"].required = False

preview.htmlフォームにエラーが含まれているためレンダリングされます (email が必要ですが、ユーザーがそれを持っていないため、入力されません)。エラーがない場合、プレビューは表示されません。

于 2012-07-20T09:07:33.257 に答える