上传一个图片

使用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>
View Code

相关文章: