从多个视图调用同一函数

时间:2019-04-21 21:06:29

标签: django

我希望能够从Django的不同视图调用函数。例如,假设我需要从各种视图中生成一个随机数,我不想在每个视图中都重复相同的“随机数”代码-我只想“调用一个函数”。

为了使这个问题简短,我将大大简化以下代码:

views.py

def viewOne(request):
#code for this view, including needing to generate a random number
import random
myrandomnumber = random.randint(1,21)*5


def viewTwo(request):
#code for this view, including needing to generate a random number
import random
myrandomnumber = random.randint(1,21)*5

如您所见,我在两个视图中都使用相同的代码来生成一个随机数。如果要更新生成随机数的方式,则必须在两个视图中都进行更新。

这是我想做的事情:

views.py

def createRandomNumber():
import random
myrandomnumber = random.randint(1,21)*5


def viewOne(request):
#code for this view, including needing to generate a random number
createRandomNumber()

def viewTwo(request):
#code for this view, including needing to generate a random number
createRandomNumber()

非常感谢您能给我的帮助

3 个答案:

答案 0 :(得分:1)

为此,您需要提取函数,以便所有需要该函数的视图都可以使用该函数。例如,您可以在django应用中创建一个名为utils.py的文件,在其中定义函数并将其导入views.py

utils.py

import random

def createRandomNumber():
    return random.randint(1,21)*5

views.py

from utils import createRandomNumber

def viewOne(request):
    createRandomNumber()

def viewTwo(request):
    createRandomNumber()

答案 1 :(得分:0)

只需将要重用的代码包装在函数中,然后在需要时调用该函数。

此外,请勿在函数内部使用import语句!

CREATE TABLE DDR_Rental
 (customer_ID NUMBER(5),
  rental_date DATE,
  rent_fee NUMBER(3,2) CONSTRAINT SYS_RENTAL_FEE_NN NOT NULL,
  film_title VARCHAR2(20),
  start_date DATE,
  expiry_date DATE,
  rating NUMBER(5),
  CONSTRAINT SYS_RENTAL_PK PRIMARY KEY ((customer_ID), (rental_date), (film_title)),
  CONSTRAINT SYS_RENTAL_CUS_ID_FK1 FOREIGN KEY (customer_ID) REFERENCES 
     DDR_CUSTOMER(CUSTOMER_ID),
  CONSTRAINT SYS_RENTAL_FILM_TITLE_FK2 FOREIGN KEY (film_title) REFERENCES
     DDR_MOVIE_TITLE(FILM_TITLE),
  CONSTRAINT SYS_RENTAL_EXP_DATE_CK CHECK (expiry_date >= start_date),
  CONSTRAINT SYS_RENTAL_START_DATE_CK CHECK (start_date >= rental_date),
  CONSTRAINT SYS_RENTAL_RATING_CK CHECK (REGEXP_LIKE(rating,('[12345]'))));

如果需要在不同文件中使用该代码段,请使用import语句。因此,假设您正在使用与views.py位于同一目录中的文件,只需添加

#views.py
import random
def createRandomNumber():
    myRandomNumber = random.randint(1,21)*5
    return myRandomNumber


def viewOne(request):
#code for this view, including needing to generate a random number
    randomNumber = createRandomNumber()

def viewTwo(request):
#code for this view, including needing to generate a random number
    randomNumber = createRandomNumber()

答案 2 :(得分:0)

根据您对随机数的处理方式,此逻辑在模型或管理器中可能会更好(例如,选择随机实例)。那可能意味着您只需要一个地方,或者您可能仍想将其分离为单独的util函数。