静态文件:
除了由服务器生成的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 %}
【写入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 %} 标签进行防跨站
伪造令牌的加载,否则表单数据的将被认为是无效的。
自定义错误提醒模板:
第一种:
1.定义一个出错误的函数
2.返回对应错误码的html报错页面
3.handler500 = ‘子应用.views.http_500’ :消息处理器(需要urls下配置报错页面对应的视图函数)
DEBUG = FALSE
ALLOWED_HOSTS = [’*’] # 需要设置这两项来模拟访问者测试此页面
第二种:
创建一个404.html可以直接在里面自定义报错信息(只限制404使用)
导入模块Http404
return HttpResponse(status=500) :status可以设置状态码的关键字参数返回给页面对应的错误