Как получить ответный объект в Beego? - PullRequest
0 голосов
/ 23 октября 2019

Если мы хотим записать информацию о запросах и ответах, мы можем реализовать декоратор на контроллере, как это сделал Django ниже

def log_service(func):
    """
    Decorator that logs the input and output.
    """
    @wraps(func)
    def wrapper(*args, **kwargs):
        log = Logging()
        request = args[1]
        log.path = request.path
        log.ip_address = request.META['REMOTE_ADDR']
        log.user_agent = request.headers['User-Agent']
        if request.headers.get('Referer'):
            log.referer = request.headers['Referer']
        log.method = request.method
        if request.user.username:
            log.user = request.user
        log.query_string = request.META['QUERY_STRING']
        log.post_data = request.data
        log.server = request.META['SERVER_NAME']

        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        log.process_time = end_time - start_time
        msg = result.data['msg']
        log.msg = msg
        log.save()
        return result
    return wrapper

Кажется, Beego предоставляет фильтр, который поможет нам решить эту проблему следующим образом:

beego.InsertFilter("/api/search/detail_page", beego.AfterExec, middleware.TrackPageItem, false)

И мы можем получить доступ к объекту запроса и ответа через context.Context объект, как показано ниже:

var TrackUserBehaviour = func(ctx *context.Context){
    queryString := make(map[string]string)
    referer := ""
    path := ctx.Request.URL.Path
}

Проблема в том, что объект ответа в context.Context непредоставить ответную информацию. Итак, если мне нужна информация, содержащаяся в ответе, как ее получить ??

...