2011-01-12 73 views
2

我不確定是否應該在這裏或serverfault發佈此問題,因爲它涉及Django和nginx配置文件。如何使用非有效的標識符作爲django表單字段名稱

我有一個django視圖從包含文件字段的窗體接收POST數據。

請求通過一個nginx模塊(上傳模塊),它接受文件上傳字段,將它們存儲到一個磁盤位置,然後附加額外的字段以及可找到每個文件的本地路徑以及它們的名稱和其他元數據,然後從POST中去除原始文件字段。

不幸的是,附加的字段不是非常靈活,它們的名稱包含句點(。)或破折號( - )。

這一切都很好,但問題出現在python方面。如果想使用表單驗證傳入的POST數據,但是我不知道如何定義一個名稱中包含句點或破折號的表單。有沒有辦法告訴django表單該字段的變量用於存儲它的名稱不同?

我的解決方法是不使用django表單並以另一種方式清理傳入數據(如何?)。

或者,如果有人有經驗,使用上傳模塊nginx的,並且知道如何使用指令

upload_set_form_field $upload_field_name.name "$upload_file_name"; 
upload_set_form_field $upload_field_name.content_type "$upload_content_type"; 
upload_set_form_field $upload_field_name.path "$upload_tmp_path"; 

使得$ upload_field_name.XXXX附加字段不使用期? (一個破折號的作品,但再次打破python的標識符,任何其他字符打破配置文件)

任何情況下的任何recomendations?

謝謝!

回答

3

好的,我想我找到了一種方法來回答我自己的問題,我希望它可以幫助別人。

我會用處理與所謂的「uploadedFile.name」字段提交POST的形式會是這個樣子:

from django.forms import Form, fields 
def UploadForm(Form): 
someField = fields.CharField() 
uploadedFile.name = fields.CharField() 

這當然是不行的,因爲我們不能使用期限在標識符(uploadedFile.name)中。

答案是使用Form類,在這裏我們可以命名一個不錯的和任意字符串字段的字段字典定義表單字段:

def UploadForm(Form): 
someField = fields.CharField() 
def __init__(self, *args, **kwargs): 
    #call our superclasse's initializer 
    super(UploadForm,self).__init__(*args,**kwargs) 
    #define other fields dinamically: 
    self.fields["uploadedFile.name"]=fields.CharField() 

現在我們可以用這種形式在視圖中並通過cleaned_data訪問uploadedFile.name的數據,我們會任何其他領域:

if request.method == "POST": 
theForm = UploadForm(request.POST) 
if theForm.is_valid(): 
    theUploadedFileName=theForm.cleaned_data["uploadedFile.name"] 

它的工作原理!

相關問題