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 %}