我正在构建像应用程序这样的pastebin。到目前为止,大多数基本功能都运行良好。 我想在粘贴中添加密码功能,但是这些类型的CBV示例未在django文档中显示。 我正在使用CBV,详细视图是:
class DetailPaste(DetailView):
template_name = 'pastebin/detail_view.html'
def get_queryset(self):
pk = self.kwargs['pk']
qs = PasteInstance.objects.filter(pk=pk)
if qs.exists() :
if qs[0].public_view:
return qs
elif self.request.user.is_authenticated:
return qs
else:
raise Http404()
else:
raise Http404()
我知道我可以使用def方法过程定义视图,但是我想知道是否存在使用CBV进行此操作的优雅方法。 我的模型是:
class PasteInstance(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
text = models.TextField(max_length=400)
timestamp = models.DateTimeField(auto_now_add=True)
public_view = models.BooleanField(
default=False, verbose_name='Make this paste public?')
password = models.CharField(
max_length=15, blank=True, verbose_name='Protect with password ?')