【发布时间】:2018-05-10 15:04:39
【问题描述】:
如果基于类的视图对用户不可用(他没有权限),我想将用户重定向到 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')in 终端我会看到下一个日志,但它不会重定向用户:
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
问题:有人可以说如果用户没有权限,如何正确重定向到自定义 url?
JS:
$(function () {
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;
};
$("#user-modal").on("submit", ".user-edit-form", saveForm);
});
【问题讨论】:
-
请注意,您的
permission_required = ('auth.change_user')看起来令人困惑。我要么删除括号并使用permission_required = 'auth.change_user',要么添加逗号使其成为一个元组并使用permission_required = ('auth.change_user',)。 -
好的,我按照你说的做了,但是不能解决问题=(你还有什么想法吗?
标签: python django python-2.7 django-views django-1.11