一、静态文件的加载

1、使用步骤

①、在工程目录下创建static目录,创建css/js/images等目录,并添加相关资源

②、在settings.py中配置STATICFILES_DIRS

STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]

③、在模板中调用

  绝对路径:

<link rel="stylesheet" href="/static/css/my.css">

  相对路径:

{% load static %} 或 {% load staticfiles %}
<img src="{% static 'images/bige.jpg' %}">

2、重要配置

①、STATIC_URL

静态资源的虚拟路径,会启动“静态资源探测器”

②、STATICFILES_DIRS

“静态资源探测器”会首先去查找STATICFILES_DIRS配置里设置的目录下的静态资源;然后会去查找每个app下的static子目录下的静态资源

③、STATIC_ROOT

可以通过"python manage.py collectstatic"命令将所有应用的静态资源收集到STATIC_ROOT指向的目录中

二、文件上传

本质上就是文件的读写操作,从一个文件读取,到另外一个文件写入。

上传文件所在的表单必须设置enctype="multipart/form-data"

<form method="post"
action=""
enctype="multipart/form-data">
{% csrf_token %}
<input name="name" placeholder="用户名"> <br>
<input type="file" name="photo"><br>
<button>提交</button>
</form>

1、Python代码实现

将文件内容打碎,一块一块写入:chunks()

def upload_file(request):
if request.method == "GET":
return render(request, 'upload.html')
elif request.method == "POST":
icon = request.FILES.get("icon") with open("G:\code\django_test\static\img\icon.jpg", 'wb') as save_file: # 此处使用绝对路径
for part in icon.chunks():
save_file.write(part)
save_file.flush() # 写入一块就刷新一下,防止堵塞 return HttpResponse("文件上传成功")

2、ajax实现

def ajax_upload(request):
if request.method == 'GET':
return render(request,'upload_ajax.html')
else:
name = request.POST.get('ajaxname') # 接收文本框中的用户名
upload_obj = request.FILES.get('ajaxphoto') # 接收上传的文件,返回上传文件对象
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
upload_path = os.path.join(BASE_DIR, 'upload','ajax', upload_obj.name) # 拼接上传文件的路径
with open(upload_path, 'wb') as f:
for chunk in upload_obj.chunks():
f.write(chunk)
data = {
'status':'900',
'msg':'恭喜,'+ name + '上传成功',
'picpath':'ajax/'+ upload_obj.name,
}
return JsonResponse(data)
<!DOCTYPE html>
{% load static %}
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ajax上传文件</title>
<script src="{% static 'jquery-3.1.1.js' %}"></script>
</head>
<body>
{% csrf_token %}
<p>上传人: <input type="text" name="name"></p>
<p>照片: <input type="file" name="photo"></p>
<input type="button" value="点我上传" id="btn">
<span id="msg"></span>
<img src="" alt="" id="pic">
</body>
</html>
<script>
$('#btn').click(function(){
var formData = new FormData(); //用来收集上传数据的对象
formData.append('ajaxname',$('input[name="name"]').val()); //添加用户名
formData.append('ajaxphoto',$('input[name="photo"]')[0].files[0]); //添加文件
//alert($('input[name="photo"]')[0].files[0]);
formData.append('csrfmiddlewaretoken',$('input[name="csrfmiddlewaretoken"]').val()); //添加token
$.ajax("{% url 'upload:ajax' %}",{
type:'POST',
data: formData,
contentType:false,
processData:false,
success:function (data) {
if(data.status=='900'){
$('#msg').html(data.msg);
var picpath = data.picpath;
$('#pic').attr('src','/static/'+picpath);
}
}
})
})
</script>

3、Django内置

①、配置

在settings.py文件中声明上传的路径。

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

②、图片上传

ImageField,专门用来处理图像上传,需要添加依赖pillow,pillow是专门处理图像的库

pip install pillow

ImageFiled中使用upload_to,需要指定上传后的目录

photo = models.ImageField(upload_to='upload')  # 此处upload相当于MEDIE_ROOT

③、文件上传

FileField,与图片上传一致

④、文件存储

class Author(models.Model):
name = models.CharField(max_length=20)
photo = models.ImageField(upload_to='upload')
name = request.POST.get("name")
photo = request.FILES.get('photo')
author = Author()
author.name = name
author.photo = photo
author.save() # 数据库存储的是路径

Django中的文件操作的更多相关文章

  1. 第32课 Qt中的文件操作

    1. Qt的中IO操作 (1)Qt中IO操作的处理方式 ①Qt通过统一的接口简化了文件和外部设备的操作方式 ②Qt中的文件被看作一种特殊的外部设备 ③Qt中的文件操作与外部设备的操作相同 (2)IO操 ...

  2. 重新想象 Windows 8 Store Apps (24) - 文件系统: Application Data 中的文件操作, Package 中的文件操作, 可移动存储中的文件操作

    原文:重新想象 Windows 8 Store Apps (24) - 文件系统: Application Data 中的文件操作, Package 中的文件操作, 可移动存储中的文件操作 [源码下载 ...

  3. 背水一战 Windows 10 (91) - 文件系统: Application Data 中的文件操作, Application Data 中的“设置”操作, 通过 uri 引用 Application Data 中的媒体

    [源码下载] 背水一战 Windows 10 (91) - 文件系统: Application Data 中的文件操作, Application Data 中的“设置”操作, 通过 uri 引用 Ap ...

  4. 背水一战 Windows 10 (90) - 文件系统: 获取 Package 中的文件, 可移动存储中的文件操作, “库”管理

    [源码下载] 背水一战 Windows 10 (90) - 文件系统: 获取 Package 中的文件, 可移动存储中的文件操作, “库”管理 作者:webabcd 介绍背水一战 Windows 10 ...

  5. django 中下载文件与下载保存为excel

    一.django 中下载文件 在实际的项目中很多时候需要用到下载功能,如导excel.pdf或者文件下载,当然你可以使用web服务自己搭建可以用于下载的资源服务器,如nginx,这里我们主要介绍dja ...

  6. Django中管理并发操作

    上一篇我们说了,如何在Django中进行事务操作,数据的原子性操作 涉及了事务操作,我们不得不考虑的另一个问题就是:并发操作 还是那个用户转账的操作 我们使用事务操作解决的操作中途服务器宕机问题 但是 ...

  7. Java中的文件操作(一)RandomAccessFile

    今天,学到的是java中的文件操作. Java.IO.File Java中操作文件用到RandomAccessFile类,既可以读取文件内容,也可以向文件输出数据,但不同与普通输入/输出流的是Rand ...

  8. Win 32平台SDK中的文件操作

    读取文件: HANDLE hFile ; // 声明文件操作内核对象句柄 hFile = CreateFile(, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL ...

  9. django中migration文件是干啥的

    昨天很蠢的问leader git push的时候会不会把本地的数据库文件上传上去,意思是django中那些migration文件修改之后会不会上传. 然后得知不会,因为所有的数据库都存在本机的mysq ...

  10. Django中的文件上传和原生Ajax

    概述 Django中的上传有3种方案: form 表单常规上传,但点击提交后会自动刷新页面 Ajax 上传,不刷新页面,(分为原生ajax上传和jQuery上传),IE7以上不兼容 iframe 上传 ...

随机推荐

  1. css 技巧:利用 after 伪对象和 background 属性实现 img 图片标签占位图

    同步发布:https://blog.jijian.link/2020-04-15/css-img-after-placeholder/ 如图: 图片加载失败了,在浏览器会默认显示一张破图.受各种网速. ...

  2. ubuntu网络连接失败

    首先要保证pc上可以连接上网络,然后进行下面的操作: 1.首先选择VMware的编辑选项 2.选择虚拟网络编辑器 3.还原默认设置,等待几分钟,确定就可以解决了

  3. Netty源码—2.Reactor线程模型一

    大纲 1.关于NioEventLoop的问题整理 2.理解Reactor线程模型主要分三部分 3.NioEventLoop的创建 4.NioEventLoop的启动 1.关于NioEventLoop的 ...

  4. 这是base-还原数字查正确码表再解码

    题目: dict:{0: 'J', 1: 'K', 2: 'L', 3: 'M', 4: 'N', 5: 'O', 6: 'x', 7: 'y', 8: 'U', 9: 'V', 10: 'z', 1 ...

  5. 从零开始:基于 PyTorch 的图像分类模型

    摘要:本文详细记录了使用 PyTorch 从零搭建一个图像分类模型的过程,涵盖卷积神经网络(CNN).数据预处理.模型设计.训练调试与优化.通过对 CIFAR-10 数据集的处理实践,结合经典文献和 ...

  6. 集合的通用遍历方法--java进阶day09

    1.集合的三种通用遍历方法 之前我们学习过集合的遍历方法,为什么这里还要再学呢? 这是因为,之前我们用的遍历方法使用了索引,但我们知道set接口的实现类的集合均无索引,所以我们要学习通用的遍历方法 2 ...

  7. 1001: 【编程入门】A+B 输入输出练习I

    1001: [编程入门]A+B 输入输出练习I[https://www.cyccfoj.com/problem.php?id=1001] ''' 题目描述 你的任务是计算a+b.这是为了acm初学者专 ...

  8. Golang 301永久重定向

    比如我要把www.taadis.com永久重定向到taadis.com //main.go package main import ( "log" "net/http&q ...

  9. unigui的程序编译后自动运行傻傻的手动【7】

    我们每次修改unigui程序后,一般需要编译后执行,查看效果.可是每次都要关闭杀掉服务程序,再刷新浏览器才能实现. EMB应该知道这个反人类的做法吧.实际上提供了参数配置:自动kill服务程序,自动打 ...

  10. 如何使用Git命令将代码上传到GitHub

    1. 首先在我们的计算机上创建文件夹:例如取名:test 2. 进入test文件夹后点击鼠标右键,选择打开Git Bash. 3. 将我们创建的文件夹初始化为Git仓库:git init 4. 将要上 ...