Dan*_*lás 3 python forms django upload nginx
我不确定是否应该在这里还是在serverfault中发布此问题,因为它涉及django和nginx配置文件。
我有一个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";
Run Code Online (Sandbox Code Playgroud)
以便$ upload_field_name.XXXX附加字段不使用句点?(破折号有效,但再次破坏了python的标识符,其他任何字符也破坏了配置文件)
在这两种情况下有什么建议吗?
谢谢!
好的,我想我找到了回答自己问题的方法,希望对您有所帮助。
我将使用一个名为“ uploadedFile.name”的字段来处理提交的POST的表单看起来像这样:
from django.forms import Form, fields
def UploadForm(Form):
someField = fields.CharField()
uploadedFile.name = fields.CharField()
Run Code Online (Sandbox Code Playgroud)
哪一个当然不起作用,因为我们不能在标识符(uploadedFile.name)中使用句点。
答案是使用Form类的fields字典定义表单字段,在其中我们可以使用任意字符串命名字段:
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()
Run Code Online (Sandbox Code Playgroud)
现在,我们可以在视图中使用该表单,并像其他任何字段一样通过cleaned_data访问uploadFile.name的数据:
if request.method == "POST":
theForm = UploadForm(request.POST)
if theForm.is_valid():
theUploadedFileName=theForm.cleaned_data["uploadedFile.name"]
Run Code Online (Sandbox Code Playgroud)
有用!
| 归档时间: |
|
| 查看次数: |
1029 次 |
| 最近记录: |