gpt4 book ai didi

python - django中的调度用于什么?

转载 作者:IT老高 更新时间:2023-10-28 21:18:49 24 4
gpt4 key购买 nike

我一直在尝试围绕 dispatch 方法,尤其是在 Django 中。但是,我似乎无法弄清楚它到底做了什么。我试图从 Django 文档中获得理解,但没有发现它们可以提供有关该主题的信息。据我了解,它是一个监听器,可以监听页面上发生的所有事件,但我不确定是否是这种情况?

class OrderDetail(DetailView):
model = Order

def **dispatch**(self, request, *args, **kwargs):
try:
user_check_id = self.request.session.get("user_checkout_id")
user_checkout = UserCheckout.objects.get(id=user_check_id)
except UserCheckout.DoesNotExist:
user_checkout = UserCheckout.objects.get(user=request.user)
except:
user_checkout = None

obj = self.get_object()
if obj.user == user_checkout and user_checkout is not None:
return super(OrderDetail, self).dispatch(request, *args, **kwargs)
else:
raise Http404

最佳答案

dispatch 方法接收请求并最终返回响应。通常,它通过调用(即调度到)另一个方法如get来返回响应。将其视为请求和响应之间的中间人。

通常,它只是决定应该使用类中的什么方法(例如 get()post() 等)(即 dispatched) 基于请求中使用的 HTTP 方法。类似的东西

def dispatch(self, request, *args, **kwargs):
if request.method == 'GET':
return self.get(*args, **kwargs)
elif request.method == 'POST':
return self.post(*args, **kwargs)
elif #... and so on

您可以使用自己的调度方法来更改此行为,以调用您想要返回 HTTP 响应甚至“拦截”的任何方法,并修改最终到达这些方法的参数。例如,您可以使用它来阻止/过滤某些类型的请求,甚至注入(inject)参数...

def dispatch(self, request, *args, **kwargs):
"""Updates the keyword args to always have 'foo' with the value 'bar'"""
if 'foo' in kwargs:
# Block requests that attempt to provide their own foo value
return HttpResponse(status_code=400)
kwargs.update({'foo': 'bar'}) # inject the foo value
# now process dispatch as it otherwise normally would
return super().dispatch(request, *args, **kwargs)

但关键概念是它是请求的入口点,并最终负责返回响应。

关于python - django中的调度用于什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47808652/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com