对于我的许多视图(但不是所有视图),我必须进行一些验证,以确保登录的用户能够访问他们试图访问的对象。对于30多个视图,我有以下代码:
def whatever_view_name(request, id, access_id):
check = Access.objects.filter(user=request.user, id=access_id)
if check:
access_object = check[0]
else:
return redirect(reverse("create_new_access_object"))
.... and now my view-specific code will follow ...
所以我需要检查这个特定用户是否有特定的数据库记录(Access)。这个代码重复了很多次,这似乎是不对的。我一直在考虑使用中间件,但是有两个问题:a)我需要在视图中使用这个对象(请参见变量access_object
,所以我担心如果我将它放在中间件中,我必须查询它两次),以及b)我不必总是这样做,所以我想知道如果这是中间件,如何只对一些视图而不是所有视图运行它。你知道吗
有什么想法吗?你知道吗
我能想到的一种方法是使用继承。我们可以将普通的东西重构成一个超级视图类,然后在子视图类中进行扩展。你知道吗
像这样:
我们可以有这样的超级班
然后我们可以在视图中扩展这个类和用法。你知道吗
这种方法更具可读性。任何看到代码的人都可以看到超类并理解代码流。你知道吗
其他一些方法是
您可以为此编写装饰程序:
相关问题 更多 >
编程相关推荐