我想将用户重定向到网址(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 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);
});
答案 0 :(得分:0)
您滥用redirect_field_name
。它应该是存储下一个URL的字段的名称,默认为字符串'next'
。除非你有充分的理由改变它,否则你应该删除该行并让Django使用默认值。
使用login_url
配置您的视图以重定向到信息中心。
class UserEditView(PermissionRequiredMixin, UpdateView):
login_url = reverse_lazy('dashboard')