编写可配置的步骤函数

时间:2016-04-19 16:24:03

标签: python django

假设我为3种类型的会员资格提供3种不同的收费表:

正常

0 - 1小时:每小时10美元

1 - 5小时:每小时9美元

5 - 12小时:每小时8美元

会员

0 - 1小时:每小时8美元

1 - 5小时:每小时7美元

5 - 12小时:每小时6美元

高级

0 - 1小时:每小时4美元

1 - 5小时:每小时3美元

5 - 12小时:每小时2美元

这些费用可在前端配置。

动态存储它们并执行计算的最佳做法是什么?

我有一个想法,但我相信那里有更好的想法:

SQL表:membership_rates

membership,min_hr,max_hr,rate
normal,0,1,10
normal,1,5,9
normal,5,12,8
member,0,1,8
member,1,5,7
member,5,12,6
premium,0,1,4
premium,1,5,3
premium,5,12,2        

然后在伪代码中

find out membership type
query the rates for the membership type in an array

while rent_amt is larger than max_hr of the query:
  rate = selected_rate from the bracket
  find next smaller rate


return the rate * the no. of hours used

Python(Django)中的一个例子是:

amt_used = rent.amt_used
membership = member.membership
rates = Rates.objects.filter(membership=membership).order_by(max_rate)
rate = 0
while amt_used > rates.max_hr:
    rate = rates.rate

return amt_used * rate

1 个答案:

答案 0 :(得分:0)

我建议你把你的值放在一个变量中:

CHARGES_SCHEDULES = {"normal" : {0 : {"time" : 1,
                                      "per_hour" : 10},
                                 {1 : {"time" : 5,
                                       "per_hour" : 9}},
                                 {5 : {"time" : 12,
                                       "per_hour" : 8}},},
                     "member" : {0 : {"time" : 1,
                                      "per_hour" : 8},
                                 {1 : {"time" : 5,
                                       "per_hour" : 7}},
                                 {5 : {"time" : 12,
                                       "per_hour" : 6}},},
                     "premium" : {0 : {"time" : 1,
                                       "per_hour" : 4},
                                 {1 : {"time" : 5,
                                       "per_hour" : 3}},
                                 {5 : {"time" : 12,
                                       "per_hour" : 2}},}}

(当然,您可以更改变量结构。我在这里使用了词典,但您可以使用元组,列表或任何更适合您需求的内容。)

然后您可以将其直接放在 settings.py 或其他python文件中(例如 charges.py ),然后将其导入 settings.py

<强> 1。解决方案1:

直接将其放在 settings.py 中,然后在需要时只需在python文件中导入值:

<强> anyfile.py

from django.conf import settings

print(settings.CHARGES_SCHEDULES["member"][1]["time"])

<强> 2。解决方案2:

将它放在一个单独的python文件中(例如: charges.py )并将此文件导入 settings.py

<强> settings.py

from charges import CHARGES_SCHEDULES

然后只需将其导入您之前的其他python文件中(参见解决方案1)。