2016-03-08 64 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

是的,我意识到,我编辑了我的答案。对于那个很抱歉。 –