2016-07-28 15 views
0

Ich schrieb die folgende Ansicht:Wie Klassenansicht in Django für HTML-Schaltfläche verwenden?

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) Wie kann ich diese Methode in user/user_delete.html nennen?

Ich denke, dass meine form_class Attribut ist nicht notwendig, da ich eine TemplateView verwenden.

2) Wie würde der Code aussehen, um die UserDeleteView für forms.py zu verwenden? Wie erstelle ich die Schaltfläche Löschen?

Antwort

1

Möglicherweise ist es nicht die Antwort, die Sie suchen, aber Sie können DeleteView anstelle von TemplateView verwenden, die nur eine erfolgreiche URL benötigt.

Sie können die Standardfunktionen Methoden suchen, die hier verwendet werden können: DeleteView

und Dokumentation hier: 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('/') 

nicht sicher, ob dies für den Fall funktionieren würde in Benutzer das protokollierte zu löschen. Ich entschuldige mich, weil ich dies kurz erwähnt haben könnte, ohne Code in einem Kommentar zu geben, aber dafür habe ich nicht genug Reputation.

+1

Anstelle der Überprüfung von user.is_authenticated() kann LoginRequiredMixin verwendet werden. Importieren Sie es von django.contrib.auth.mixins und verwenden Sie es zusammen mit DeleteView wie 'Klasse UserDeleteView (LoginRequiredMixin, DeleteView):' – cutteeth

+1

@ user2853437 Überprüfen Sie dies: [sfm-ui] (https://github.com/gwu- Bibliotheken/sfm-ui/tree/t28-Struktur-Settings-Datei/sfm/ui). Dieser Zweig verfügt über eine grundlegende Skelettstruktur für die Verwendung von klassenbasierten Ansichten. Dies ist etwas, das ich ursprünglich beim Lernen geschaffen habe. Ich hoffe, es ist hilfreich für Sie :) –

1

Eine Möglichkeit, es zu tun wäre so etwas wie dies

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) 

sein Dies sollte für eine grundlegende Django Ansicht ausreicht. In Ihrer HTML-Vorlage können Sie sagen, Sie haben eine Schaltfläche zum Löschen des Objekts und lassen Sie uns auch sagen, dass es id Attribut auf deleteButton gesetzt hat. Sie müssen Javascripting verwenden, um das Löschen zu initiieren. Für zB Ihre Taste ist wie

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

So können Sie so etwas wie dieses

$("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 schreiben: Dies ist ein absolutes Minimum Weise etwas, was Sie tun wollen. Es ist auch nicht der einzige Weg. Aber das sollte Ihnen eine andere Perspektive geben, um zu sehen, was Sie erreichen wollen.

Edit 1: Eine Probe url Config für die Ansicht, die ich vorgelegt habe.

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

Dann in Ihrem HTML, können Sie Taste wie

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

Sie müssen id des Objekts haben, die Sie in Ihrer Vorlage zu löschen, die ich bin sicher, dass Sie das tun.

+0

Könnten Sie eine andere Lösung ohne Javascript zur Verfügung stellen.Sicherlich wird Javascript geschätzt, aber ich möchte es flach halten. – user2853437

+0

Wenn Sie das Javascript aus meinem Code herausnehmen und den von mir bereitgestellten Code verwenden, funktioniert es. In diesem Fall wird die Anfrage eine einfache Nicht-Ajax-Anfrage sein. –

+0

Es ist immer noch nicht so offensichtlich für mich. Was ist in der Anfrage gespeichert? - Mit Ihrem Code ist es ein 'GET'? Was ist in Objekt-ID gespeichert? Sagst du, wenn ich die html-'id 'in meiner Ansicht anfrage, wie ob object_id ==' deleteButton 'als Funktion fortfahren? Ich verstehe immer noch nicht, wie ich die Methode "delete_my_account()" von html – user2853437