我有以下网址http://localhost:8000/enthusiastically-synergize-optimal-results-after-proactive-total-linkage/edit/
,并希望在此函数中从该网址访问该条,以便我可以使用它。在基于类的视图中,我可以使用self.kwargs.get('smthng')
并抓住它,但不知道我该怎么做:
def permission_of_user_for_posts(request):
post = get_object_or_404(Blog, slug= request.GET.get('blog_slug'))
if request.user.username == post.author:
return True
return False
@user_passes_test(permission_of_user_for_posts)
def blog_update(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.instance.author = request.user
form.save()
return redirect('/')
form = BlogForm(instance=blog)
context= {
'form': form
}
return render(request, 'blogs/form.html', context)
还是在permission_of_user_for_posts
函数中我做错了什么?请帮我谢谢你
编辑:这是网址
urlpatterns = [
path('', blogs_view.home, name='home'),
path('blogs/', blogs_view.blogs, name='blogs'),
path('<slug:blog_slug>', blogs_view.blog_detail, name='blog_detail'),
path('post/', blogs_view.blog_create, name='blog_create'),
path('<slug:blog_slug>/edit/', blogs_view.blog_update, name='blog_update'),
path('<slug:blog_slug>/delete/', blogs_view.blog_delete, name='blog_delete'),
]
答案 0 :(得分:1)
执行此操作的方法是根本不使用装饰器或单独的函数。只需查看视图中的帖子即可:
def blog_update(request, blog_slug):
blog = get_object_or_404(Blog, slug=blog_slug)
if not request.user == blog.author:
raise PermissionDenied
if request.method == 'POST':
...