上传一个图片
使用input type="file",来上传一个文件。注意:form表单必须添加属性enctype="multipart/form-data"
在views.py视图函数中,获取文件对象,必须使用request.FILES.get
新建项目upload,在项目中新建static文件夹,在文件夹里面创建upload目录,用来保存上传的文件。
修改settings.py,定义static路径,在最后面加上以下代码。记住下面的等号后面是一个元组,所以一定要加一个英文的逗号‘,’,等号后面也可以使用列表,这个就不需要加逗号了
STATICFILES_DIRS = ( os.path.join(BASE_DIR, 'static'), )
在upload/urls.py,增加路由
from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^uploading_img/', views.uploading_img, name='uploading_img'), ]
在app01/views.py中的代码
from django.shortcuts import render, HttpResponse, redirect from uploading import settings import os # Create your views here. def uploading_img(request): if request.method == 'POST': user = request.POST.get('user') avatar = request.FILES.get('avatar') print(user) print('avatar', avatar, type(avatar)) print(avatar.__dict__) # 查看对象的所有属性 # 文件存储的绝对路径 path = os.path.join(settings.BASE_DIR, 'static', 'upload', avatar.name) # 必须以二进制的方式打开,存储图片 with open(path, 'wb') as f: for line in avatar.chunks(): f.write(line) return HttpResponse('上传成功') return render(request, 'upload_img.html')
在templates下创建一个upload_img.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {#上传文件必须指定enctype="multipart/form-data"#} <form method="post" enctype="multipart/form-data"> {% csrf_token %} <lable>上传图片</lable> <input type="file" name="avatar"><br> <lable>用户名</lable> <input type="text" name="user"> <input type="submit" value="提交"> </form> </body> </html>