Python localhost在Django中将您重定向了太多次

Python localhost在Django中将您重定向了太多次,python,django,Python,Django,我正在使用user\u passes\u testdecorator。只有在有post请求时,视图blog\u update\u视图才会重定向。那么,当一个非管理员用户试图更新博客时,为什么我会收到这么多重定向?我 def check_admin(user): return user.is_superuser @user_passes_test(check_admin) def blog_update_view(request, blog_slug): blog = get_ob

我正在使用
user\u passes\u test
decorator。只有在有post请求时,视图
blog\u update\u视图
才会重定向。那么,当一个非管理员用户试图更新博客时,为什么我会收到这么多重定向?我

def check_admin(user):
   return user.is_superuser

@user_passes_test(check_admin)
def blog_update_view(request, blog_slug):
    blog = get_object_or_404(Blog, slug=blog_slug)
    if request.method == 'POST':
        form = BlogForm(request.POST, request.FILES, instance=blog)
        if form.is_valid():
            form.save()
            messages.success(request, 'Blog updated!!')
            return redirect(blog.get_absolute_url())

    form = BlogForm(instance=blog)

    context = {
        'form': form,
        'blog': blog,
    }
    
    return render(request, 'blogs/blog_update.html', context)
我的
url.py

app_name = 'blogs'
urlpatterns = [
    path('category/<slug:category_slug>/',
         blog_category_view, name='blog_category'),
    path('tag/<slug:tag_slug>/',
         blog_tag_view, name='blog_tag'),
    path('new/', blog_create_view, name='blog_create'),
    path('<slug:blog_slug>/update/', blog_update_view, name='blog_update'),
    path('like/', like_blog_view, name='like_blog'),
    path('search/', SearchBlog.as_view(), name='search_blog'),
    path('<slug:blog_slug>/', blog_detail, name='blog_detail'),
    path('', blog_home_view, name='home'),
]
app_name='blogs'
URL模式=[
路径('category/',
blog_category_view,name='blog_category'),
路径('标记/',
博客标签视图,name='blog标签',
路径('new/',blog_create_view,name='blog_create'),
路径('/update/',blog_update_view,name='blog_update'),
路径('like/',like_blog_view,name='like_blog'),
路径('search/',SearchBlog.as_view(),name='search_blog'),
路径('/',blog_detail,name='blog_detail'),
路径(“”,blog\u home\u view,name='home'),
]
具有
login\u url
参数,当函数返回
False
时,该参数将获取用户重定向的url(在这种情况下)。默认情况下,此值为
settings.LOGIN\u URL
。但是没有必要向已经登录的用户显示登录表单,因此视图会将用户进一步重定向到
设置。login\u REDIRECT\u URL

要避免这种行为:

  • 或者为
    用户通过测试()
    中的
    login\u url
    参数提供不同的值,这样就少了一个重定向

  • 通过在模板中隐藏表单/提交按钮,首先防止非管理员访问此表单/功能

{%if user.is_superuser%}
...  ... 
{%else%}
{{blogpost}}
{%endif%}

您有什么办法解决我的问题吗?我只为超级用户需要这个视图?那么不向非超级用户提供那个表单吗?更新的回答我在模板中这样做了,但如何在视图中防止它?有技术知识的人可以添加
/update/
,并且可以轻松访问更新博客。我尝试了
if not request.user==request.is_superuser:return PermissionDenied
它也不起作用。
{% if user.is_superuser %}
    <form> ... <input type="submit" value="update blogpost"> ... </form>
{% else %}
    <div class="view-only"> {{ blogpost }} </div>
{% endif %}