一、静态文件
我们要在网页中加载一张图,如何做?
settings中添加代码:
STATIC_URL = '/static/'(已经存在)
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
在项目目录下(应用同级),创建static文件,然后在static文件下创建应用名称的文件夹(原理类似templates),然后把图片放在对应的应用文件夹下
按照之前的流程建立服务器,至能访问网页为止,在模板中添加标签
<img src="/static/day20180522/timg.jpg" alt="图片">
到这步,图片已经可以显示出来了
这时候我们看
STATIC_URL 和 img 中的都是有static目录的出现
其实STATIC_URL完成的 图片路径的映射
我们将这两个地方的static改成abc 试一试
发现仍然可以进行访问
我们在新建目录的时候建立的确实是static文件夹
这就是映射,虚拟目录映射物理目录
在访问的时候你看到的目录是abc,其实这是映射过的就是static目录
这样做对物理目录一定程度上进行了保护
当STATIC_URL 与 img的头层目录 相等的时候
解析器会去STATICFILES_DIRS中设置的目录中去找你要的图片或者文件
当然可以不用static名称,只要物理目录和STATICFILES_DIRS中设置的目录相同即可
当然我们有更好的处理方法,不用去关系这乱七八糟的映射,直接利用反向解析的思想
让Django帮我们生成路径
在模板的开头引入
{% load static from staticfiles %}
{# 在图片使用的地方 #}
<img src="{% static 'day20180522/timg.jpg' %}" alt="">
当我们这样写:
settings:
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
模板:
{% load static from staticfiles %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>index</title>
</head>
<body>
<img src="/static/day20180522/timg.jpg" alt="图片"
width="200" height="100">
<br>
<img src="{% static 'day20180522/timg.jpg' %}" alt=""
width="200" height="100">
</body>
</html>
这时候,我们更改 STATIC_URL = ‘sy’
刷新网页,会发现上面的图片不显示了
源代码:
我们使用反向解析的img成功解析到图片,而绝对路径的图片还是原来的static,与STATIC_URL不符合,所以找不到图片。
综上,在settings中 STATIC_URL 配置的逻辑路径
STATICFILES_DIRS 配置是物理路径
二、中间件
settings中的MIDDLEWARE_CLASSES
就是一个轻量级底层的插件系统,让我们干扰Django的输入或者输出
一般情况下,访问过程如下:
网络请求 →(①)→ ② → URL → ③ → View → ④ → html → ⑤ → 返回
① : __init__(在第一次请求的时候执行,其他时间不执行)
② : process_request()
③ : process_view()
④ : process_template_response()
⑤ : process_response()
还有一种是process_exception() 是视图出错才会执行这个方法,执行完后,返回
每个中间件,都是一个独立的python类。
三、上传图片
模板中定义
<input type='file' name='xx'>
View视图中接收
request.FILES[xx]
上传文件只能在post中使用
并且form表单提交时要添加enctype = 'mulipart/form-data'才能包含数据
否则FILES中是空的QueryDict对象
实现顺序:
1、安装pillow
2、配置文件路径
settings中
MEDIA_ROOT = os.path.join(BASE_DIR, 'static/media/')
3、定义上传模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>upload</title>
</head>
<body>
<form action="{% url 'day20180522:uploadHandle' %}"
method="post" enctype="multipart/form-data">
<