[Python] Django框架入门5——静态文件、中间件、上传图片和分页
说明:
本文主要描述Django其他的内容,涉及静态文件处理、中间件、上传文件、分页等。
开发环境:win10、Python3.5、Django1.10。
一、静态文件处理
在Django项目的静态文件主要指的是css、js和图片等文件。
1、配置静态文件
在settings.py文件中配置静态内容:
STATIC_URL:在html文件中使用的路径,如:"/static/images/logo.png"。
STATICFILES_DIRS:指静态文件在项目的存放位置。

2、新建目录
在项目目录下(与manager.py同级)创建static目录,再在static目录下创建当前应用的名称:

此时可以将静态文件加入到对应的应用中:"/static/myapp/css"、"/static/myapp/js" 。
3、应用
在模板中可以使用硬编码

在模板可以使用static编码

二、中间件
在Django中的中间件,是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。
使用中间件:把中间件添加到配置文件(settings.py)中的MIDDLEWARE_CLASSES元组中。
1、每个中间件组件是一个独立的Python类,可以定义下面方法中的一个或多个:
__init__:无需任何参数,服务器响应第一个请求的时候调用一次,用于确定是否启用当前中间件。
process_request( request ):执行视图之前被调用,在每个请求上调用,返回None或HttpResponse对象。
process_view( request, view_func, view_args, view_kwargs ):调用视图之前被调用,在每个请求上调用,返回None或HttpResponse对象。
process_template_response( request, response ):在视图刚好执行完毕之后被调用,在每个请求上调用,返回实现了render方法的响应对象。
process_response( request, response ):所有响应放回浏览器之前被调用,在每个请求上调用,返回HttpResponse对象。
process_exception( request, response, exception ):当视图抛出异常时调用,在每个请求上调用,返回一个HttpResponse对象。
如图所示

2、实例:自定义异常处理
》在与配置文件(settings.py)同级目录下创建 myexception.py文件,定义类MyException,实现process_exception方法,编码如下:

》注册中间件,将MyException注册到settings.py的中间件(MIDDLEWARE、Django1.4-1.9 是 MIDDLEWARE_CLASSES)中:

》定义一个视图,并抛出一个异常,则会运行自定义的异常处理

三、上传文件
当Django在处理文件上传的时候,文件数据呗保存在request.FILES中。
FILES中的每个键为 <input type="file" name=""> 中的name。
值得注意的是:FILES只有在请求方式为POST,并提交的<form>带有enctype="multipart/form-data"的情况下才会包含数据。否则,FILES将会是一个空的类似于字典的对象。
下面是实例(保存上传图片):
1、使用模型处理上传的文件:将属性定义为 models.ImageField类型

注意:如果属性类型为ImageField,需要安装Pilow,已安装则忽略

2、图片存储路径:
在项目的static目录下创建 media文件夹,图片上传后,会保存到 "/static/media/图片文件"。
打开settings.py文件,添加 media_root项:

可以使用Django管理后台,遇到ImageField类型的属性会出现一个files框,完成上传。
3、手动上传模板代码:

4、手动上传视图代码:

四、分页
Django框架提供了一些实现管理数据分页的类,这些类位于 django/core/paginator.py 中。
1、Paginator对象
__init__( 列表, int ):返回分页对象,参数为列表数据,每页数据的条数。
count:对象总数。
num_page:页面总数。
page_range:页码列表,从1开始,例如[1, 2, 3, 4]
page( num ):下标以1开始,如果提供的页码不存在,抛出InvalidPage异常。
异常Exception:
InvalidPage:当向page()传入一个无效的页码时抛出。
PageNotAnInteger:当向page()传入一个不是整数的值抛出。
EmptyPage:当向page()提供一个有效值,但是那页面上没有任何对象时抛出。
2、Page对象:
Paginator对象的 page() 方法返回 Page 对象,不需要手动构建。
属性:
object_list:当前页上所有对象的列表。
number:当前页的序号,从 1 开始。
paginator:当前 page 对象相关的 Paginator 对象。
方法:
has_next():如果有下一页则返回True。
has_previus():如果有上一页则返回True。
has_other_pages():如果有上一页或下一页则返回True。
next_page_number():返回下一页的页码,如果下一页不存在,抛出 InvalidPage 异常。
len():返回当前页面对象的个数。
迭代页面对象:返回当前页面中的每个对象
3、实例
》创建视图

》配置url

》定义模板

[Python] Django框架入门5——静态文件、中间件、上传图片和分页的更多相关文章
- [Python] Django框架入门
说明:Django框架入门 当前项目环境:python3.5.django-1.11 项目名:test1 应用名:booktest 命令可简写为:python manager.py xxx => ...
- node框架express里面静态文件中间件express.static,根据路径名查找文件
- 是express框架下的一个方法,可以根据请求路径名查找某个文件下文件名字和路径名相同的文件 - 3.X里面有20多个中间件,但是在4.X里面 只保留了express.static - 语法 ex ...
- django框架中的静态文件引入
首先在项目文件中新建文件夹static 之后在settings.py中配置路径 如下图所示: 下一步在你刚创建的static文件夹中添加app的文件夹名称,例如:teacher,如下图: 之后在tea ...
- [Python] Django框架入门2——深入模型
说明: 本文主要深入了解模型(models.py),涉及ORM简介.模型定义.模型成员.模型查询.自连接等.需要一定基础,可以先走一走基本入门流程. 附录一使用mysql数据库,附录二Django开发 ...
- [Python] Django框架入门3——深入视图
说明: 本文主要深入了解视图(views.py),涉及路由配置.定义视图.Request对象.Response对象.状态保持等. 一.路由配置 1.配置位置(settings.py 的 ROOT_UR ...
- [Python] Django框架入门4——深入模板
说明: 本文主要深入了解模板(templates),主要涉及模板编写步骤.定义模板.模板继承.HTML转义.CSRF等. 一.模板 动态生成HTML.表达外观.实现业务逻辑(view)与显示内容(te ...
- 擦他丫的,今天在Django项目中引用静态文件jQuery.js 就是引入报错,终于找到原因了!
擦 ,今天在Django项目中引用静态文件jQuery.js 就是引入报错,终于找到原因了! 问题在于我使用的谷歌浏览器,默认使用了缓存,导致每次访问同一个url时,都返回的是缓存里面的东西.通过谷歌 ...
- Django 2.0 学习(13):Django模板继承和静态文件
Django模板继承和静态文件 模板继承(extend) Django模板引擎中最强大也是最复杂的部分就是模板继承了,模板继承可以让我们创建一个基本的"骨架"模板,它可以包含网页中 ...
- 利用 Python django 框架 输入汉字,数字,字符,等。。转成二维码!
利用 Python django 框架 输入汉字,数字,字符,等..转成二维码! 模块必备:Python环境 + pillow + qrcode 模块 核心代码import qrcode qr = ...
随机推荐
- C# Winform程序如何使用ClickOnce发布并自动升级(图解)
有不少朋友问到C#Winform程序怎么样配置升级,怎么样打包,怎么样发布的,在这里我解释一下打包和发布关于打包的大家可以看我的文章C# winform程序怎么打包成安装项目(图解)其实打包是打包,发 ...
- python requests、xpath爬虫增加博客访问量
这是一个分析IP代理网站,通过代理网站提供的ip去访问CSDN博客,达到以不同ip访同一博客的目的,以娱乐为主,大家可以去玩一下. 首先,准备工作,设置User-Agent: #1.headers h ...
- selenium Java中常见等待的几种形式
前言 在自动化测试中,我们经常会碰到编写脚本过程中操作某个元素的时候, 需要等待页面加载完成后,才能对元素操作,否则会报错,提示页面元素不存在异常,我们需要等待元素加载完成后,才能继续操作,而Sele ...
- Angular JS 中的服务注册方法
在Angular JS中创建服务的几种方法 factory() service() constant() value() provider() factory(name,fn(){}) 该服务为单例的 ...
- 基于简单DUT的UVM验证平台的搭建(一)
最近一个月在实习公司做回归测试,对公司的UVM平台用的比较熟练,就想着自己做一个DUT,然后搭建一个UVM验证平台. 首先,DUT是一个简单的32位的加法器,代码如下:alu.v module add ...
- 七分钟理解什么是 KMP 算法
本文是介绍 什么是 BF算法.KMP算法.BM算法 三部曲之一. KMP算法 内部涉及到的数学原理与知识太多,本文只会对 KMP算法 的运行过程. 部分匹配表 .next数组 进行介绍,如果理解了这三 ...
- 经典SQL(sqlServer)
一.基础 .说明:创建新表create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) .分组: ...
- 开发一个Spring Boot Starter!
在上一篇文章中,我们已经了解了一个starter实现自动配置的基本流程,在这一小结我们将复现上一过程,实现一个自定义的starter. 先来分析starter的需求: 在项目中添加自定义的starte ...
- Linux部署项目遇到问题解决
使用Linux部署web项目,可能会遇到各种各样问题导致服务启动失败,以下是我近期部署项目遇到的问题以及解决方案 一.场景:把war包放入tomcat的webapps文件夹下,然后启动tomcat服务 ...
- 【React踩坑记一】React项目中禁用浏览器双击选中文字的功能
常规项目,我们只需要给标签加一个onselectstart事件,return false就可以 例: <div onselectstart="return false;" & ...