在Django中如何处理文件上传并保存到后端服务器

在Django中除了使用ModelForm之外,还可以手动处理上传的文件

前言,关于在Django中处理文件上传

Django框架提供了非常便利的ModelForm,如果你的Model中包含FileFiled,通过ModelForm可以非常方便的处理文件上传的问题,但是如果是需单独处理上传的文件,本文提供了一个思路。

Django Views(视图函数)

from django.shortcuts import render, HttpResponse


def main(request):
	# 用于生成主页面
	# 当然也可以将下面的upload函数合并到main函数中.(对应urls.py 和form action均需要修改
	# if request.method == 'POST':
	# ....
	# return HttpResponse('Good')
    template = 'example/index.html'
    return render(request, template, context={})


def upload(request):
    if request.method == 'POST':
    	# 此处hunter对应index.html中name='hunter'
    	# <input type="file" class="form-control-file" name ='hunter'>
        obj = request.FILES['hunter']
        with open('upload/'+obj.name, 'wb+') as f:
            for chunk in obj.chunks():
                f.write(chunk)
            f.close()
        
        print('Done')
        return HttpResponse('Good')

Template(模板)

<!doctype html>
<html lang="en">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous">

    <title>Hello, world!</title>
  </head>
  <body>
    <h1>Django 上传文件</h1>
    <form action="{% url 'exmaple:upload' %}" method="post" enctype="multipart/form-data">
      {% csrf_token %}
        <div class="form-group">
          <label for="exampleFormControlFile1">上传文件</label>
          <input type="file" class="form-control-file" name ='hunter' id="exampleFormControlFile1">
          <button type="submit" class="btn btn-primary mb-2">上传</button>
        </div>
      </form>
  </body>
</html>

urls.py (路由)

主路由

from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include('example.urls'))
]

子路由

from django.contrib import admin
from django.urls import path
from . import views

app_name = 'exmaple'
urlpatterns = [
    path('',views.main,name='main'),
    path('upload',views.upload,name='upload')
]
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值