Мне нужно отправить данные на сервер Django. Я хотел бы использовать рассол. (Нет требований безопасности -> небольшое приложение для внутренней сети.)
Сначала я собираю данные на клиенте и отправляю их с помощью urllib2
def dispatch(self, func_name, *args, **kwargs):
dispatch_url = urljoin(self.base_url, "api/dispatch")
pickled_args = cPickle.dumps(args, 2)
pickled_kwargs = cPickle.dumps(kwargs, 2)
data = urllib.urlencode({'func_name' : func_name,
'args' : pickled_args,
'kwargs': pickled_kwargs})
resp = self.opener.open(dispatch_url, data)
Получение данных на сервере тоже работает:
def dispatch(request):
func_name = request.POST["func_name"]
pickled_args = request.POST["args"]
pickled_kwargs = request.POST["kwargs"]
Но открепление вызывает ошибку:
cPickle.loads(pickled_args)
Traceback (most recent call last):
File "<string>", line 1, in <fragment>
TypeError: must be string, not unicode
Очевидно, что urllib.urlencode
создал строку в юникоде. Но как я могу преобразовать его обратно, чтобы снова можно было отомкнуть (laods)?
Кстати, использование pickle в формате 0 (ascii) работает. Я могу преобразовать в строку перед распиливанием, но я бы предпочел использовать формат 2.
Также высоко ценятся рекомендации о том, как получить двоичные данные в представление Django.