태그 보관물: view

view

파이썬 비즈니스 로직을 장고에 정확히 배치 해야하는 곳 필요합니다. 계산을

Django / Python / Web Development를 배우기 시작했습니다. 이 문제로 인해 잠시 동안 문제가 발생했습니다.

Django에서 여러 템플릿으로 응용 프로그램을 만들고 있습니다. 기본적으로 각 템플릿에 대한 응답을 렌더링하는 views.py가 있고 DB를 구성한 models.py가 있습니다. 내 템플릿 중 하나에서 이미지 (내가 할 수있는)를 업로드해야하며 업로드 된 이미지의 기능 (아직 완료되지 않은 기능)을 기반으로하는 논리를 실행해야합니다. 이 논리에는 많은 계산이 필요합니다. 계산을 수행 한 후 로직은 처리 된 일부 정보 (좌표)를 템플릿에 반환해야합니다.

파이썬 파일을 차례로 호출하는 독립형 파이썬 데스크탑 응용 프로그램 에서이 모든 작업을 성공적으로 수행 할 수있었습니다. 그러나 이제는 이것을 웹 응용 프로그램으로 만들고 싶기 때문에 Django 프레임 워크를 사용하기 시작했습니다.

검색을 많이했지만 모든 논리가 포함 된이 Python 파일을 정확히 어디에 배치 해야하는지 파악할 수 없습니다. 다른 클래스 기반 파일 (logic.py)을 가져 와서에서 호출해야 view.py합니까? 나는 많은 개발자들이 Django의 models.py에 비즈니스 로직을 배치하고 있음을 알았습니다. 그러나 모델이 백엔드와 독점적으로 통신해야하기 때문에 직관적으로 옳지 않다고 생각합니다. 도움을 주시면 미리 감사드립니다.



답변

검색을 많이했지만 모든 논리가 포함 된이 Python 파일을 정확히 어디에 배치 해야하는지 파악할 수 없습니다.

요구 사항에 따라 다양한 옵션이 있습니다.

  1. 예를 들어 Image모델에 논리를 추가하십시오 . 이미지 당 메타 데이터를 데이터베이스에 저장해야하고 각 모델 인스턴스 (각 이미지)가 자체적으로 처리되는 경우 유용한 옵션입니다.

  2. 논리를 일반 Python Image클래스 로 추가하십시오 ( 예 🙂 image.py. Django의 어떤 것도 viewsor 또는 models모듈의 논리 이외의 논리를 추가하는 것을 제한하지 않습니다 . 이미지 로직이 Django 앱의 중심 구성 요소 (예 : 이미지 처리 앱) 인 경우이 옵션이 좋습니다.

  3. 논리를 제공하는 별도의 Python 프로젝트를 작성한 다음보기에서 호출하십시오. 이 프로젝트를 Django 앱의 Python 환경에 설치하십시오. 이 옵션은 Django 앱의 목적이 이미지를 업로드하고 보거나 사용자 요청에 직접 응답하여 이미지 처리 결과를 표시하는 것이지만 다른 프로젝트에서도 이미지 처리를 사용할 수있는 경우에 유효합니다.

  4. 비동기 적으로 요청을 처리하고 Django 앱과 별도로 실행되는 별도의 앱을 만듭니다. 이 옵션은 이미지 처리를 앱의 요청주기에서 분리하거나, 많은 수의 이미지를 처리하거나, 요청주기 시간 내에 (예 : 최대 500ms ~ 1 초) 계산하기에 너무 많은 시간이 걸리는 경우에 유용합니다. .

모델이 백엔드와 독점적으로 통신해야하기 때문에 직관적으로 옳지 않다고 생각합니다.

장고에는 백엔드 또는 데이터베이스와 통신하기 위해 모델이 필요한 것은 없습니다. Django가 일반적으로 모델 (즉, 데이터베이스의 하나 또는 여러 테이블의 추상화)과 모델 을 디자인 구조 (예 : 도메인 기반 디자인)로 간주하는 의미를 혼합한다고 생각합니다 .


답변

“Django의 두 가지 특종”의 공동 저자 인 Daniel Greenfeld는 비즈니스 로직이 “가능한 경우 또는 필요한 경우 양식”모델에 있어야한다고 권장합니다. Bart의 가능한 복제본은 장고가 MVC와 유사 할 수 있지만 MVC가 아니라 공식 django documentation faq. @adrita 에서 설명했듯이 모델, 뷰 및 템플릿의 개념을 조금 더 잘 이해하려면 공식 문서를 검토해야 할 수도 있습니다.


답변

공식 Django 문서 https://docs.djangoproject.com/en/1.11/ 에서 다음과 같이 말합니다.

Django는 사용자의 요청을 처리하고 응답을 반환하는 논리를 캡슐화하는 “보기”개념을 가지고 있습니다. 아래 링크를 통해 뷰에 대해 알아야 할 모든 것을 찾으십시오.

Django는 뷰 내에 로직을 포함 할 것을 권장합니다.


답변