我应该把这些功能放在哪里?在models.py或views.py里面?

时间:2015-12-18 18:17:33

标签: python django django-models django-views

我正在使用Django开发一个Web应用程序。 很少有函数,如get_tokenget_url等,可以从数据库中获取数据,也可以修改数据库。

我应该把这些功能放在哪里?在views.pymodels.py内?

由于这些函数直接与数据库交互,我正在考虑将这些函数放在models.py文件中以将这些函数用作抽象。 我想知道最佳做法。

1 个答案:

答案 0 :(得分:1)

  • models.py用于定义类(每个类占用一个 数据库中的表)。
  • views.py包含使用的所有函数 返回django呈现的页面。它肯定包含视图中调用的任何视图函数和其他函数。

因为你的函数get_token()& get_url(),正在处理数据(而不是创建,修改或删除表),我建议你把它们放在views.py文件中。

您可以采用的示例方式如下:

<强> models.py:

Dim Sql As String = "SELECT Tabla1.Campo1, Tabla1.Campo2,Tabla2.Campo3"
Sql += " FROM Tabla1 LEFT JOIN Tabla2 ON Tabla1.ID = Tabla2.ID"

<强> views.py

class UrlTokenPair(models.Model):
      url = models.models.TextField(blank=True)
      token = models.TextField(blank=True)

然后,您可以在views.py文件中的任何视图函数中调用上述函数get_url和get_token。你也可以在另一个.py文件中调用它们,只需将它们称为:

from app_name.models import UrlTokenPair

def get_token(input_url):
    if UrlTokenPair.objects.filter(url=input_url):
       return UrlTokenPair.objects.get(url=input_url).token
    else:
       new_entry = UrlTokenPair.objects.create(url=input_url)
       new_entry.token = yourAlgoForToken()
       new_entry.save()
       return new_entry.token

def get_url(input_token):
    if UrlTokenPair.objects.filter(token=input_token):
       return UrlTokenPair.objects.get(url=input_token).url
    else:
       new_entry = UrlTokenPair.objects.create(token=input_token)
       new_entry.url = yourAlgoForUrl()
       new_entry.save()
       return new_entry.url