일반적인 작업의 기본 구현을 포함하는 '핵심'Django 제품이 있지만 그 구현을 재정의하거나 (쉽게 사용자 정의 할 수 있도록 사용자 정의 할 수 있습니다).어떻게 장고에서 함수를 재정의 할 수 있습니까?
핵심 제품에서 예를 들어, 나는 사용자가 '모든 알림'다시 전송 버튼을 클릭 할 수있는 전망이있을 수 있습니다 아마도,이 제품의 일부 배포에 다음
# in core/views.py
... imports etc...
from core.tasks import resend_notifications
def handle_user_resend_request(request, user_id):
user = get_object_or_404(id=user_id)
if request.method == 'POST':
for follower in user.followers:
resend_notifications(follower.id)
... etc etc ...
# in core/tasks.py
... imports etc...
def resend_notifications(id):
send_email(User.objects.get(id=id))
그리고를 '
# in customer_specific/tasks.py
... imports etc ...
def resend_notifications(id):
person = User.objects.get(id=id)
if '@super-hack.email.com' in person.email:
# This is not a real email, send via the magic portal
send_via_magic(person)
else:
send_email(person)
# and send via fax for good measure
send_fax(person)
가 어떻게이 customer_specific 버전을 가리 키도록 views.py
파일에 resend_notifications
기능을합니까 : 같은 resend_notifications의 요구는보고 하는가?
장고 설정에서이를 정의하고 액세스를 공유해야합니까? 작업이 실제로 셀러리 작업 일 경우 어떻게해야합니까?
NB : 실제로 내가 가지고있는 작업은 셀러 리 작업으로 정의됩니다. (나는이 질문을 좀 더 일반적이라고 생각하기 때문에이 세부 사항을 제거했습니다). 전역 객체를 변경하는 사용자 정의 데코레이터 태그를 사용해 보았습니다. 그러나 그 방법은 여러 가지 이유로 명확히 구분됩니다.
추신 : 나는 이것이 의존성 주입 질문이라고 생각하지만, 장고에서는 공통점이 없다.
나는 이것이 좋은 선택임을 분명히 볼 수 있습니다. 그러나 제 경우에는 '코어'모듈과 '사용자 정의'모듈 모두에서이 불가 지론적인 액세스를 가질 수 있어야합니다. 나는 이것이 커스텀 모듈에 대한 명백한 지식을 요구하는 코어없이 '코어'에 포함될 수있는 방법을 생각할 수 없다. ie'def forms() : ...'함수를'core/tasks.py'에 넣어야하지만'customer_specific'에서 아무것도 가져올 수 없습니다. – Doddie
흠, 몇 번 더 대답을 읽었습니다. 나는 당신이 옳을 수도 있다고 생각하지만'def forms() : ..'스타일 함수는 어떤 종류의 설정/app config를 사용해야합니다. – Doddie
당신은 본질적으로 파이썬 모듈 수준에서 추상화 패턴을 사용하려고합니다. 그리고 제가 이것을하기 위해 내놓은 가장 실용적인 방법은 제가 일반적으로 상호 작용하는 모듈을 작성하는 것입니다.이 모듈은 다른 개념의 모듈을 (적어도 개념적으로)) 호환 인터페이스. – Steve