2009-11-06 31 views
2

我們有一些客戶端向我們的django服務器發送數據blob的自定義POST。在django中實現自定義UploadHandler

他們以一種相當時髦的方式來做事情,我寧願不去 - 而且我們已經從制定特定格式轉向了規範。爲了使我們的上傳協議的更多實現更加精簡,我期待在django中推出一個自定義的UploadHandler,以使我們在視圖中的數據處理更加流暢。

因此,展望未來,我們希望在視圖中的所有代碼通過訪問我們的文章:

data = request.FILES['something']

所以,對於我們的新提交,我們正在處理的是dandily。

我想要做的就是獲取我們製作的上傳處理程序,親切地稱爲LegacyUploadHandler(),以便使用正確的部分填充request.FILES字典,以便我們視圖中的代碼可以訪問部件採用相同的方式。

所以,我的問題:

如何自定義uploadhandler實際上填充request.FILES字典? django documentation並沒有給出一個描述性的例子。

我們特別需要的是我們有一個獨特的數據塊進來。我們定製解析它,並希望它顯示爲request.FILES字典。

當前的代碼,因爲它代表現在做這個的:

def handle_raw_input(self, input_data, META, content_length, boundary, encoding=None): 
    files_dict = {} 
    files_dict = magic_parser(input_data.read()) 
    #now what do I do? 

我看到http.MultiPartParser設置文件MultiValueDict的例子,但是這似乎是我在哪裏範圍/控制範圍之外在我的處理程序中。

有關如何實際執行返回值的任何想法?或者我試圖填充request.FILES對象完全錯誤的方式?

回答

0

handle_raw_input你必須返回一個元組的POSTFILES的要求。所以你的情況是這樣的:

def handle_raw_input(self, input_data, META, content_length, boundary, encoding=None): 
    files_dict = magic_parser(input_data.read()) 
    return QueryDict(), files_dict 

magic_parser應交回{'filename': fileobj}MultiValueDict。 A fileobj是一些合適的子類的實例(或者可以是該類本身)。