【发布时间】:2025-11-23 19:45:02
【问题描述】:
我正在尝试实现上传限制功能。 我发现除了 count 值之外,一切都按预期工作。
请找到下面的views.py代码。
def CTA_upload(request):
i = 1
count = [0,]
print('Counter value at starting::::::::: :', len(count))
allcts = CTS.objects.all()
try:
if len(count) <= 14:
if request.method == 'POST':
movie_resource = CTAResource()
print('movie_resource', movie_resource)
dataset = Dataset()
new_movie = request.FILES['file']
if not new_movie.name.endswith('xls'):
messages.info(request, 'Sorry Wrong File Format.Please Upload valid format')
return render(request, 'app/uploadctsa.html')
messages.info(request, 'stage1 fired:Processing file type is Okay :)...')
imported_data = dataset.load(new_movie.read(), format='xls')
print('abcdefghijk:', type(imported_data))
messages.info(request, 'Stage2 fired:*** Now checking data inside imported data :)')
for data in imported_data:
value = CTA(
data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7], data[8],
)
print('Value 1 ::::', value)
print('Final Count After entering < = 15:', len(count))
messages.info(request, 'Stage3 fired:*** Now entering to check count <= :)')
i = i + 1
count.append(i)
print('Count After Appending Value:',count)
value.save()
else:
print('Final ***else Count when > = is equal to 15:', len(count))
messages.info(request, 'Sorry you are uploading more than 15 records so records')
print('Final count jo hai variable me store:', count)
messages.info(request,
'Sleeping For 10 sec and then it will clear count value. so you can upload extra data after 10 sec..')
time.sleep(10)
count.clear()
print('Counter value after Clearing::::::::: :', len(count))
messages.info(request,
'Sorry You have uploaded more data than specified limit./Same Email ID has been observed more than once.Except that other records has been added../nPlease Make sure Email field should be unique.')
except:
messages.info(request,'Sorry You have uploaded more data than specified limit./Same Email ID has been observed more than once.Except that other records has been added../nPlease Make sure Email field should be unique.')
print("Problem hai kuch to")
return render(request,'app/uploadctsa.html')
问题:这里我正在检查计数,所以如果超过 14 条记录,它将不会保存在数据库中。 我想存储计数值,这样如果在 600 秒内如果有人再次上传任何记录,它将检查计数值然后处理(因为在 600 秒后我正在清除计数值)但是这里计数值没有得到保存对于 600 秒内的每次新上传,也是从头开始。
存储计数值的任何方式,以便如果有人上传任何记录,它将检查计数变量中最后存储的值是什么,然后进行处理。
下面是我得到的终端输出:
Counter value at starting::::::::: : 1
[07/Feb/2021 15:40:51] "GET /cts_upload/ HTTP/1.1" 200 4114
Counter value at starting::::::::: : 1
movie_resource <apple.resources.CTSResource object at 0x107d11dd0>
abcdefghijk: <class 'tablib.core.Dataset'>
Value 1 :::: CTS object (2320182568.0)
Final Count After entering < = 15: 1
Count After Appending Value: [0, 2]
Value 1 :::: CTS object (2319852359.0)
Final Count After entering < = 15: 2
Count After Appending Value: [0, 2, 3]
Value 1 :::: CTS object (2304621214.0)
Final Count After entering < = 15: 3
Count After Appending Value: [0, 2, 3, 4]
Value 1 :::: CTS object (2304611412.0)
Final Count After entering < = 15: 4
Count After Appending Value: [0, 2, 3, 4, 5]
Value 1 :::: CTS object (2304447326.0)
Final Count After entering < = 15: 5
Count After Appending Value: [0, 2, 3, 4, 5, 6]
Value 1 :::: CTS object (2304389748.0)
Final Count After entering < = 15: 6
Count After Appending Value: [0, 2, 3, 4, 5, 6, 7]
Value 1 :::: CTS object (2304386109.0)
Final Count After entering < = 15: 7
Count After Appending Value: [0, 2, 3, 4, 5, 6, 7, 8]
Value 1 :::: CTS object (2304383202.0)
Final Count After entering < = 15: 8
Count After Appending Value: [0, 2, 3, 4, 5, 6, 7, 8, 9]
Value 1 :::: CTS object (2304185694.0)
Final Count After entering < = 15: 9
Count After Appending Value: [0, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Value 1 :::: CTS object (2304185187.0)
Final Count After entering < = 15: 10
Count After Appending Value: [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
Value 1 :::: CTS object (2303072735.0)
Final Count After entering < = 15: 11
Count After Appending Value: [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
Value 1 :::: CTS object (2303072734.0)
Final Count After entering < = 15: 12
Count After Appending Value: [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
Value 1 :::: CTS object (2303072717.0)
Final Count After entering < = 15: 13
Count After Appending Value: [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
[07/Feb/2021 15:41:07] "POST /cts_upload/ HTTP/1.1" 200 5254
【问题讨论】:
-
Count 在您的视图中是一个局部变量,这意味着它将针对每个请求进行评估(每个请求都将从一个 0 列表开始)。将此类数据存储在数据库中,以便您可以为每个用户分开限制(不要将计数设为全局变量)。
-
嗨@AbdulAzizBarkat,谢谢!,我是 Django 新手,您能帮我了解如何将其存储在数据库中以及如何在一段时间后(例如 10 小时)重置计数值。
-
你最好遵循 Django 的教程......
-
嗨@AbdulAzizBarkat,谢谢,如果我在全球范围内声明它工作正常,但唯一的问题是 else 块(用户应该知道错误或等待时间)。如何在否则阻止?在这里,我在想如果等待时间为 10 小时,那么线程将等待 10 小时。它会产生任何性能问题吗?
标签: python django sqlite django-models django-views