Django上传图片基本原理(ImageField)

xiaoxiao2025-06-07  17

# ①setting,py文件加入下面设置: MEDIA_ROOT = os.path.join(BASE_DIR, 'media') MEDIA_URL = '/media/' # ②urls.py文件添加文件的访问路径 from django.conf import settings from django.conf.urls.static import static from django.urls import path from .views import * urlpatterns = [ path('', IndexView.as_view()), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) # ③在models.py文件中进行限制上传文件类型 from django.db import models class Article(models.Model): title = models.CharField(max_length=100) content = models.TextField() # 使用validators.FileExtensionValidator来进行限制: # myfile = models.FileField(upload_to="%Y/%m/%d/", validators=[validators.FileExtensionValidator(['txt', 'pdf'], message='myfile必须为txt,pdf格式的文件')]) # 直接使用ImageField,就可以限制上传的文件,必须是图片,不用再使用验证器validators了,效果都是一样的 # 如果想要使用ImageField,必须要安装Pillow库,如果没安装运行pip install Pillow安装 myfile = models.ImageField(upload_to="%Y/%m/%d/") # ④新建表单forms.py文件: from django import forms # 注意是django下的forms from one.models import Article class ArticleForm(forms.ModelForm): class Meta: model = Article fields = "__all__" error_messages = { 'myfile': { 'invalid_image': '请上传正确格式的图片!' } } # ⑤ views.py文件如下: from django.http import HttpResponse from django.shortcuts import render from django.views.generic import View from one.forms import ArticleForm class IndexView(View): # 如果是GET请求,直接渲染到上传文件页面 def get(self, request): return render(request, 'one/index.html') # 如果是POST请求,那么将接收文件的值 def post(self, request): # 获取前台传来的文件,request.POST用来接收title和content,request.FILES用来接收文件 form = ArticleForm(request.POST, request.FILES) # 将数据保存到数据库 if form.is_valid(): form.save() return HttpResponse("SUCCESS") else: # 打印错误信息 print(form.errors.get_json_data()) return HttpResponse("Fail") # ⑥表单页index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>文件上传页</title> </head> <body> {#enctype="multipart/form-data"文件编码方式,必须设置,否则文件无法上传#} <form action="" method="post" enctype="multipart/form-data"> <input type="text" name="title"> <input type="text" name="content"> <input type="file" name="myfile"> <input type="submit" value="提交"> </form> </body> </html>

 

转载请注明原文地址: https://www.6miu.com/read-5031462.html

最新回复(0)