Совместное использование кода среди представлений в Джанго - PullRequest
0 голосов
/ 03 августа 2011

Простите, если это неоднократно спрашивали, но я нигде не мог найти пример этого.

Я изо всех сил пытаюсь понять, как делиться кодом между функциями просмотра в Django. Например, я хочу проверить, аутентифицирован ли пользователь во многих представлениях. Если это не так, я хотел бы зарегистрировать некоторую информацию об этом запросе (IP-адрес и т. Д.), А затем отобразить постоянное сообщение о необходимости аутентификации.

Какой-нибудь совет, как этого добиться?

Ответы [ 3 ]

2 голосов
/ 03 августа 2011

Вы можете написать этот код в функции, а затем вызвать ее во многих представлениях.
Например:

def check_login():  
     pass  
def view1():
     check_login()  
     pass  
def view2():
     check_login()  
     pass
1 голос
/ 22 января 2012

Это, вероятно, лучше всего сделать, создав файл utils.py, а не представление.Представления, которые не возвращают объект HTTPResponse, технически недопустимы.

См .: https://docs.djangoproject.com/en/dev/intro/tutorial03/#write-views-that-actually-do-something

"Каждое представление отвечает за выполнение одной из двух вещей: Возврат объекта HttpResponseсодержащий содержимое для запрашиваемой страницы или вызывающее исключение, такое как Http404. "... "Все, что хочет Django, - это HttpResponse. Или исключение."

Heroku выдаст ошибку, если представление не возвращает HttpResponse.

Что я обычно делаю вэтот экземпляр - написать функцию в отдельном файле с именем utils.py, импортировать ее и использовать из файлов приложения, которые в ней нуждаются.

from utils import check_login

def view1(request):
     check_login(request)  
     pass  
def view2(request):
     check_login(request)  
     pass
0 голосов
/ 03 августа 2011

Одним из простых решений было бы использование декораторов, как в login_required в django, однако, если вам нужно что-то более сложное, возможно, вам нужно что-то вроде представлений на основе классов

...