我正在尝试从用户上传的csv文件上传和获取数据.我使用以下代码.这是我的html表单(upload_csv1.html):
<form action="{% url 'myapp:upload_csv' %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="csv_file1">
<input type="submit" value="Upload">
</form>
Run Code Online (Sandbox Code Playgroud)
这是views.py:
def uploadcsv(request):
data = {}
if "GET" == request.method:
return render(request, "myapp/upload_csv1.html", data)
# if not GET, then proceed
try:
csv_file = request.FILES["csv_file1"]
if not csv_file.name.endswith('.csv'):
messages.error(request,'File is not CSV type')
return HttpResponseRedirect(reverse("myapp:upload_csv"))
#if file is too large, return
if csv_file.multiple_chunks():
messages.error(request,"Uploaded file is too big (%.2f MB)." % (csv_file.size/(1000*1000),))
return HttpResponseRedirect(reverse("myapp:upload_csv"))
file_data = csv_file.read().decode("utf-8")
lines = file_data.split("\n")
#loop over the lines and save them in db. If error , store as string and then display
for line in lines:
fields = line.split(",")
data_dict = {}
data_dict["sku"] = fields[0]
data_dict["item_name"] = fields[1]
try:
form = PalazzoForm(data_dict)
if form.is_valid():
form.save()
else:
logging.getLogger("error_logger").error(form.errors.as_json())
except Exception as e:
logging.getLogger("error_logger").error(form.errors.as_json())
pass
except Exception as e:
logging.getLogger("error_logger").error("Unable to upload file. "+repr(e))
messages.error(request,"Unable to upload file. "+repr(e))
return HttpResponseRedirect(reverse("myapp:upload_csv"))
Run Code Online (Sandbox Code Playgroud)
代码工作正常.
我无法获得的是当我在视图中打印request.method时
def uploadcsv(request):
print request.method
Run Code Online (Sandbox Code Playgroud)
输出是" GET "而不是" POST ".
我怀疑是,
我已经找到了这个和这个(这与我的问题有某种关系),但这些问题没有最终答案.
我还尝试通过键入正确的URL来追加斜线重定向,但request.method仍为"GET".
任何人都可以澄清这个概念吗?
我使用的代码来自此源代码
| 归档时间: |
|
| 查看次数: |
5942 次 |
| 最近记录: |