首页 > 其他分享 >Django实现文件上传、文件列表查看、修改、限流和日志记录1

Django实现文件上传、文件列表查看、修改、限流和日志记录1

时间:2023-08-13 16:11:09浏览次数:49  
标签:文件 upload Django 限流 file import django 上传

Django实现文件上传、文件列表查看、修改、限流和日志记录1

上一章已经实现了文件的上传到项目的指定目录中,这章我们继续乘胜追击继续优化实现。

一般都是上传文件到后端服务器上,因此需要建立一个远程服务器的连接,本章连接远程服务器实现文件上传

实现点击上传本地文件到远程服务器的/data目录,判断文件是否为空,为空返回提交页面,不为空提交上传文件,并添加日志和登录

安装Django和paramiko库

pip install Django paramiko

 

创建项目

创建一个Django项目并进入项目目录

django-admin startproject file_upload
cd file_upload

 

创建应用

创建一个Django应用:

python manage.py startapp file_upload_app

 

添加应用

在file_upload/settings.py文件中,将file_upload_app添加到INSTALLED_APPS列表中:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'file_upload_app',
    
]

 

添加路由映射

在file_upload/urls.py文件中,添加文件上传的URL映射:

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


urlpatterns = [
    path('admin/', admin.site.urls),
    path('upload/', views.upload_file, name='upload'),
]

 

编写上传视图函数

在file_upload_app/views.py文件中,编写文件上传的视图函数

from django.shortcuts import render

# Create your views here.
import os
from django.utils import timezone
from django.shortcuts import render, redirect
from django.conf import settings
from django.contrib import messages
import paramiko
import tempfile

def upload_file(request):
    if request.method == 'POST':
        file = request.FILES.get('file')
        if file:
            # 连接远程服务器
            ssh = paramiko.SSHClient()
            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            # ssh.connect('remote_server_ip', username='username', password='password')
            ssh.connect('10.0.0.127', username='root', password='123456')

            try:
                # 创建临时文件
                with tempfile.NamedTemporaryFile(delete=False) as temp_file:
                    # 将上传的文件内容写入临时文件
                    for chunk in file.chunks():
                        temp_file.write(chunk)
                    temp_file.seek(0)  # 将文件指针移动到文件开头

                    # 上传临时文件到远程服务器的/data目录
                    sftp = ssh.open_sftp()
                    # sftp.put(temp_file.name, '/data/' + file.name)
                    sftp.putfo(temp_file, '/data/' + file.name)
                    sftp.close()
                    ssh.close()

                # 添加日志
                log_file_path = '/git/Python/file_upload/file_upload_app/app.log'  # 修改为你的日志文件路径
                with open(log_file_path, 'a') as log_file:
                    # log_file.write('Uploaded file: {}\n'.format(file.name))
                    log_file.write('[{}] Uploaded file: {} by {}\n'.format(timezone.now(), file.name, request.user.username))
                    log_file.close()

                messages.success(request, '文件上传成功')
                return redirect('upload')  # 重定向到上传页面
            except Exception as e:
                messages.error(request, '文件上传失败:{}'.format(str(e)))
        else:
            messages.error(request, '请选择要上传的文件')

    return render(request, 'upload.html')

 

模板文件

在file_upload_app/templates/upload.html文件中,编写文件上传的HTML模板:

base.html

在file_upload_app/templates/base.html文件中,编写基础模板:

<!DOCTYPE html>
<html>
<head>
  <title>文件上传</title>
</head>
<body>
  {% block content %}
  {% endblock %}
</body>
</html>

 

upload.html

{% extends 'base.html' %}

{% block content %}
  <h2>文件上传</h2>
  {% for message in messages %}
    <div>{{ message }}</div>
  {% endfor %}
  <form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="file" name="file">
    <button type="submit">上传</button>
  </form>
{% endblock %}

 


运行Django

python manage.py runserver

#访问地址
http://localhost:8000/upload/

 

通过访问http://localhost:8000/upload/来上传文件到远程服务器的/data目录了。如果选择了文件进行上传,会将文件名记录在日志文件中,并在页面上显示上传成功的提示信息。如果没有选择文件或选择了空文件,会显示相应的错误信息。

上传文件及验证

 

 

 

 

至此,一个简单的文件上传功能已经实现,并且上传到远程服务器上指定/data目录。

后续改进优化功能

1、使用更安全的服务器秘钥连接

2、查看上传文件

3、修改上传文件

4、用户认证功能

5、日志记录功能

6、实现上传文件列表功能

7、接口限流功能【用户、IP等】

8、相关报错总结

 

 

 

 

 

 

 

 

 

 

标签:文件,upload,Django,限流,file,import,django,上传
From: https://www.cnblogs.com/weiweirui/p/17626687.html

相关文章

  • pyspark写入文件
    ##py_spark_rdd2py.py#py_learn##CreatedbyZ.Steveon2023/8/1311:39.##1.rdd.collect()将rdd变为list#2.rdd.reduce()不分组,对rdd数据做两两聚合frompysparkimportSparkConf,SparkContextconf=SparkConf().setMaster("local[*]")......
  • 文件属性
    简介linux是多用户系统,不同用户处于不同地位修改文件/目录所属用户与权限 chown(changeowner):修改所属用户与组。chmod(changemode):修改用户的权限。查看文件/目录所属用户和组ll或者ls-l 第一个字母:当为d则是目录当为-则是文件;若是l则表示为链......
  • chfs共享文件系统
    chfs简介官网地址:http://iscute.cn/chfsCuteHttpFileServer/chfs是一个免费的、HTTP协议的文件共享服务器,使用浏览器可以快速访问。它具有以下特点:单个文件,核心功能无需其他文件跨平台运行,支持主流平台:Windows,Linux和Mac界面简洁,简单易用支持扫码下载和手机端访问,手机与电脑之间......
  • Typora上传文件到博客园解决图片问题
    EasyBlogImageForTypora使用Typora写作,图片即时同步到博客网站,无需第三方图床,写完可直接粘贴。支持网络图片上传。适用范围本程序基于.netcore3.1开发,支持在win-x64,macosx-x64系统运行,免安装。linux暂时不考虑,如果有需要再说。程序的上传服务是使用MetaWebBlogAPI,MetaWe......
  • Windows11 操作系统 SysWOW64 文件夹的作用
    Windows11操作系统中的SysWOW64文件夹是一个重要的系统目录,它在某些方面扮演着特殊的角色。在这篇文章中,我将详细介绍SysWOW64文件夹的作用,并举例说明它在操作系统中的具体应用。首先,让我们了解一下该文件夹的背景和目的。SysWOW64文件夹是Windows64位操作系统中的一个......
  • 如何修改 Fiori Elements 工程包含的本地注解(annotations)文件试读版
    本教程前一篇文章:8.如何找到SAPFioriElements应用某个字段显示值具体的数据源,笔者试图解答我的知识星球里一个朋友的提问:在WebIde(SAPUI版本1.97.0)生成FioriElements的Overviewpage并发布后,再次在消费视图中修改UI注解后,本地运行该Overviewpage应用发现页面已经变动,......
  • Nginx配置不记录静态文件、过期时间
    用户访问web网站,通常日志文件会记录很多web站点上的一些静态文件信息,如果长期不处理,日志文件会越来越大,占用的系统资源也越大,此时就需要我们配置不记录静态文件和过期时间,减少日志文件记录过多不必要的内容信息和系统资源占用。1配置1.1编写conf文件[root@host~]#vim/usr/local/......
  • SAP Fiori Elements 应用里的 ui5.yaml 文件详解试读版
    本教程第4篇文章,我们介绍了本地启动SAPFioriElements应用的三种模式。4.SAPFioriElements本地应用启动的三种模式辨析以默认方式即命令行yarnstart启动之后,项目文件夹里的ui5.yaml文件会默认被加载并解析。ui5.yaml这个文件,在本地开发FreestyleUI5时也会......
  • 通过重写js脚本文件的例子看文件操作
    有以下文件:相对路径:"Resources/MainWindow/MsgHtml/msgtmpl.txt"文件内容: 要求:由于将要进行通信,我们将external0这个网页对象作为qq的发送者,这是可行的,然而接收者只有这一个对象external是不够的,我们将上面的txt文件作为一个初始版本,最后要进行更改,并最终要写入js文件中。......
  • 删除迅雷批理下载时在文件名尾部追加的41位随机字符串
    在删除迅雷批理下载时,通查会在文件名尾部追加的41位随机字符串。如文件名:知识点精讲(二十六)-建筑工程标准_889fcab66c13b6a02d0fe7b96045573a5506aaee.pdf 红色文字为迅雷追加的字符串,此时文件名过长,想删除该如何做呢?知识点精讲(二十六)-建筑工程标准_889fcab66c13b6a02d0fe......