Django是一个由Python写成的Web应用框架。Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以“插件”形式服务于整个框架,Django有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包
1、创建Django工程
如果你没有创建Django工程,可以参考我的博客链接:Linux如何使用Django创建一个web工程
2、前端代码
在工程目录下,新建一个templates目录
mkdir templates
在templates目录下新建index.html文件,并添加下面的代码:
<!DOCTYPE html>
<html lang="en">
<head>
<title>文件上传</title>
<!-- Meta Tags -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="utf-8">
<meta name="keywords" content="" />
</head>
<body>
<form action="/upload" method="POST" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="file" >
<input type="submit" name="submit" value="上传">
</form>
</body>
</html>
在settings.py中注册templates所在的目录
# 将 'DIRS': [], 所在的行 更改为
'DIRS': [BASE_DIR+'/templates',],
此时你的文件结构是这样的:
3、后端代码
在urls.py上添加下列代码
# coding:utf-8
from django.contrib import admin
from django.urls import path
from . import view
urlpatterns = [
path('admin/', admin.site.urls),
path('index/', view.index),
path('upload', view.upload), # 添加文件上传post请求路由
]
在view.py上添加下列代码
# coding:utf-8
import os
from django.conf import settings
from django.contrib import messages
from django.shortcuts import render
def index(request):
return render(request, 'index.html', {})
def upload(request):
# 判断请求类型
if request.method == 'POST' and request.POST:
# 获取上传文件的对象,该对象类似于python字典类型
file = request.FILES.get('file', None)
if file is None:
raise NameError("提交表单为空")
# 获取文件名
filename = file.name
# 打开一个新文件,将接受到的文件写入
with open(os.path.join(settings.BASE_DIR, filename), 'wb') as f:
# 写入块,大文件用这种方式较好
for chunk in file.chunks():
f.write(chunk)
return render(request, 'index.html', {})
4、测试
在浏览器中输入:http://ip:8000/index/
我们可以在下面的目录下找到我们上传的文件
0