Как я могу добавить cookie к Приморским ответам без перенаправления?

Я не понимаю, почему в вашем dict нет B2. Я также не уверен, что вы хотите совершить в случае повторяющихся значений столбца (каждый, кроме последнего, я имею в виду.) Предполагая, что первым является надзор, мы можем использовать рекурсию:

def recur_dictify(frame):
    if len(frame.columns) == 1:
        if frame.values.size == 1: return frame.values[0][0]
        return frame.values.squeeze()
    grouped = frame.groupby(frame.columns[0])
    d = {k: recur_dictify(g.ix[:,1:]) for k,g in grouped}
    return d

, который производит

>>> df
  name  v1   v2  v3
0    A  A1  A11   1
1    A  A2  A12   2
2    B  B1  B12   3
3    C  C1  C11   4
4    B  B2  B21   5
5    A  A2  A21   6
>>> pprint.pprint(recur_dictify(df))
{'A': {'A1': {'A11': 1}, 'A2': {'A12': 2, 'A21': 6}},
 'B': {'B1': {'B12': 3}, 'B2': {'B21': 5}},
 'C': {'C1': {'C11': 4}}}

. Возможно, проще использовать непандасский подход:

def retro_dictify(frame):
    d = {}
    for row in frame.values:
        here = d
        for elem in row[:-2]:
            if elem not in here:
                here[elem] = {}
            here = here[elem]
        here[row[-2]] = row[-1]
    return d
5
задан brian d foy 17 November 2008 в 00:44
поделиться

2 ответа

В настоящее время нет никакого встроенного способа добавить cookie во время фазы действия/обратного вызова обработки запросов. Это наиболее вероятно дефект и отмечено в этой проблеме: http://code.google.com/p/seaside/issues/detail?id=48

Это в настоящее время намечается, чтобы быть зафиксированным для Побережья 2.9, но я не знаю, будет ли оно даже бэкпортировано к 2,8 или нет.

Следует иметь в виду, что существует уже (по умолчанию) перенаправление между фазами действия и рендеринга, чтобы препятствовать тому, чтобы Обновление повторно инициировало обратные вызовы, таким образом, в главной схеме вещей, еще одно перенаправление в этом случае не так плохо.

Если Вы все еще хотите вырыть далее, взглянуть на WARenderContinuation>> handleRequest:. Это - то, где обработка обратного вызова инициирована и начатая фаза перенаправления или рендеринга.

Отредактированный для добавления:

Проблема была теперь устранена, и (в коде последнего достижения) можно теперь правильно добавить cookie к текущему ответу в любое время. Просто получите доступ к объекту ответа в текущем контексте запроса и добавьте cookie. Например, Вы могли бы сделать что-то как:

self requestContext response addCookie: aCookie

Это вряд ли будет бэкпортировано к Побережью 2.8, поскольку оно потребовало довольно основного сдвига в способе, которым обрабатываются ответы.

5
ответ дан 14 December 2019 в 01:21
поделиться

Я только что изучил это подробно, и ответ, кажется, нет. А именно, нет никакого способа достигнуть ответ от WARenderCanvas или чего-либо, к чему он может получить доступ (он содержит на WARenderingContext, который содержит на WAHtmlStreamDocument, который содержит на поток ответа, но не сам ответ). Я думаю, что было бы разумно предоставить доступ контекста к текущему ответу, точно смочь установить заголовки на нем, но Вы спросили, был ли уже путь, таким образом: нет.

Тем не менее Побережье делает большое дополнительное перенаправление, и это, кажется, не оказывает большое влияние на пользовательский опыт, поэтому возможно, нужно должен прекратить вызывать беспокойство об этом кажущийся kludgey и пойти с потоком API, который это уже там :)

4
ответ дан 14 December 2019 в 01:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: