2016-11-20 3 views
0

Я использую django 1.10.2 с python 3.5.2 на машине Linux.Django QueryDict ДОПОЛНИТЕЛЬНЫЙ метод запроса

приложение Django получает запрос от клиента. Метод запроса идентифицируется как тип OPTIONAL. Я понимаю, что Django автоматически создает QueryDict для запросов POST и GET. Итак, как мне получить контент запроса, который не является GET и POST-типом? Как я могу создать QueryDict такого запроса или любого другого типа запросов?

В целях отладки, возможно ли распечатать весь HTTP-запрос? тела и заголовков? Я хотел бы видеть содержание запроса.

Заранее спасибо.

ответ

0

Параметры сохраняются в request.body Вы можете конвертировать их в нормальный питона Словаре, используя этот метод:

def retrieve_parameters_for_optional(request): 
    parameters = {} 
    params_as_string = request.body.decode("utf-8") 
    for param in params_as_string.split("&"): 
     if "=" in param: 
      key, value = param.split("=", 1) 
      parameters[key] = value 
    return parameters 

Вы можете просто создать QueryDict, потому что он неизменен, но вы можете скопировать, например, запрос. GET и очистить() его содержимое.

dict_of_parameters = retrieve_parameters_for_optional(request) 
your_query_dict = request.GET.copy() 
your_query_dict.clear() 
for key, value in dict_of_parameters.items(): 
    your_query_dict[key] = value 

После этого можно, например, присвоить query_dict в request.GET и продолжить запрос обработки так же, как обычный запрос GET.

+0

Если тело закодировано как данные формы, вы можете просто выполнить 'parameters = QueryDict (request.body, encoding = 'utf-8')', не нужно копировать и очищать 'request.GET'. – knbk