MEDIA_ROOT และการอัปโหลดไฟล์
รับและจัดเก็บไฟล์ที่ผู้ใช้อัปโหลด
MEDIA_ROOT และการอัปโหลดไฟล์ เป็นบทเรียน Django Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Django Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Django Academy มีบทเรียนทั้งหมด 4 บทเรียน
บางส่วนของบทเรียนนี้ยังไม่ได้รับการแปล และแสดงเป็นภาษาอังกฤษ
Static vs Media
Static files ship with your code. Media files are uploaded by your users at runtime, like avatars or documents, and they need their own home.
The MEDIA_ROOT Setting
MEDIA_ROOT is the absolute folder on disk where Django saves every uploaded file. It lives outside your source code tree.
MEDIA_ROOT = BASE_DIR / 'media'The MEDIA_URL Setting
MEDIA_URL is the public prefix browsers use to request an uploaded file, just like STATIC_URL does for static assets.
MEDIA_URL = '/media/'Add a FileField
To accept an upload, give your model a FileField. Django stores the file on disk and keeps only its path in the database.
class Resume(models.Model):
doc = models.FileField(upload_to='resumes/')The upload_to Path
The upload_to argument is a subfolder under MEDIA_ROOT. Use it to keep uploads tidy, like grouping all resumes together.
Dynamic upload_to
Pass a function to upload_to when the path should depend on the instance, such as foldering files per user.
def user_dir(instance, filename):
return f'user_{instance.user.id}/{filename}'Forms Need enctype
An HTML form that uploads files must set enctype to multipart/form-data, or the browser sends no file bytes at all.
<form method="post" enctype="multipart/form-data">Read request.FILES
Uploaded bytes do not arrive in request.POST. They land in request.FILES, which you pass into your form to bind them.
form = ResumeForm(request.POST, request.FILES)Get the URL
Once saved, every file field exposes a .url property that builds the MEDIA_URL link you drop into a template.
<a href="{{ resume.doc.url }}">Download</a>Validate Uploads
Never trust raw uploads. Limit file size and type in your form's clean method to keep malicious files out. 🔒
Keep Media Private
MEDIA_ROOT should sit outside your repo and never be served by collectstatic. User files and code stay clearly separate.
Quick Check
Let us check where uploaded file data arrives in a view.
Recap
You learned that MEDIA_ROOT stores user uploads, that FileField with upload_to organizes them, and that request.FILES carries the bytes. 📁
คำถามที่พบบ่อย
บทเรียน “MEDIA_ROOT และการอัปโหลดไฟล์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “MEDIA_ROOT และการอัปโหลดไฟล์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Django Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Django Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “MEDIA_ROOT และการอัปโหลดไฟล์”
รับและจัดเก็บไฟล์ที่ผู้ใช้อัปโหลด คุณปฏิบัติ Django Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Django Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Django Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “MEDIA_ROOT และการอัปโหลดไฟล์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Django Academy นี้ได้ไหม
ได้ บทเรียน Django Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- STATICFILES และแท็ก static
- collectstatic สำหรับใช้งานจริง
- MEDIA_ROOT และการอัปโหลดไฟล์
- ImageField และการให้บริการไฟล์อัปโหลด