Django 鸡与蛋题目

打印 上一主题 下一主题

主题 623|帖子 623|积分 1869

"Django 的鸡与蛋题目"通常指的是在开始 Django 项目时,你可能会碰到的一个困境:是先计划数据库模型还是先编写视图和控制器(即视图函数)?
这个题目的实质是在于,Django 的焦点部分是由数据库模型(模型层)、视图(视图层)和控制器(控制器层,通常用视图函数实现)组成的。在开发过程中,你必要计划数据库模型来存储数据,并且你的视图函数必要依靠于这些模型来获取和操作数据。

1、题目配景
在构建一个应用程序时,必要发送一个 API 调用并保存结果信息,同时在保存之前对信息进行处理。在计划过程中,必要思量以下三种方案:


  • 方案 1:创建一个独立的类,该类负责进行 API 调用,处理信息(包括根据业务规则进行检查),然后创建 APIRecord(models.Model) 类的实例。
  • 方案 2:创建一个独立的类,该类包含必要的处理和调用 API 的方法,然后在模型中重写 APIRecord.save() 方法,以调用独立类的 API 方法并保存结果。
  • 方案 3:在模型类中构建必要的 API 调用和响应处理方法(包括检查某些值和其他业务规则)。
尝试过方案 2 后,碰到了机动性方面的题目,但仍然愿意听取建议。目前倾向于方案 1,但还没有确定可能存在的缺点。
2、解决方案
对于这个题目,没有一个一刀切的解决方案,详细的选择取决于详细的计划和编程偏好。以下是一些建议:


  • 方案 1 和方案 3 都可以实现需求,但方案 1 可能会更机动一些,因为独立类可以更轻松地进行重用和测试。
  • 将部分逻辑放在模型类中,可以使代码更简便、更易于维护,因为模型类已经包含了与数据库交互的逻辑。
  • 对于必要从其他字段构建的信息,可以在模型类的内部函数中实现。
  • 对于必要访问其他数据库记载的操作,可以在模型类之外的函数中实现。
  • 对于其他不常见的需求,可以在必要的地方进行计算。
终极,在做出决定之前,可以尝试使用差别的方案进行一些实行,以确定哪种方案最得当详细的需求。
代码示例
  1. # 方案 1:创建一个独立的类
  2. class APICaller:
  3.     def __init__(self, url, payload):
  4.         self.url = url
  5.         self.payload = payload
  6.     def make_api_call(self):
  7.         response = requests.post(self.url, data=self.payload)
  8.         return response.json()
  9.     def process_response(self, response):
  10.         # 检查业务规则和其他逻辑
  11.         return processed_data
  12. # 在视图中使用 APICaller 类
  13. def my_view(request):
  14.     api_caller = APICaller('https://example.com/api/endpoint', {'key': 'value'})
  15.     response = api_caller.make_api_call()
  16.     processed_data = api_caller.process_response(response)
  17.     # 保存数据到数据库
  18.     api_record = APIRecord(data=processed_data)
  19.     api_record.save()
  20. # 方案 2:在模型类中重写 save() 方法
  21. class APIRecord(models.Model):
  22.     data = models.JSONField()
  23.     def save(self, *args, **kwargs):
  24.         # 调用外部函数来处理数据
  25.         processed_data = process_data(self.data)
  26.         # 检查业务规则和其他逻辑
  27.         # 保存数据到数据库
  28.         super().save(*args, **kwargs)
  29. # 方案 3:在模型类中创建方法
  30. class APIRecord(models.Model):
  31.     data = models.JSONField()
  32.     def make_api_call(self):
  33.         # 调用 API 并获取数据
  34.         response = requests.post('https://example.com/api/endpoint', {'key': 'value'})
  35.         return response.json()
  36.     def process_data(self, data):
  37.         # 检查业务规则和其他逻辑
  38.         return processed_data
  39.     def save(self, *args, **kwargs):
  40.         # 调用内部函数来处理数据
  41.         processed_data = self.process_data(self.data)
  42.         # 保存数据到数据库
  43.         super().save(*args, **kwargs)
复制代码
在实际开发中,必要根据项目的详细情况来决定如何解决“鸡与蛋”题目。一些开发者可能更喜欢从数据库模型开始,而另一些开发者可能更愿意先编写视图函数。最紧张的是,保持机动性和适应性,根据项目需求和实际情况来选择合适的方法。
上面就是我整理的所有信息,盼望这些信息对你有帮助!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

万万哇

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表