我有一个第三方应用,包含在我的应用中:
urlpatterns = [
url(r'webhook/', include('telegram.urls', namespace='api_webhook')),
]
让我们说电报应用程序有这样的网址配置:
urlpatterns = [
url(r'^(?P<token>[-_:a-zA-Z0-9]+)/$', TelegramView.as_view(), name='api_webhook'),
]
现在我想这样做,token
参数只是我自己的标记。我们假设我有一个令牌jbhgfjkljnmbvgcfhjbmnbv
,那么我只想接受<mysite>.com/webhook/jbhgfjkljnmbvgcfhjbmnbv
的请求。我该怎么做呢?
如果我只是包含电报应用程序的网址,那么我的应用程序将接受与其他人的请求,这将导致问题。
答案 0 :(得分:1)
如果这只是一个视图,您可以创建自己的视图并调用它:
from other_app.views import other_view
def is_valid(token):
"""Your token validation logic here."""
return token == "XYZZY"
def my_view(request, token):
if not is_valid(token):
return HttpResponseForbidden("Bad token")
return other_view(token)
如果您需要检查应用中的所有观看次数,请创建一个小middleware:
def is_valid(token):
return token == "XYZZY"
class CheckTokenMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response = self.get_response(request)
return response
def process_view(self, request, view_func, view_args, view_kwargs):
if request.resolver_match.namespace == "api_webhook":
if not is_valid(view_kwargs.get('token')):
return HttpResponseForbidden("bad token")
return None
请务必将此添加到settings.MIDDLEWARE
!