วันพุธที่ 3 กุมภาพันธ์ พ.ศ. 2559

Django Exercise Part 2

- Upload CSV File

สร้าง view ชื่อ uploadCSV ขึ้นมา เพื่อเป็นหน้าอัพโหลด โดยทำการเพิ่มเข้าไปใน /polls/views.py


และตั้งค่า URL Config สำหรับ uploadCSV() view ใน /polls/urls.py



และสร้าง template สำหรับหน้า Upload Form ขึ้นมา ชื่อว่า upload_csv.html ไปที่ /polls/templates/polls

ซึ่งหน้า template นำโค้ด HTML Form จาก w3schools มาดัดแปลง




ซึ่งจะสังเกตได้ว่า ผมได้ให้ form action ไปที่ loadcsv ซึ่งเป็น view ที่ใช้สำหรับ load csv แบบ local file เนื่องจากผมคิดว่า มันมีลักษณะการทำงานคล้ายๆกัน ไม่น่าจะต้องแก้มาก

จากนั้นเพิ่มลิ้งจากหน้า index ของ polls app เพื่อให้เข้าไปสู่หน้าอัพโหลดได้


จะได้หน้าตาเป็นแบบนี้





จากนั้น ผมได้ไปลองหาอ่านเกี่ยวกับการที่ Django จัดการกับ File ที่อัพโหลดมาจาก https://docs.djangoproject.com/es/1.9/topics/http/file-uploads/


 จุดสำคัญคือ เวลา Client ส่ง request มา ถ้ามีไฟล์ ข้อมูลจะถูกเก็บไว้ใน Attribute FILES สังเกตได้จาก request.FILES

ผมจึงลอง upload file และให้ print(request.FILES) ออกมา




สังเกตได้ว่า request.FILES จะเป็น Dictionary ที่มี key ว่า csvFile (มาจาก name ใน upload form)
ซึ่งถ้าไม่มีไฟล์ จะเป็น Empty Dictionry ( {} )

ทีนี้ ผมก็สงสัยว่าไฟล์ที่ upload มานั้น ถูกเก็บไว้ที่ไหน ในเว็บก็บอกไว้ว่า


ผมจึงไปหาวิธีเซฟไฟล์มา จนเจอลิ้งจากเว็บเดิมไป https://docs.djangoproject.com/es/1.9/topics/files/


ผมจึง import default_storage จาก from django.core.files.storage และจัดการ ทดสอบ upload file



ผมจึง import os มาเพื่อทำการเปลี่ยนชื่อไฟล์


และให้ส่วนที่อ่านไฟล์ csv อ่านจากชื่อที่กำหนดไว้ ก็จะสามารถทำการ upload คำถามจากไฟล์ csv ได้แล้ว


ไม่มีความคิดเห็น:

แสดงความคิดเห็น