python Django之文件上传

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python Django之文件上传相关的知识,希望对你有一定的参考价值。

python Django之文件上传

使用Django框架进行文件上传共分为俩种方式

一、方式一

通过form表单进行文件上传
#=========================================FORM表单上传文件========================================
def f1(request):
#定义f1上传函数
    if request.method==‘GET‘:
#如果是以GET请求
        return render(request,‘f1.html‘)
#返回html模板
    else:
#否则
        import os
#导入模块
        file_obj=request.FILES.get(‘fafafa‘)
#通过文件的方式获取文件
        f=open(os.path.join(‘static‘,file_obj.name),‘wb‘)
#打开一个文件创建一个文件句柄,写的模式打开
        for chunk in file_obj.chunks():
#循环对象(chunks是块 代表大小的意思)
            f.write(chunk)
#循环获得对象并写到文件中
        f.close()
#通过文件句柄,关闭文件
        return render(request,‘f1.html‘)
#返回到html模板

 form表单上传文件

========================form表单html============================
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/f1/" method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    <p><input type="text" name="user"></p>
    <p><input type="file" name="fafafa"></p>
    <p><input type="submit" value="提交"></p>
</form>
</body>
</html>

 

一、方式二

通过form组件进行文件上传

 

#======================================Form组件上传文件========================================
class F2Form(Form):
#定义一个上传类
    user=fields.CharField()
#字段是字符串类型
    fafafa=fields.FileField()
#字段是文件类型


def f2(request):
#定义一个f2上传文件的函数
    import os
#导入模块
    if request.method==‘GET‘:
#如果请求方式GET
        obj=F2Form()
#实例化一个对象
        return render(request,‘f2.html‘,{‘obj‘:obj})
#携带obj对象返回html
    else:
#否则
        obj=F2Form(data=request.POST,files=request.FILES)
#实例化对象obj前端标签input获取的数据以request.POST接收,文件信息以request.FILES接收
        if obj.is_valid():
#通过form组件进行校验如果校验成功就执行下边代码
            print(obj.cleaned_data.get(‘fafafa‘).name)
#打印文件名称
            print(obj.cleaned_data.get(‘fafafa‘).size)
#打印文件大小
            f=open(os.path.join(‘static‘,obj.cleaned_data.get(‘fafafa‘).name),‘wb‘)
#打开文件并创建文件句柄,以写的模式打开
            for chunk in request.FILES.get(‘fafafa‘).chunks():
#循环读取文件对象的内容
                f.write(chunk)
#循环写入到文件中
            f.close()
#通过文件句柄将文件关闭
        return render(request,‘f2.html‘,{‘obj‘:obj})
#携带obj对象返回html模板

 

form组件上传文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form method="POST" action="/f2/" enctype="multipart/form-data">
        {% csrf_token %}
        <p>{{ obj.user }}</p>
        <p>{{ obj.fafafa }}</p>
        <input type="submit" value="提交" />
    </form>
</body>
</html>

 

以上是关于python Django之文件上传的主要内容,如果未能解决你的问题,请参考以下文章

django+python大文件上传

如何使用 django (python) 和 s3 上传文件?

[Django] [channels] [python]如何上传静态文件(图像,文档)?

django之上传文件media配置

django python上传文件有中文名称报错

Django之AJAX文件上传