【问题标题】:Django forms - not all data sent to the serverDjango 表单 - 并非所有数据都发送到服务器
【发布时间】:2016-06-22 21:26:19
【问题描述】:

我的网站上有一个表格,可以上传文件和一个文本字段。文件是加密数据,文本文件是解密它的密钥。代码:

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)

salt 由 access_code 正确打印为空,我不知道为什么......我猜你不能只在一种形式中包含上传和文本文件,但我不知道如何解决它。 ...

【问题讨论】:

    标签: django forms python-3.x django-forms


    【解决方案1】:

    我认为您没有将request.POST 作为参数传递给表单。仅传递 request.FILES 不会使表单了解 accessCode 的来源。所以根据django doc,你应该:

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

    【讨论】:

    • 非常感谢 request.POST 解决了这个问题!这有效,第一部分不见了!这不是一个错误,我实际上是在“上下文”字典中将它从 forpms.py 传递给 views.py 作为 access_code。
    • 是的,我意识到,我编辑了我的答案。对此感到抱歉。
    猜你喜欢
    • 2018-03-05
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多