Alcuni utenti hanno la possibilità di vedere una determinata vista.È possibile combinare PermissionRequiredMixin e LoginRequiredMixin?
Per consentire agli utenti di accedere e si lamentano con un 403 Forbidden
per quegli utenti che non possono vedere che login, posso utilizzare il seguente (come spiegato here):
@permission_required('polls.can_vote', raise_exception=True)
@login_required
def my_view(request):
...
Questo funziona davvero come previsto. Ma tutte le mie opinioni sono viste basate su classi. Dal momento che Django 1.9 (finalmente!) Ci sono un bel po 'di mixin per fare cose che erano possibili solo attraverso i decoratori. Tuttavia ...
class MyClassView(LoginRequiredMixin, PermissionRequiredMixin, TemplateView):
raise_exception = <???>
permission_required = 'polls.can_vote'
template_name = 'poll_vote.html'
questo non funziona. Poiché il flag raise_exception
viene utilizzato da entrambi LoginRequiredMixin
e PermissionRequiredMixin
, non riesco a impostare nulla.
- se
raise_exception
èTrue
, un utente che non è connesso in riceve un403 Forbidden
(che io non voglio). - se
raise_exception
èFalse
, un utente che è non permesso di vedere la vista, verrà reindirizzato alla pagina di login, che, perché l'utente è collegato, sarà reindirizzare di nuovo alla pagina. Creare un ciclo di reindirizzamento di fantasia non proprio allettante.
Ovviamente potrei implementare il mio mixin che si comporta come previsto, ma c'è qualche modo Django di farlo nella vista stessa? (non nel urls.py
)
Ok, capisco. Grazie, solo una domanda: il 'LoginRequiredMixin' non è richiesto, non è vero? C'è qualche ragione per cui l'hai messo lì? – MariusSiuram
@MariusSiuram, hai assolutamente ragione. Oltre a ciò, il codice aveva un difetto logico, che è (si spera) risolto ora. –
Vedo, non mi sono reso conto di situazioni in cui un utente non registrato aveva qualche permesso (era quello il difetto logico?), Ma io (penso che io) comprendo appieno il Mixin. Grazie. – MariusSiuram