我正在学习Python/Django堆栈,通过一些培训来构建博客。可能会让这两个django视图DRY-er?
我目前有如下添加新的和编辑现有员额(post_new和post_edit)两个类似的观点:
def post_new(request):
if request.method == "POST":
form = PostForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
post.published_date = timezone.now()
post.save()
return redirect("post_detail", pk=post.pk)
else:
form = PostForm()
return render(request, "blog/post_edit.html", {"form": form})
def post_edit(request, pk):
post = get_object_or_404(Post, pk=pk)
if request.method == "POST":
form = PostForm(request.POST, instance=post)
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
post.published_date = timezone.now()
post.save()
return redirect("post_detail", pk=post.pk)
else:
form = PostForm(instance=post)
return render(request, "blog/post_edit.html", {"form":form})
虽然这些看法做不同的工作,他们分享一些相同的代码。
试图遵循最佳实践(DRY),有没有一种明智的方法来制作这种类似的视图DRYer?或者长时间留下这种长度的观点以便于阅读更好吗?
切换到基于类的视图不能解决重复的代码问题。设置作者和发布日期的代码将被复制,除非您创建一个mixin。这不一定比Gert建议的单一功能更好。 – Alasdair