私はDjangoを使用していますが、ユーザーに本当に何かを削除したいことを確認してもらいたいです。私は純粋なDjangoソリューションを検討しています(Javascriptの確認はありません)。私の考えによれば、「はい」と「いいえ」のボタンを含む新しいページを作成できます。ユーザーが「はい」を押すと、私のサイトは続行し、データベースからオブジェクトを削除します。Javascriptを使用せずに削除を行う正しい方法ですか?あなたが私だったら、どのように機能を実装しますか?
2 に答える
Djangoのビルトインを使用します。DeleteView
これにより、HTTPリクエストの確認ページが表示され、HTTPGET
リクエストの削除が実行されますPOST
。
ドキュメントはこの例を示しています:
from django.views.generic.edit import DeleteView
from django.core.urlresolvers import reverse_lazy
from myapp.models import Author
class AuthorDelete(DeleteView):
model = Author
success_url = reverse_lazy('author-list')
SingleObjectMixin
ビューが削除するオブジェクトを見つける方法をカスタマイズする方法(デフォルトでは、と呼ばれるURLキーワード引数を検索する方法pk
)を説明するドキュメントと、TemplateResponseMixin
使用されるテンプレートをカスタマイズする方法を説明するドキュメントを読むことをお勧めします。 (デフォルトは'myapp/author_check_delete.html'
)。
これは、基本的な操作(単一のモデルインスタンスのページの表示、モデルインスタンスのリストの表示、編集、削除などの処理)を非常に迅速かつ簡単に実装できる多数のクラスベースの汎用ビューの1つにすぎません。
後でJavaScriptでこれを強化したい場合は、削除確認ページへのリンクを検出し(クラスまたは特定のURLを探すことによって)、確認ダイアログをポップアップして送信するクリックハンドラーを追加する控えめなJSをいつでも作成できます。POST
リンクのhref
属性のURLへのリクエスト。request.is_ajax()
また、ビューを少し変更して、がのときにJSONオブジェクトを返すようにする必要がありTrue
ます。これにより、JSは、削除が成功したか失敗したかを認識できます。これには、から継承されたメソッドの1つをオーバーライドすることが含まれる可能性がありますDeletionMixin
。
いいですね。私が数回行ったことは、アプリケーションのどこでも使用できる確認テンプレートを作成することです。
{% extends 'base.html' %}
{% block content %}
<div class="confirmation-box">
<p>{{ message }}</p>
<div>
<a href="{{ prev_link }}">Cancel</a>
<form action="{{ action_link }}" method="post">
<input type="hidden" name="next" value="{{ prev_link }}" />
<input type="submit" value="Send" />
</form>
</div>
</div>
{% endblock %}
あなたはそれに渡します:
- ユーザーへの確認メッセージ(
message
) - 現在のページのURL(
prev_link
) - アクションを実行するために呼び出す必要のあるURL(
action_link
)
ユーザーがアクションをキャンセルすると、元のページに戻ります。
ユーザーが確認すると、prev_link
は非表示パラメーターとして渡されるため、ビューはアクションの実行後にユーザーを元のページにリダイレクトできます(ただし、これはもちろん完全にオプションです)。
これはあなたがあなたの質問で提案したこととほとんど同じです。