Python学习笔记——pycharm web服务器搭建(9):其他知识点

本文介绍了在Django中处理静态文件、使用中间件、图片上传、分页以及省市县三级联动查询。重点讲解了STATIC_URL的逻辑路径配置和STATICFILES_DIRS的物理路径配置,以及Paginator对象和Page对象的使用。同时,阐述了中间件的工作原理,并展示了如何实现上传图片和分页功能。最后,通过实例演示了省市县三级联查的实现过程,涉及AJAX动态刷新页面。

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

一、静态文件

我们要在网页中加载一张图,如何做?

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">
    <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值