Выполнение вызовов API из представлений не очень хорошая идея.Вы, вероятно, должны создать другой модуль, который выполняет эту работу.
т.е.когда я создаю приложения для Facebook, я создаю publish.py
файл для хранения всех вызовов «опубликовать в прямом эфире».Функции в этом модуле именуются в зависимости от того, когда они должны быть вызваны.Т.е.:
# publish.py
def authorise_application(user):
# API call "User joined app."
def post_anwser(anwser):
# API call "User posted anwser to quiz".
Тогда ваши представления очень чисты:
# views.py
def post_anwser(request):
...
if form.is_valid():
form.save()
publish.post_anwser(form.instance)
Когда ваш код организован таким образом, вы можете создать декоратор для игнорирования исключений:
# publish.py
def ignore_api_error(fun):
def res(*args, **kwargs):
try:
return fun(*args, **kwargs):
except someservice.ApiError:
return None
return res
@ignore_api_error
def authorised_application(user):
# API call "User joined app."
@ignore_api_error
def posted_anwser(user, anwser):
# API call "User posted anwser to quiz".
Также вы можете создать функцию, которая не игнорируется по умолчанию, и добавить код игнорирования в представлении:
# publish.py
def some_function(user, message):
pass
# views.py
def my_view():
...
publish.ignore_api_error(publish.some_function)(user, message)
...