在视图中避免出现业务逻辑的最佳实践是将业务逻辑放在模型或者服务层中,视图只负责展示数据和用户交互。
以下是一个代码示例:
模型层(Model):
class User(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
def is_adult(self):
return self.age >= 18
服务层(Service):
class UserService:
def get_users(self):
return User.objects.all()
def get_adult_users(self):
return User.objects.filter(age__gte=18)
视图层(View):
class UserListView(View):
def get(self, request):
user_service = UserService()
users = user_service.get_users()
return render(request, 'user_list.html', {'users': users})
class AdultUserListView(View):
def get(self, request):
user_service = UserService()
adult_users = user_service.get_adult_users()
return render(request, 'adult_user_list.html', {'adult_users': adult_users})
在上面的示例中,模型层定义了用户的数据结构,并提供一个 is_adult
方法来判断用户是否成年。服务层定义了对用户数据的操作,包括获取所有用户和获取成年用户。视图层负责处理请求和响应,将数据传递给模板进行展示。
这样的架构可以使视图层保持简洁,只负责处理请求和响应,将业务逻辑封装在模型和服务层中,提高代码的可维护性和可测试性。
下一篇:避免在视图中进行重型计算