Django 干燥和#x27;改变我的观点

Django 干燥和#x27;改变我的观点,django,django-models,Django,Django Models,我在我的views.py中有一个丑陋的模式,我的视图中几乎每个方法都包含 Products.objects.active().filter(user=request.user)#返回当前用户的所有产品 或 这是因为每个方法都依赖于用户。有没有办法将其提取到我的模型或干的东西中,这样我就不需要在每个方法中重复自己的操作?为什么不编写一个服务函数?或者使用用户对象(如果可用)装饰您的函数 services.py def get_products(request, *args, **kwargs):

我在我的views.py中有一个丑陋的模式,我的视图中几乎每个方法都包含

Products.objects.active().filter(user=request.user)#返回当前用户的所有产品


这是因为每个方法都依赖于用户。有没有办法将其提取到我的模型或干的东西中,这样我就不需要在每个方法中重复自己的操作?

为什么不编写一个服务函数?或者使用用户对象(如果可用)装饰您的函数

services.py

def get_products(request, *args, **kwargs):
    user = request.user
    return somethings **depending** on the arguments passed...

在基类的方法中使用并放置公共代码。大概是这样的:

从django.contrib.auth.decorators导入登录名\u必需
从django.utils.decorators导入方法\u decorator
从django.views导入泛型
类UserView(generic.View):
"""
一种通用视图,需要经过身份验证的用户并仅显示
属于该用户的活动产品。
"""
def get_产品(自身):
"""
返回属于已验证用户的产品查询集。
"""
返回self.request.user.product\u set.all()
@方法\u装饰器(需要登录)
def调度(自身、*args、**kwargs):
返回super(UserView,self).dispatch(*args,**kwargs)
services.py

def get_products(request, *args, **kwargs):
    user = request.user
    return somethings **depending** on the arguments passed...
views.py

def someview(request):
    context['user_products'] = services.get_products(request, commonCase)
    render ...