Je suis assez confus sur comment puis-je empêcher les utilisateurs d'accéder aux données des autres utilisateurs. P>
Le boîtier à la main: p>
Je crée une application Notes + à faire dans lequel un utilisateur se connecte, crée leurs notes et leurs tâches. P>
Comment créer des liens vers ces notes de telle sorte qu'ils ne sont pas accessibles par d'autres utilisateurs? Comme dans la syntaxe correcte pour userPassestestMixin. P>
Dans l'application TO-DO, comment puis-je conserver les tâches d'un utilisateur uniques? De même pour l'application Note, comment puis-je atteindre cela? P>
3 Réponses :
Vous pouvez utiliser le décorateur de Django appelé "user_passes_test"
Vous pouvez importer comme: p> pour vérifier les documents ici P> P>
Si vous utilisez des fonctions (FBV), vous pouvez utiliser CBV - Vue basée sur la classe - Utilisation de userPassestestMixin p> si demande.user == item.user == Item.user code>
Cela semble cool mais qu'en est-il des URLS.PY? les urls.py auraient probablement quelque chose comme chemin ('post /
Je ne sais pas ce que vous entendez par "Créer des liens". Pour ce que vous décrivez, les liens ne changent pas pour les personnes qui ont accès ou non. La différence si un utilisateur qui possède la note 5 et va à Utilisation de vues basées sur la classe, Ceci est facile à faire. p> si vous souhaitez simplement diriger les utilisateurs vers une autre page, vous feriez quelque chose comme: P> / note / 5 / code>, ils doivent pouvoir voir leur note, mais si un autre utilisateur va à
/ Note / Note / 5 / Ils devraient soit 1) Obtenir une erreur 404 (note non trouvée) ou 403 (la permission refusée) juste être redirigée vers une autre page (par exemple, la page d'accueil), peut-être avec un message.
empêche l'accès aux vues h2>
from django.utils.decorators import method_decorator
from django.contrib.auth.decorators import login_required
from django.contrib import messages
class NoteView(DetailView):
model = Note
template_name = 'note/details.html'
def get_context_data(self, **kwargs):
context = super(NoteView, self).get_context_data(**kwargs)
# Add any special context for the template
return context
@method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):
note = self.get_objet()
if note and not note.user == self.request.user:
messages.error(
self.request,
'You are not allowed to access this Note'
)
return HttpResponseRedirect('/home')
return super(NoteView, self).dispatch(request, *args, **kwargs)
Merci beaucoup, mais je pense que je l'ai maintenant: p. J'ai utilisé la UserPassestestMixin pour l'erreur interdite 403. classesLisview (loginrequirepirémixin, listview): Modèle = notes context_object_name = 'notes' def get_queryset (auto): retour notes.Object.filter (utilisateur = auto.request.utiliser) code> La userPassestestMixin a été utilisée sur le Mettez à jour, créez et supprimez des vues.
Cela peut remplacer l'autre méthode, mais étant donné que userPassestestMixin ne prend que l'utilisateur comme un argument, vous devez toujours appeler get_Object ou quelque chose pour obtenir l'objet, il s'agit donc d'une solution beaucoup plus courante pour écraser cette fonction Get_Object. Mais c'est à vous de décider.
Ouais exactement j'ai écrit une fonction de test. def test_func (auto): Notes = Self.get_Object () Si auto.Request.user == Remarques.User: retourne vrai code>