J'utilise la fonction delete() du module django.contrib.comments.views.moderation. Le membre du personnel est autorisé à supprimer tous les commentaires, ce qui est tout à fait correct. Cependant, je voudrais également donner aux non-membres enregistrés le privilège de supprimer leurs propres commentaires, et leur PROPRE seulement. Comment puis-je accomplir cela?Autoriser les utilisateurs à supprimer leurs propres commentaires dans Django
Répondre
Si vous voulez marquer le commentaire comme supprimé, tout comme django.contrib.comments.views.moderation.delete()
fait:
from django.contrib.auth.decorators import login_required
from django.contrib.comments.models import Comment
from django.shortcuts import get_object_or_404
from django.conf import settings
from django.contrib import comments
@login_required
def delete_own_comment(request, message_id):
comment = get_object_or_404(comments.get_model(), pk=message_id,
site__pk=settings.SITE_ID)
if comment.user == request.user:
comment.is_removed = True
comment.save()
Bien que ce soit un peu en retard ne pouvez pas vous faire la même chose de la même dans le modèle?
{% if user == comment.user %}
<a href="{% url comments-delete comment.id %}">delete comment</a>
{% endif %}
Il utilise l'URL des commentaires de django:
url(r'^delete/(\d+)/$', 'moderation.delete', name='comments-delete'),
J'ai aussi pensé à ça. Cependant, cette fonction de suppression nécessite que l'utilisateur dispose de l'autorisation de suppression de commentaire. Si je donne à chaque utilisateur normal la permission de supprimer n'importe quel commentaire, j'aurais un sérieux problème de sécurité. – RaDeuX
Je viens de rencontrer ce problème. Il suffit de ré-implémenter la logique dans la vue de suppression de l'application de commentaires pour coupler votre implémentation à cette version spécifique de l'application de commentaires. Par exemple, l'application de commentaire réelle gère également les signaux lorsque vous marquez quelque chose comme supprimé et la version fournie ne le fait pas.
Heureusement, l'application de commentaires fournit une fonction qui implémente la logique de suppression de base sans aucune autorisation. L'utiliser vous relie aux détails internes, mais il le fait d'une manière très spécifique qui va soit se casser ou travailler, il ne fonctionnera jamais à moitié. Vous pouvez créer votre propre point de vue avec son propre modèle de sécurité, puis appeler la fonction fournie app commentaire (à partir perform_delete import django.contrib.comments.views.moderation)
Le code ressemblerait à quelque chose comme ceci:
@login_required def delete_my_comment(request, comment_id, next=None): comment = get_object_or_404(comments.get_model(), pk=comment_id) if comment.user == request.user: if request.method == "POST": perform_delete(request, comment) return redirect("your_view", comment.content_object.id) else: return render_to_response('comments/delete.html', {'comment': comment, "next": next}, RequestContext(request)) else: raise Http404
Vous les détails varient en fonction de votre cas d'utilisation.
J'ai parcouru quelques variations (que vous pouvez voir dans l'historique de ce commentaire), et je pense que celui-ci est meilleur à tous égards que la solution originale proposée ici.
D'accord. Utiliser 'perform_delete' est une meilleure solution car: 1) découpler la logique de suppression des commentaires. 2) perform_delete ne supprime pas réellement, mais marque le commentaire comme étant supprimé. 3) perform_delete déclenche le signal comment_was_flagged, que j'utilise pour mettre à jour notre index de recherche – mynameistechno
- 1. Sélectionner tous les utilisateurs, les commander par leurs commentaires compter
- 2. Drupal autoriser les commentaires anonymes
- 3. Comment autoriser les utilisateurs à associer leurs domaines à une URL sur mon site?
- 4. Comment empêcher Capistrano d'écraser les fichiers téléchargés par les utilisateurs dans leurs propres dossiers?
- 5. Comment autoriser les utilisateurs à accepter le paiement d'autres utilisateurs?
- 6. Exécution de JPanels dans leurs propres threads.
- 7. Autoriser les utilisateurs à créer des pages
- 8. Comment puis-je supprimer les utilisateurs dupliqués dans django?
- 9. Autoriser les utilisateurs à choisir un thème personnalisé dans Rails
- 10. QWizardPages pour garder leurs propres tailles minimales
- 11. Comment accepter automatiquement les commentaires des utilisateurs authentifiés dans django.contrib.comments
- 12. Autoriser les utilisateurs à évaluer les vidéos intégrées dans le site Wordpress
- 13. Importer des utilisateurs PhpBB2 dans django-auth
- 14. Beaucoup de requêtes pour afficher les photos des utilisateurs et leurs commentaires. (CakePHP)
- 15. Autoriser/dans l'URL django
- 16. Les DLL doivent-elles avoir leurs propres fichiers de configuration?
- 17. Comment les gens créent-ils leurs propres langages de programmation?
- 18. Comment autoriser les utilisateurs à modifier les menus frontaux?
- 19. Quelle est une bonne approche pour permettre aux utilisateurs de définir leurs propres types personnalisés?
- 20. Rails Photos, Utilisateurs, Commentaires
- 21. Microsoft SQL Server: vérifier les utilisateurs propres autorisations
- 22. Modifier mon site Web pour autoriser les commentaires anonymes
- 23. Question de conception d'API RESTful: comment autoriser les utilisateurs à créer de nouvelles instances de ressources?
- 24. Restriction des utilisateurs pour qu'ils modifient uniquement leurs données dans le formulaire d'édition SharePoint
- 25. Comment puis-je inclure les images/logos du profil utilisateur sur les commentaires django?
- 26. comment concevoir le système pour que les utilisateurs puissent générer leurs propres objets en utilisant les dlls
- 27. Autoriser l'intégration de vidéos dans les commentaires/textes
- 28. Autoriser seulement certains utilisateurs à modifier ASPxGridView
- 29. utiliser python/django pour permettre aux utilisateurs de se connecter à mon site à l'aide de leurs informations d'identification google
- 30. Autoriser les utilisateurs paypal non enregistrés à effectuer des paiements
J'aime utiliser Http404 dans ce cas, car il révèle peu sur votre système si quelqu'un est en train de déblayer avec des URL. 'si comment.user! = request.user: raise Http404' Vous pouvez aussi utiliser' get_object_or_404' pour récupérer le commentaire qui a plus de sens qu'une erreur 500 si un mauvais message_id est envoyé dans l'URL. –
L'exemple mentionné ci-dessus fonctionne presque. J'aurais dû dire que je voulais que les commentaires soient supprimés au lieu de supprimer les commentaires. Pour ce faire, il semble que je doive envoyer une requête POST. Comment envoyer une demande POST par opposition à une requête GET? – RaDeuX
Vous n'avez pas besoin d'envoyer un POST, vous pouvez simplement imiter ce que fait la vue 'comments'; voir modifier. –