2016-03-08 75 views
0

我在我的網站上有一個表單,需要文件上傳和一個文本字段。文件是加密數據,文本文件是解密它的關鍵。代碼:Django表單 - 並非所有數據都發送到服務器

forms.py

class UploadForm(forms.Form): 
    file = forms.FileField(required=False) 
    accessCode = forms.CharField(label=False, required=False) 

    def process(self): 
     file = "empty" 
     if self.is_valid(): 
      file = self.cleaned_data.get('file') 
      access_code = self.cleaned_data.get('accessCode') 
      print("1. access code = %s" % access_code) 
      file = file.read() 
      context = { 
       'file_data': file, 
       'access_code': access_code, 
      } 
     return context 

網站:

<form action="/encryption/decrypt/" method="POST" enctype="multipart/form-data"> 
    {% csrf_token %} 
    {{ upload_form.as_p }} 
    <input type="submit" value="Submit"/> 
</form> 

看起來一切正常發送,但是當我只是嘗試打印值,因爲文件的內容,並輸入申請內容是不工作

views.py:

def decrypt(request): 
    upload_form = UploadForm(files=request.FILES) 
    if request.method == "POST": 
     print(request.POST) 
     post_data = upload_form.process() 
     access_code = post_data.get('access_code', 'No Access Code') 
     salt = post_data.get('file_data', 'no file data') 
     print("ACCESS CODE %s" % access_code) 
     print("SALT = %s" % salt) 

鹽被access_code正確打印爲空,我不知道爲什麼...我猜你不能只包含一種形式的上傳和文本文件,但我不知道如何解決它.. ..

回答

1

我想你沒有通過request.POST作爲參數的形式。只是通過request.FILES將不會使表格明白accessCode從哪裏來。所以根據django doc,你應該:

upload_form = UploadForm(request.POST, request.FILES) 
+0

謝謝了很多request.POST修復了這個問題!這工作的第一部分失蹤了!這不是一個錯誤,我實際上是通過forpms.py將其作爲access_code從「context」字典傳遞給views.py。 – mancuss

+0

是的,我意識到,我編輯了我的答案。對於那個很抱歉。 –