[技术博客] Django中文件的保存与访问

TextMarking项目开发中,数据库需要保存用户上传的文本文档。

原型设计:用户点击上传文本->保存文本->文本发送到后端保存为文件。

我在此记录一种文本保存的方法

1. 在settings中配置media路径

在django项目根目录添加一个文件夹media,并在settings中添加如下路径

MEDIA_URL = '/media/' 

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

2. 在url中配置访问路径

from django.conf.urls import url,include
from django.contrib import admin
from django.views.static import serve
from 项目名字.settings import MEDIA_ROOT urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^media/(?P<path>.*)$', serve, {"document_root":MEDIA_ROOT}), url(r'^video/', include("APP名字.urls")), ]

配置完成后,可以通过http://127.0.0.1:8000/media/文件夹名/.../文件名访问项目终media文件夹下的文件

3. 配置models

from django.db import models
from django.core.files.storage import FileSystemStorage class Car(models.Model):
photo = models.FileField(upload_to='video')

这是一个文件,不一定是图片。FileField将数据插入数据库的时候,会自动存放在配置的media文件夹下的media/video/文件名中,如果重复,会自动重命名。

4. views中保存文件

from django.shortcuts import render
from django.http import HttpResponse
from django.views.generic import View
# 导入刚刚的Cal类
from .models import Car class UploadView(View):
def get(self, request):
return HttpResponse('result') def post(self, request):
#接收上传的文件
file_obj = request.FILES.get('file', None)
# 上传文件的名字
print(file_obj.name)
# 我们给他重新命名
file_obj.name = "123456.mp4"
# 传入数据库
car= Car(photo=file_obj)
# 保存
car.save()
return HttpResponse('post')

video/123456.mp4存了两次,第二次因为重复,变成了video/123456_PomZXmG.mp4。

如果要对文件进行访问,需要查询这个字段的值,染后拼接处url即可,例如:

http://127.0.0.1:8000/media/video/123456_PomZXmG.mp4

参考资料

django上传文件并保存,还可以访问

django怎样保存上传的文件

[技术博客] Django中文件的保存与访问的更多相关文章

  1. [技术博客]windows中使用docker技术

    背景 我们的工程使用了一个叫做termux的安卓上的linux终端,这个终端在所有的软件包里硬编码了软件的运行路径(/data/data/com.termux/..),由于安卓系统的权限设计,我们名为 ...

  2. [技术博客]Django框架-后端的搭建

    目录 Django框架-后端的搭建 前言 环境的部署 项目的创建 app的使用 创建app 修改配置文件 app中数据表的构建 前端接口 接口的路径 运行服务器 验证后端 Django框架-后端的搭建 ...

  3. [技术博客]django连接mysql数据库的方法及部分问题的解决方法

    配置机器介绍 操作系统:Ubuntu 18.04.2 LTS 64位 python版本:Python 3.6.7 Django版本:Django 2.2 MySql版本:5.7.26 数据库选择 我们 ...

  4. [技术博客]Pyqt中View类别容器和Widget类别容器的区别

    Pyqt中View类别容器和Widget类别容器的区别 简介 在beta迭代中,我们选择用pyqt5来重写alpha迭代中使用tkinter库编写的界面. ​ 按钮之类的与tkiner使用无异,在显示 ...

  5. [技术博客]React-Native中的组件加载、卸载与setState问题

    React-Native中的组件加载.卸载与setState问题. Warning: Can only update a mounted or mounting component. This usu ...

  6. C++中实现对map按照value值进行排序 - 菜鸟变身记 - 51CTO技术博客

    C++中实现对map按照value值进行排序 - 菜鸟变身记 - 51CTO技术博客 C++中实现对map按照value值进行排序 2012-03-15 15:32:36 标签:map 职场 休闲 排 ...

  7. 【技术博客】Django中文件下载的实现

    开发组在开发过程中,都不可避免地遇到了一些困难或问题,但都最终想出办法克服了.我们认为这样的经验是有必要记录下来的,因此就有了[技术博客]. Django中文件下载的实现 1.背景 在VisualPy ...

  8. 【技术博客】JWT的认证机制Django项目中应用

    开发组在开发过程中,都不可避免地遇到了一些困难或问题,但都最终想出办法克服了.我们认为这样的经验是有必要记录下来的,因此就有了[技术博客]. JWT的认证机制Django项目中应用 这篇技术博客基于软 ...

  9. 一文搞定scrapy爬取众多知名技术博客文章保存到本地数据库,包含:cnblog、csdn、51cto、itpub、jobbole、oschina等

    本文旨在通过爬取一系列博客网站技术文章的实践,介绍一下scrapy这个python语言中强大的整站爬虫框架的使用.各位童鞋可不要用来干坏事哦,这些技术博客平台也是为了让我们大家更方便的交流.学习.提高 ...

随机推荐

  1. Python 高级特性(3)- 列表生成式

    range() 函数 日常工作中,range() 应该非常熟悉了,它可以生成一个迭代对象,然后可以使用 list() 将它转成一个 list # 判断是不是迭代对象 print(isinstance( ...

  2. JUnit5快速入门指南-2

    重复测试中容易产生的问题 //结果类 private static int result = 0; public static int count(int x) throws InterruptedE ...

  3. 记一次《C语言踩内存》问题定位有感

    踩内存问题,个人认为算是比较容易出现但是有很难定位的问题,被踩者轻者功能瘫痪,重者一命呜呼,直接诱发死机.产生踩内存的的原因也比较多样,比较典型的有如下几种: 数组越界访问 字符串越界操作 直接操作野 ...

  4. Spring基于XML方式加载Bean定义信息(又名:Spring IOC源码时序图)-图解

  5. [第十五篇]——Swarm 集群管理之Spring Cloud直播商城 b2b2c电子商务技术总结

    Swarm 集群管理 简介 Docker Swarm 是 Docker 的集群管理工具.它将 Docker 主机池转变为单个虚拟 Docker 主机. Docker Swarm 提供了标准的 Dock ...

  6. MySql分表、分库、分片和分区的区别

    一.前言 数据库的数据量达到一定程度之后,为避免带来系统性能上的瓶颈.需要进行数据的处理,采用的手段是分区.分片.分库.分表. 二.分片(类似分库) 分片是把数据库横向扩展(Scale Out)到多个 ...

  7. FastAPI(5)- get 请求 - 查询参数 Query Parameters

    什么是查询参数? http://127.0.0.1:8000/get?name=xxx&age=18 http://127.0.0.1:8000/get?age=18&name=xxx ...

  8. 在 vue-cli 项目中 使用elementUI 的“自定义主题”功能

    1.安装elementUI $ npm i element-ui -S 2.安装主题工具 npm i element-theme -g 3.安装chalk主题 npm 安装 npm i element ...

  9. leetcode-螺旋矩阵(指针)

    给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素. 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2 ...

  10. Sentry 监控 - Dashboards 事件数据可视化大屏

    系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...