Django API:上传nbe文件和scan处理器
上传文件
1. 在template的html文件里增加:
<form enctype="multipart/form-data" method="post" action="http://10.1.10.36/upload/"> <input type="file" name="file" /><br/> <input type="submit" value="上传文件" /> </form>
2. 在from里增加
class UploadFileForm(forms.Form): title = forms.CharField(max_length=50) file = forms.FileField()
处 理这个form的视图收到了在request.FILES中的文件数据。从上述form来的数据可能通过request.FILES['file']来存 取。特别注意的是,只有当request方法是POST,且发送request的<form>有属性 enctype="multipart/form-data"时,request.FILES中包含文件数据,否则request.FILES为空。
3. 在views里
def handle_uploaded_file(request,f): name="%s"%f.name destination = open('url/%s'%name, 'wb+') for chunk in f.chunks(): destination.write(chunk) destination.close() get_nbe(request,'url/%s'%name) # def upload_file(request): if request.method == 'POST': logging.debug("**** in post ****") form = UploadFileForm(request.POST, request.FILES) #if form.is_valid(): logging.debug("**** hahhahahahah ****") handle_uploaded_file(request,request.FILES['file']) #get_nbe(request,request.FILES['file']) return HttpResponse('%s'%request.FILES['file'].name) return HttpResponse("not valid") else: orm = UploadFileForm() return HttpResponse("haha")
在urls里给主方法创建一个url。将此url加入第一步html的form action里面。
这样html提交时,唤起action里的url,调用views里的函数,获取传递的request,经过form验证,执行方法。
*upload file的参数
1、UploadFile.read(): 从文件中读取全部上传数据。当上传文件过大时,可能会耗尽内存,慎用。 2、UploadFile.multiple_chunks(): 如上传文件足够大,要分成多个部分读入时,返回True.默认情况,当上传文件大于2.5M时,返回True。但这一个值可以配置。 3、UploadFile.chunks(): 返回一个上传文件的分块生成器。如multiple_chunks()返回True,必须在循环中使用chrunks()来代替read()。一般情况下直接使用chunks()就行。 4、UploadFile.name():上传文件的文件名 5、UplaodFile.size():上传文件的文件大小(字节)
Looping over UploadedFile.chunks() instead of using read() ensures that large files don't overwhelm your system's memory.
https://docs.djangoproject.com/en/1.4/topics/http/file-uploads/
http://www.cnblogs.com/yijun-boxing/archive/2011/04/18/2020155.html
Scan处理器
原理:一个过滤器,得到用户post form的数据,输出json文件。
1. 建一个html的文件测验,hardcoded一些选项,action=url【为目标methond的url】,method="post"。
最终提交按键为submit
2. 填完选项提交后,试验页面将转到action里设定的url,我们的handler在那等着它,处理得到的request。
3. 用create_scanTask验证scan是否合格并schdule。
4. 从数据库读取数据。