2016-07-28 4 views
0

は、私は次のビューを書いた:HTMLボタンのDjangoでクラスベースのビューを使用するには?

class UserDeleteView(TemplateView): 

    template_name = "user/user_delete.html" 
    form_class = UserDeleteForm 
    model = User 

    def delete_my_account(self): 
     user = get_user(self.request).user 
     if user.is_authenticated(): 
      logout(self.request) 
      user.delete() 
      return redirect('/') 

1)どのように私はuser/user_delete.htmlでそのメソッドを呼び出すことができますか?

TemplateViewを使用しているので、私のform_class属性は不要だと思います。

2)forms.pyUserDeleteViewを使用するコードはどのように見えますか?削除ボタンの作成方法

答えて

1

あなたが探している答えではないかもしれませんが、成功したURLだけを必要とするTemplateViewではなくDeleteViewを使用することができます。ここDeleteView

とドキュメント:

あなたは、デフォルトの機能ここで使用できる方法を探すことができ、これがログインしているユーザーを削除した場合に働くだろうDjango Documentation on DeleteView

class UserDeleteView(LoginRequiredMixin, DeleteView): 

    template_name = "user/user_delete.html" 
    form_class = UserDeleteForm 
    model = User 

    def get_success_url(self): 
     # logout(self.request) 
     return redirect('/') 

わからない場合。私はコメントにコードを書かずにこれを簡単に言及できたので、お詫びしますが、私は十分な評判を持っていません。それをやっての

+1

user.is_authenticated()をチェックする代わりに、LoginRequiredMixinを使用できます。 django.contrib.auth.mixinsからそれをインポートし、 'UserDeleteView(LoginRequiredMixin、DeleteView)class:' – cutteeth

+1

@ user2853437のようなDeleteViewと一緒に使用してください。[sfm-ui](https://github.com/gwu-ライブラリ/ sfm-ui/tree/t28-structure_settings_file/sfm/ui)。このブランチには、クラスベースのビューの使用方法に関する基本的な骨格構造があります。これは私が学習していたときに最初に作成したものです。私はあなたに役立つことを願っています:) –

1

一つの方法は、これは、基本的なDjangoのビューのために十分なものでなければならない。この

class UserDeleteView(View): 
    def post(self, request, object_id, *args, **kwargs): 
     '''retrieve the object for the given object_id and delete it''' 
     return redirect(url_to_be_redirected_to) 

ようなものになるだろう。あなたのHTMLテンプレートでは、オブジェクトを削除するためのボタンがあり、id属性がdeleteButtonに設定されていると言うことができます。削除を開始するにはjavascriptを使用する必要があります。例えばのために、あなたのボタンが

<a href="delete_url" id="deleteButton">Delete</a> 

だからあなたはこの

$("body").on("click", "a#deleteButton", function(event){ 
    event.preventDefault(); 

    var url = $(this).attr("href"); 
    var csrf = fetch_csrf_value_and_assign_here; 
    $.post(url, {csrfmiddlewaretoken:csrf}, function(response){}); 
}); 

PSのようなものを書くことができるようなものです:これは、あなたがしたい何かをする最低限の方法です。また、それだけではありません。しかし、これはあなたが達成したいものを見るための別の視点を与えるはずです。

編集1: 私が提示したビューのサンプルURL設定です。あなたのHTMLで次に

url(r'delete/(?P<object_id>\d+)/$', 
      views.UserDeleteView.as_view(), name='delete-user') 

、することができますボタンのような、あなたは私はあなたが確信しているテンプレートに削除したいオブジェクトのidを持っている必要があります

<a href="{% url 'appname:delete-user' object_id_you_want_to_delete %}" id="deleteButton">Delete</a> 

+0

javascriptを使用せずに別の魂を提供できますか?確かにjavascriptは高く評価されていますが、私はそれを平らにしておきたいと思います。 – user2853437

+0

私のコードからjavascriptを取り出し、私が提供したコードを使用しても動作します。その場合、リクエストは単純な非Ajaxリクエストになります。 –

+0

それはまだ私には明らかではありません。リクエストに応じて保存されるものは何ですか? - あなたのコードでは、それは 'GET'ですか? object_idには何が保存されていますか?私のビューでhtml-'id 'を要求した場合、object_id ==' deleteButton 'のように処理を進めるようにしますか?私はまだそのメソッドを呼び出す方法を理解していない "delete_my_account()" htmlから – user2853437

関連する問題