문제

Web2Py에서는 모든 컨트롤러가 호출되기 전에 공통 코드를 실행할 수있는 방법이 있습니까?

예를 들어, 클라이언트 IPS를 요청하는 로그에 클라이언트 IPS를 로그인 코드를 추가하여 분석 활성화하는 코드를 추가하려고합니다. 나는 단순히 모든 컨트롤러의 첫 번째 줄을 response = RequestBase(request) 그러나 이것이 다른 메커니즘을 통해 이미 해결 된 문제인지 궁금합니다.

도움이 되었습니까?

해결책

로깅 코드를 모델 정의 파일에 넣을 수 있습니다. models/db.py, 또는 컨트롤러에서 controllers/default.py 이와 같이:

with open("mylog.log", "at") as f:
    f.write(repr(request))

def index():
    # index controller definition

# ... rest of the code

또는 정의 할 기능이나 클래스가 필요한 경우 :

# --------------------------
# Log part:
# --------------------------

def my_log(request):
    with open("mylog.log", "at") as f:
        f.write(repr(request))

my_log(request)

# --------------------------
# Controllers part:
# --------------------------

def index():
    # index controller definition

# ... rest of the code

물론, repr(request) 원하는 방식은 아니지만 아이디어를 얻습니다. 여기에서 컨트롤러가 호출되기 전에 원하는 정보를 기록 할 수 있습니다 (이 단계에서 방금 정의됩니다).

서버는 이미 루트 디렉토리에 로그를 유지하고 있습니다. httpserver.log.

다른 팁

코드를 모델 파일에 배치하면 컨트롤러 전에 실행됩니다. 코드가 특정 컨트롤러에 대해서만 실행되도록하려면 기능 전에 컨트롤러 상단에 배치하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top