Django 文件上传

在django开发网页中经常会遇到需要将本地的文件上传到服务器,这里我们就需要通过post请求将数据推送到服务器上去

1 ,定义视图
def upLoadPic(request):
    return render(request, 'booktest/upLoadPic.html')   
2 ,定义URL
 path('upLoadPic/',views.upLoadPic,name='upLoadPic'),
3 ,前台界面html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/uploadHandler/" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="file" name="pic1">
    <br>
    <input type="submit" value="上传">
</form>

</body>
</html>

其实这里也就是一个表单,通过post请求提交相关的数据

这里写图片描述
从上面可以看到,当点击提交的时候.post请求会携带数据发送到
http://127.0.0.1:8000/uploadHandler/ 这个地址,那我在定义一个处理数据的视图

上传部分

def uploadHandler(request):
    if request.method == "POST":
        f1 = request.FILES['pic1']
        fname = '%scar/%s'%(MEDA_PATH, f1.name)
        #fname = 'static/media/car/a.png'
        print(fname)
        with open(fname, 'wb+') as pic:
            # 根据上传的流中的数据一点一点往内存中写
            for c in f1.chunks():
                pic.write(c)
        return HttpResponse(fname)
    else:
        return HttpResponse("ERROR")

配置下 URL:
path(‘uploadHandler/’, views.uploadHandler,name=’uploadHandler’)

注释:解释下上面的内容,当post请求携带数据传到相关的页面后,这个接收页面,

  1. 首先判断是不是POST请求,表单提交一定是post请求
  2. 通过request.FILES[‘pic1’] 拿到指定的文件 pic1是传过来的键
  3. 拼接需要存放的目标地址
  4. 通过with,使用二进制的写权限向指定目录中写
  5. 这里的 f1.chunks()表示将数据分块写到相关位置
以下是Django文件上传下载的步骤: 1. 创建Django项目和应用程序: ```shell django-admin startproject file_upload cd file_upload python manage.py startapp uploader ``` 2. 配置URL路由: 在项目的urls.py文件中,添加以下代码: ```python from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('uploader/', include('uploader.urls')) ] ``` 3. 创建文件上传表单: 在应用程序的forms.py文件中,创建一个文件上传表单: ```python from django import forms class FileUploadForm(forms.Form): file = forms.FileField() ``` 4. 创建文件上传视图: 在应用程序的views.py文件中,创建一个文件上传视图: ```python from django.shortcuts import render from .forms import FileUploadForm def upload_file(request): if request.method == 'POST': form = FileUploadForm(request.POST, request.FILES) if form.is_valid(): file = form.cleaned_data['file'] # 处理文件上传逻辑 # 保存文件到服务器或者其他操作 return render(request, 'success.html') else: form = FileUploadForm() return render(request, 'upload.html', {'form': form}) ``` 5. 创建文件上传模板: 在应用程序的templates文件夹中,创建upload.html模板文件: ```html <form method="post" enctype="multipart/form-data"> {% csrf_token %} {{ form.as_p }} <button type="submit">上传</button> </form> ``` 6. 创建文件上传成功模板: 在应用程序的templates文件夹中,创建success.html模板文件: ```html <h1>文件上传成功!</h1> ``` 7. 配置文件上传URL: 在应用程序的urls.py文件中,添加以下代码: ```python from django.urls import path from .views import upload_file urlpatterns = [ path('upload/', upload_file, name='upload'), ] ``` 现在,您可以通过访问`http://localhost:8000/uploader/upload/`来上传文件
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值