Здравствуйте! Помогите пожалуйста разобраться.
Есть
Class Based View в котором указан
permission_required
. Вопрос у меня следующий. Как переадресовать пользователя на определенный, указанный url (к примеру
reverse_lazy('dashboard')
), если у пользователя нет прав на данную вью?
views.py:from django.contrib.auth.mixins import PermissionRequiredMixin
from django.core.urlresolvers import reverse_lazy
class UserEditView(PermissionRequiredMixin, UpdateView):
template_name = 'users/edit_user.html'
form_class = UserEditForm
model = User
permission_required = ('auth.change_user')
login_url = None
redirect_field_name = reverse_lazy('dashboard')
В консоли выводятся следующие логи:
LevelName: WARNING | Message: Not Found: /accounts/login/
LevelName: WARNING | Message: "GET /accounts/login/?/=/user/50/edit/ HTTP/1.1" 404 2838
После этого я попробовал в
settings.py добавить:
LOGIN_URL = reverse_lazy('administration_login')
. В таком случаи к консоле уже выводятся следующие логи (но при этом переадресация не произошла):
LevelName: INFO | Message: "POST /user/50/edit/ HTTP/1.1" 302 0
LevelName: INFO | Message: "GET /login/?/=/user/50/edit/ HTTP/1.1" 302 0
LevelName: INFO | Message: "GET / HTTP/1.1" 200 2427
JS:
$(function () {
var loadForm = function () {
var btn = $(this);
$.ajax({
url: btn.attr("data-url"),
type: 'get',
dataType: 'json',
beforeSend: function () {
$("#user-modal").modal("show");
},
success: function (data) {
$("#user-modal .modal-content").html(data.html_form);
}
});
};
var saveForm = function () {
var form = $(this);
$.ajax({
url: form.attr("action"),
data: form.serialize(),
type: form.attr("method"),
dataType: 'json',
success: function (data) {
if (data.form_is_valid) {
$("#users").html(data.html_users);
$("#user-modal").modal("hide");
}
else {
$("#user-modal .modal-content").html(data.html_form);
$("#user-errors").fadeIn("slow");
var error_message = "</br>";
var json_string = JSON.stringify(data.form_errors);
var json_object = jQuery.parseJSON(json_string);
$.each(json_object, function(key, value){
for (var i = 0; i < value.length; i++) {
error_message += value[i] + "</br>";
}
});
$("#user-errors .error-description").html(error_message);
setTimeout(function() {$("#user-errors").fadeOut("slow");}, 10000);
}
},
error: function (xhr, ajaxOptions, thrownError) {
$("#user-errors").fadeIn("slow")
$("#user-errors .error-description").html(thrownError);
setTimeout(function() {$("#user-errors").fadeOut("slow");}, 10000);
},
cache: false,
contentType: false,
processData: false,
});
return false;
};
$("#users").on("click", ".user-edit-btn", loadForm);
$("#user-modal").on("submit", ".user-edit-form", saveForm);
});