Django静态文件

本文详细介绍了在Django框架中如何管理静态文件,包括创建静态文件夹、配置settings文件、在模板中引入静态资源,以及如何处理上传的文件。涵盖了从静态资源的基本概念到具体实践的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

静态文件:
除了由服务器生成的HTML文件外,WEB应用一般需要提供一些其它的必要文件,比如图片文件、JavaScript脚本和CSS样式表等等,用来为用户呈现出一个完整的网页。在Django中,我们将这些文件统称为“静态文件”,因为这些文件的内容基本是固定不变的,不需要动态生成。

静态资源使用步骤:
1.创建静态文件夹
static目录 :创建一个用来存储静态资源的文件夹(js css img video mp4)
【建议此处根据app创建一个对应的子目录,用来专门存放此app的类型文件夹,再根据文件夹类型存放对应的静态文件】

2.settings文件中配置两处静态文件,121,123
STATIC_URL = ‘/static/’ # 存储的静态文件夹名
STATICFILES_DIRS = ( # 配置静态文件的绝对路径 需要手写
os.path.join(BASE_DIR,‘static’), # 使用拼接路径方法注册定位static文件夹的绝对路径(注意有逗号)
)
3.配置模板,在模板中引入静态文件
{% load staticfiles %} :使用静态文件前需要在html上的固定写法用来引入注册好的静态文件

4.渲染到页面
{% static ‘资源路径’ %} :在 img标签中 使用static模板标签会生成静态文件的绝对URL路径

引入css文件的方法:需要定义在头部中
{% load staticfiles %}

【写入css文件】
【写入js文件】

py页处理上传的文件:
生成hash密文:
需要导包 import hashlib
def get_md5(str_):
m = hashlib.md5()
m.update(str_.encode())
return m.hexdigest()

图片名 = get_md5(str(time.time())) # 以当前时间为参数并转换成字符串形式传入hash密文函数中生成密文
f = request.FILES.get(标签name值) :以对象的形式获取表单中上传文件标签的值
【可以看作是一个字典对象,它包含所有的上载文件】

path = os.path.join(STATICFILES_DIRS[0],‘子文件夹名/’+f.name) :因为它是一个元祖的形式所以要取它的第一个值
【import os 系统命令模块 os.path.join():拼接路径方法找到要保存此文件的路径】
path = os.path.join(STATICFILES_DIRS[0], ‘app1/img/’ + 图片名 + ‘.’ + f.name.split(’.’)[-1] )
【生成文件】

f.multiple_chunks() :返回文件大小,当文件大小大于2.5M时,返回True,反之返回False
【可以通过该函数来判断是否使用chunks()或read()方法直接存储】
修改这个文件判定的默认值可以通过: FILE_UPLOAD_MAX_MEMORY_SIZE 在settings文件下进行设置
f_data = f.read() :读取整个上传文件的内容
(适合小文件上传)
yiled = f.chunks() :返回一个类似生成器的数据,每一次读取按块返回文件,可以通过 for 迭代访问其中数据 (适合上传大文件到服务器)

with open(路径,‘类型’) as 别名 :打开某个静态文件 的时候需要导包,找到文件目录
【from 主文件夹.settings import STATICFILES_DIRS】
f.wirte() :写入方法
关键字参数
mode=‘w’ :方式(可以不写,直接写‘w’)
r 读文本文件 (所有方式中后面带+加号表示可读可写)
rb 读二进制文件
w 写文本文件 (用于覆盖)
wb 写二进制文件
a 写文本文件 (用于在末尾追加)
ab 写二进制文件

f.name :上传文件的名字
f.content_type :上传文件时头部中的Content-Type字段值,参考MIME类型
f.charset :上传文件编码
f.size :上传文件大小,字节为单位:byte

模板页上传文件:
{% csrf_token %} 安全秘钥
在模板页面中,一旦涉及到了表单提交,那么一定要注意在表单区域添加 {% csrf_token %} 标签进行防跨站
伪造令牌的加载,否则表单数据的将被认为是无效的。

enctype="multipart/form-data" :上传文件的页面表单,一定要设置enctype(编码类型) (multipart/form-data是指表单数据有多部分构成,既有文本数据,又有文件等二进制数据的意思。) enctype:规定了form表单在发送到服务器时候编码方式 有如下的三个值: 1、application/x-www-form-urlencoded # 默认的编码方式。但是在用文本的传输和MP3等大型文件的时候,使用这种编码就显得 效率低下。 2、multipart/form-data # 指定传输数据为二进制类型,比如图片、mp3、文件。 3、text/plain。 # 纯文体的传输。空格转换为 “+” 加号,但不对特殊字符编码。 需要注意的是:默认情况下,enctype的值是application/x-www-form-urlencoded,不能用于文件上传, 只有使用了multipart/form-data,才能完整的传递文件数据。 【application/x-www-form-urlencoded不是不能上传文件,是只能上传文本格式的文件】 【multipart/form-data是将文件以二进制的形式上传,这样可以实现多种类型的文件上传。】

自定义错误提醒模板:
第一种:
1.定义一个出错误的函数
2.返回对应错误码的html报错页面
3.handler500 = ‘子应用.views.http_500’ :消息处理器(需要urls下配置报错页面对应的视图函数)
DEBUG = FALSE
ALLOWED_HOSTS = [’*’] # 需要设置这两项来模拟访问者测试此页面
第二种:
创建一个404.html可以直接在里面自定义报错信息(只限制404使用)
导入模块Http404

return HttpResponse(status=500) :status可以设置状态码的关键字参数返回给页面对应的错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值