上传图片
- 在settings配置中我们需要写入:
MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR,'uploads')
- 在主应用文件内新建 uploads , 并在uploads文件内新建upload ,这个upload文件是用来存储图片的
- 在主路由文件内,也就是与settings同在一个目录的文件里 需要写入:
主要看写注释的几行 from django.contrib import admin from django.urls import path,include,re_path # 导入 re_path from django.conf.urls.static import static # 导入 static from django.views.static import serve # 导入 serve from cls import settings # 导入 settings
urlpatterns = [ path('admin/', admin.site.urls), path('cls/', include('clsapp.urls')), re_path(r'^media/(?P<path>.*)/$',serve,{"document_root":settings.MEDIA_ROOT}) # re_path 正则路由 ] 以下这一步是为了方便渲染 做准备,反向解析 if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
- 在views 视图文件内需要写入:
主要看写注释的,这里的 def函数本应该是 类函数下的,我没有写, get方式简单所以没写 from django.conf import settings def post(self,request): name = request.POST.get('name') image = request.FILES.get('image') number = request.POST.get('num') image_path = '{}/upload/{}'.format(settings.MEDIA_ROOT,image.name) # 图片路径 if not all([name,image,number]): context = {'mes':'数据不完整'} return render(request, 'clsapp/add.html', context) try: Course.objects.get(name=name) except: with open(image_path,'wb') as fp: # 用 wb 方式写入 for i in image.chunks(): fp.write(i) Course.objects.create( name=name, image = 'upload/{}'.format(image.name), # 存入数据库时的 路径 number=number, user_id=request.session.get('user') ) context = {'mes': '添加成功'} return render(request, 'clsapp/add.html', context) else: context = {'mes': '该课程已添加'} return render(request, 'clsapp/add.html', context)