python - Passing file to function to parse -
i have upload form takes file , sends function parse. csv file , im using datafield type store it.
views.py
def upload(request): # handle file upload if request.method == 'post': form = uploadform(request.post, request.files) if form.is_valid(): newdoc = csv(file=request.files['csvfile']) newdoc.save() # send file parser import fanduel.load_data fanduel.load_data.parse(newdoc.file, request.user) # redirect document list after post return httpresponseredirect(reverse('app.views.upload')) else: form = uploadform() # empty, unbound form
load_data.py
def parse(file, username): import csv datareader = csv.reader(open(file), delimiter=',', quotechar='"')
forms.py
# in forms.py... django import forms class uploadform(forms.form): csvfile = forms.filefield( label='select csv file', )
models.py
class csv(models.model): file = models.filefield(upload_to='csv/')
traceback:
environment: request method: post request url: http://127.0.0.1:8000/app/ django version: 1.7.6 python version: 3.4.2 installed applications: ('django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'import_export', 'app') installed middleware: ('django.contrib.sessions.middleware.sessionmiddleware', 'django.middleware.common.commonmiddleware', 'django.middleware.csrf.csrfviewmiddleware', 'django.contrib.auth.middleware.authenticationmiddleware', 'django.contrib.auth.middleware.sessionauthenticationmiddleware', 'django.contrib.messages.middleware.messagemiddleware', 'django.middleware.clickjacking.xframeoptionsmiddleware') traceback: file "c:\users\wilson\appdata\roaming\python\python34\site-packages\django\core\handlers\base.py" in get_response 111. response = wrapped_callback(request, *callback_args, **callback_kwargs) file "c:\users\wilson\pycharmprojects\bankroll2\app\views.py" in upload 20. app.load_data.parse(newdoc.file, request.user) file "c:\users\wilson\pycharmprojects\bankroll2\app\load_data.py" in parse 13. datareader = csv.reader(open(file), delimiter=',', quotechar='"') exception type: typeerror @ /app/ exception value: invalid file: <fieldfile: csv/app_entry_history_20150316_w62rukt.csv>
i'm not sure how pass in correct file type. if enter filepath manually load_data.py works fine, it's way it's passed in.
i think problem trying open wrong filename. when file uploaded webserver, either stored in memory, or written temporary location - django (https://docs.djangoproject.com/en/1.7/topics/http/file-uploads/#where-uploaded-data-is-stored).
so value in request.files['csv']
location of temporary file. want file gets stored in forms. need paste forms , models, guessing following might work, instead of
newdoc = csv(file=request.files['csvfile'])
you need
newdoc = csv(file=form.cleaned_data['csvfile'])
Comments
Post a Comment