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
Posted in 学习

Leave a Comment:

电子邮件地址不会被公开。