如何在多次单击python/django时仅刷新一次

如何在多次单击python/django时仅刷新一次,python,django,django-views,Python,Django,Django Views,我有一个使用GCP python API的站点,它在发出请求时非常慢。因此,我使用这些数据缓存了模板的区域,在视图中,我检查缓存是否仍然处于活动状态,然后再发出任何请求(不是复制粘贴的代码,因此如果有任何拼写错误,请忽略em:) def gcpProjectsView(请求): gcpprojects=None 缓存时间=无 如果cache.get(make_template_fragment_key('gcp')为无: cached_time=timezone.now() gcpproject

我有一个使用GCP python API的站点,它在发出请求时非常慢。因此,我使用这些数据缓存了模板的区域,在视图中,我检查缓存是否仍然处于活动状态,然后再发出任何请求(不是复制粘贴的代码,因此如果有任何拼写错误,请忽略em:)

def gcpProjectsView(请求):
gcpprojects=None
缓存时间=无
如果cache.get(make_template_fragment_key('gcp')为无:
cached_time=timezone.now()
gcpprojects=获取\u gcp\u项目()
返回呈现(请求'gcp/gcpprojects.html',{'gcpprojects':gcpprojects,'last_update':cache_time})
要手动更新数据,我有一个指向此视图的刷新按钮:

def刷新\u gcp(请求):
cache.delete(生成模板片段密钥('gcp'))
返回重定向('gcpProjectsView')

问题是,如果用户单击刷新按钮5次,视图将进行5次GCP Api调用,则只需执行1次。如何解决此问题?

使用django会话:

def refresh_gcp(request):
   clicked = request.session.get("click")
   if clicked:
       return render(request,"your_html",{"disable":True})  
       # Set Button disable or not in your html by using context...
   else:
       request.session["click"]="user_click"
       cache.delete(make_template_fragment_key('gcp'))
       return render(request,"your_html",{"disable":False})

我的建议是使用带有按钮的简单表单。单击时,可以使用简单的javascript禁用按钮

因为您要重定向回视图中的同一模板,所以按钮“刷新”后应再次启用

在本例中,代码段用指向
refresh\u gcp
的url替换操作


刷新

刷新按钮是在表单中还是只是一个链接?只是一个链接,但如果有助于了解答案,它也可以是表单!我试试看。我被if name:line搞糊涂了,名字从哪里来?@Colonbracket抱歉,这是我的错…我编辑了我的答案。谢谢,这是一个比我想象的更简单的解决方案。没问题。很高兴它成功了!