我对Django Rest Framework(以及一般的Django)很陌生。
我的网址看起来像这样(这是一个示例,而不是真正的网址):
/api/v1/myapp/<param>/users/<user>/
如果<param>
不是来自模型,但它是我在代码中某处定义的3个可能常量之一。
在其他地方我定义了一个函数来检查param是否是有效的
def is_valid_param(param):
...
现在在我的REST视图中,在发出任何请求之前,我想致电is_valid_param
,如果它返回False
,则返回404。
有没有办法在不处理GET,POST,PUT,DELETE,OPTIONS等处理的所有不同视图类方法中重复相同的代码?
答案 0 :(得分:1)
您可以创建一个double longitude = location.getLongitude();
double latitude = location.getLatitude();
ParseGeoPoint geoPoint = new ParseGeoPoint(latitude , longitude );
ParseObject parkingobject = new ParseObject("Cooking");
parkingobject.put("username","Alana");
parkingobject.put("Location", geoPoint );
类来执行此检查。
CheckValidParamMixin
<强> views.py 强>
from django.http import HttpResponseNotFound
class CheckValidParamMixin(object):
def dispatch(self, request, *args, **kwargs):
param = self.kwargs.get('param')
valid_param = is_valid_param(param)
if valid_param:
return super(CheckValidParamMixin, self).dispatch(request, *args, **kwargs)
return HttpResponseNotFound('Invalid param')
在你的观点中,只需继承这个混音。这将提供在任何请求中检查param的功能(如果它是有效的)。
如果发现param有效,它会调用超级class MyView(CheckValidParamMixin, ..):
...
your code
...
,从而产生适当的响应。
如果参数无效,则返回dispatch()
响应,即HTTPResponseNotFound
,其状态代码为404。
答案 1 :(得分:1)
由于您需要为大量视图执行此操作,因此可以在中间件类中执行此操作。我通常会避免这种情况,除非使用mixins或decorator是一项繁重的工作。
class CheckValidParamMiddleware(object):
def process_view(self, request, view, args, kwargs):
if 'param' in kwargs and is_valid_param(kwargs['param']):
raise Http404('invalid param')
return None
请务必将此课程添加到MIDDLEWARE_CLASSES
设置。