《Django3.0应用开发详解》李向军|(epub+azw3+mobi+pdf)电子书下载

图书名称:《Django3.0应用开发详解》

【作 者】李向军
【丛书名】Web开发技术丛书
【页 数】 308
【出版社】 北京:机械工业出版社 , 2021.10
【ISBN号】978-7-111-69090-0
【分 类】软件工具-程序设计
【参考文献】 李向军. Django3.0应用开发详解. 北京:机械工业出版社, 2021.10.

图书封面:

图书目录:

《Django3.0应用开发详解》内容提要:

全书共15章。首先概述Django3的特性,然后介绍Django环境搭建情况以及默认情况下的工程内容,阐述了Django的各类管理命令及其用法,Django路由调用的各项使用方式,模型的属性、类型、关联模型类型以及模型元数据,Django的请求响应机制、CBV概念、模板的定义及模板变量的使用,紧接着介绍系统模板标签、系统模板过滤器、数据库相关内容、常用中间件、管理应用模块的主要对象以及相关的自定义设置形式。z后说明部署以及发布流程并列举了Django使用中发生的一些常见问题。

《Django3.0应用开发详解》内容试读

:

短道道围新范的世增后可世量简短道留留增圆备量

第1章Choler 1

Django简介

作为本书的第1章,将简略介绍Django的来历及特点,并详细介绍Django3.0的一些新特性,为后面的学习打下基础。

1.1什么是Django

Django是Python编程语言驱动的一个基于MVC风格的Web应用程序框架,最初是被开发用于管理劳伦斯出版集团(Lawrence Journal World)旗下的一些以新闻内容为主的网站的;2005年7月,该框架在GitHub站点以BSD许可证形式发布。

Djange0于2012年3月8日发布1.0版本,2017年12月2日发布2.0版本,2019年12月2日发布3.0版本,目前最新的版本为2020年8月4日发布的3.1版本

由于该程序框架是基于Python开发的,因此Django版本与Python版本之间有很强的关联,具体见表1-1。

表1-1 Django与Python版本之间的关联

Django版本

Python版本

1.0

至少2.3

1.2

至少2.4

1.3

至少2.5

1.11

2.7、3.4、3.5、3.6、3.7

2.0

3.4、3.5、3.6、3.7

3.0、3.1

3.6、3.7、3.8

2,Django3.0应用开发详解

1.2 Django与其他Web框架的对比

目前,运用Python作网站开发的Web框架很多,主要有Django、Flask与Tornado。下面我们对这三种框架进行简要的对比(见表1-2)。

表1-2 Django、Flask与Tornado的对比

框架名称

比较内容

Django

Flask

Tornado

最早发布时间

2005年11月4日

2010年4月16日

2010年7月23日

开源协议

BSD-3-Clause

BSD-3-Clause

Apache-2.0

框架体量

大和全,自带ORM、temp

除了核心模块和Jinja2模板以外

除了核心模块,'没有其

late、view,为重量级框架

没有其他模块,为轻量级框架

他模块,为轻量级框架

模块之间耦合程度高,几

扩展性

乎不可能组配其他外部功能模

作为微型框架,它可以自由组配

块,但是可以增加并丰富它的

可扩展外部功能模块

外部功能模块

Middlerware/contrib适合新手,适合一般网站

适用性

对新手来说不好控制,适合能力

与Flask类似

快速开发

强的开发团队开发

如果考虑安全性,对于

需要熟悉各种外部功能模块,在

开发效率

般网站,它的开发效率是非常使用初期开发效率比较低,后期会

介于Flask、Django之间

高的

有所提高

ORM及模板处理速度相对

处理性能

ORM采用SQLAlchemy,性能较

较慢

与Flask类似

1.3

Django3.0的新特性

Django3.0沿用了Django2.0诸多特性,但也对一些方面进行了适当的调整,形成了

3.0版本独有的特性。Django3.0与Django2.0的不同之处主要在于以下十几个方面。

1.Python兼容性

Django3.0与Django3.1支持Python3.6、Python3.7与Python3.8,Django2.2.x会是最后一个支持Python3.5及更早版本的系列。对于第三方Django应用,官方建议应用开发者放弃对Django2.2及更早版本的支持。

2.ASGl的支持

新增对ASGI的支持,让Django逐渐支持异步功能。这是Django对现有Web服务器网关接口(Python Web Server Gatway Interface,WSGI)模式支持的补充。

3.数据库支持

支持使用MariaDB10.1或更高版本的数据库。不再支持PostgreSQL9.4版本,只支持

PostgreSQL9.5及以上版本。2021年不再支持Oracle12.1版本,只支持Oracle12.2及以上

第1章Django简介3

版本。

4.PostgreSQL的排斥约束

增加了类django..contrib.postgres.constraints.ExclusionConstraint,用来在数据库PostgreSQL上添加排除约束。使用Meta.constraints选项将定义的约束添加到模型。

5.过滤器表达式

表达式输出结果为BooleanField类型的值,可以直接在QuerySet过滤器中使用,而不必先注释,再针对注释进行过滤。

6.用于选择字段的枚举类

增加了模型关联的类TextChoices、IntegerChoices和Choices,这些类可用于定义Field.choices。.其中为文本和整数字段提供了TextChoices类型和IntegerChoices类型。在Choices类允许定义为其他具体的数据类型兼容的枚举。

7.缓存控制

在缓存控制方法patch cache control()中增加private标识的判断逻辑,该方法被addnever cache headers调用。在缓存控制方法patch cache control()中增加no-cache标识的判断逻辑,该方法被cache control调用(Django3.l新增功能)。

8.文件存储管理

提供了django..core.files.storage..Storage.get alternative name(0方法,用来根据已有文件名随机生成一个新文件名称。在一定程度上避免因多次上传同名文件而带来的存储影响。django.core.files.storage.FileSystemStorage的save()方法采用pathlib.Path类的路径解析(Django3.1新增功能)。

9.表单管理

表单管理是Django使用Forms的重要形式,在Django3.0中有如下调整:

口在表单的基础类中添加了can order属性,该属性默认为False;当该属性为True时,可在表单页面中增加排序属性。默认情况下排序属性以数值形式体现,用户可通过修改属性ordering widget或重写基类方法get ordering widget()来改变页面中排序属性的显示形式。

口调整类django.forms.ModelChoicelterator的choice(方法,使该方法以django.forms.

ModelChoicelterator Value实例形式返回。类django.forms.ModelChoicelterator用于表单字段ModelChoiceField和ModelMultipleChoiceField(Django3.l新增功能)。口表单字段DateTimeField(django.forms.DateTimeField)支持ISO8601时间格式传递,

接收配置节点DATE INPUT FORMATS与DATETIME INPUT FORMATS的信息

并将字段信息转换为时间值(Django3.1新增功能)。

口调整类django.forms.MultiWidget的初始传入参数widgets,使该参数可传递自定义的

4 Django3.0应用开发详解

subwidget字典信息(Django3.1新增功能)。调整类django.forms.BoundField,增加属性widget type,用于根据属性值动态调整表单显示信息(Django3.1新增功能)。

10.语言国际化

在语言国际化使用方面,Django3.0有如下调整:

口增加配置节点LANGUAGE COOKIE HTTPONLY,用来为语言cookie设置Http-

Only标志,该节点默认为False。当设置为True时,客户端JavaScript脚本将被禁止访问语言cookie。

口增加配置节点LANGUAGE COOKIE SAMESITE,用来为语言cookie设置Same

Site标志,该节点默认为None(Django3.l新增功能),表示语言cookie可被跨站点请求发送

口增加配置节点LANGUAGE COOKIE SECURE,用来为语言cookie增加安全访问控制,该节点默认为False。当设置为True时,标识只有在HTTPS连接时才会发送语言cookie.

口添加了对乌兹别克语、阿尔及利亚阿拉伯语、伊博语、吉尔吉斯语、塔吉克语、土库曼语的支持和翻译(Django3.1新增功能)。

11.日志管理

为类django.utils.log.AdminEmailHandler增加属性reporter class,该属性值为djangoviews..debug.ExceptionReporter子类的名称标识信息,该属性值用来自定义错误回溯格式。设置了此属性后,当配置节点Debug设置为False,Admin站点发生异常时,将按照自定义错误回溯格式向页面反馈信息

12.针对诸多管理命令进行的调整

对于框架管理命令,Django3.0做了如下调整:

口调整了命令的使用方式。调整了命令showmigrations,使该命令在参数verbosity值为2或3时,使用参数list将会显示应用时间信息;命令dbshell增加了对

PostgreSQL数据库的客户端TLS证书的支持;命令inspectdb会在字段外键存在唯一性或者受主键约束时,对类型为OneToOneField进行自我核查;命令startapp与startproject的template参数支持存放形式为XZ的档案(.tar.xz、.txz)和形式为LZMA的档案(.tar.lzma、.tlz)。

口增加了命令的参数。为命令compilemessages增加了参数ignore,.用于忽略对指定文件夹扫描编译文件:为命令check增加了参数database,用于指定数据库别名进行数据库检测(Diango3.1新增功能);为命令migrate增加了参数check,用于在数据迁移时检测是否存在未应用的迁移脚本,如果存在,则退出生成数据库对象(Django

3.1新增功能);为命令check增加了特别参数判断,以“-”分隔符作为判断依据,可根据不同数据库客户端设置不同的连接参数(Diango3.1新增功能);增加了所有

第1章Django简介5

命令的通用参数skip-checks,用来跳过运行命令之前正在运行的系统检查。

口为通用命令异常类django.core.management..CommandError增加初始化参数returncode,该参数用于自定义命令的退出状态(Django3.1新增功能)。

13.模型扩展

对于模型的使用,Django3.0做了如下调整:

口增加了各类函数。增加了MD5函数,用于将文本类型字段或表达式转换为基于

MD5的散列字符串:增加了SHA1函数,用于将文本类型字段或表达式转换为基于

SHA1的散列字符串:增加了SHA224函数,用于将文本类型字段或表达式转换为基

于SHA224的散列字符串,需要注意的是,该函数不适用于Oracle数据库;增加了

SHA256函数,用于将文本类型字段或表达式转换为基于SHA256的散列字符串;增

加了SHA384函数,用于将文本类型字段或表达式转换为基于SHA384的散列字符

串;增加了SHA512函数,用于将文本类型字段或表达式转换为基于SHA512的散

列字符串:增加了Sign函数,用于以(-1,0,1)形式返回数值类型字段或表达式的符号;为模型基础类django.db.backends..base.BaseDatabaseFeatures增加了方法allowsgroup_by_.selected_pks_on_model(),该方法允许对子句进行优化,默认情况下,该方法仅适用于PostgreSQL数据库;增加了字段类型JSONField,用于json字符串的编码与解码(Django3.1新增功能):新增时间方法Extractlso WeekDay,用ISO-8601标准提取DateField和DateTimeField类型数据的星期值(Django3.l新增功能);新增查询方法iso week day(),该方法可在查询结果集中按照ISO-8601形式返回星期值(Django3.1新增功能);为类django.db.models.Combinable增加方法bitxor()用于位的异或操作,该类被django.db.models.F、django.db.models.Expression继承。口增加了函数参数。为函数Trunc增加了is dst参数,用来设置不存在和不明确的日期时间的处理方式;增加了使用connection.queries时的输出结果,当使用

PostgreSQL数据库时,可以根据调用情况显示类似“COPY xx TO xxx”的SQL脚本信息;为类django.db.models.query.QuerySet的datetimes(O方法增加了参数is dst,用于处理传递不存在或模糊的时间信息(Django3.1新增功能)。

口增加了字段。增加了字段类型PositiveBigIntegerField,它的行为与字段类型

PositivelntegerField类似,其取值范围为0~9223372036854775807(Django3.1新增功能)。增加了字段类型SmallAutoField,它的行为与字段类型AutoField类似,其取值范围为1~32767。

口调整了字段。调整了模型字段FilePathField,使该字段的参数path可接受方法的返回值;将具有对称性的中间表用于模型字段ManyToManyField的自引用;增加模型CheckConstraint、UniqueConstraint和Index的参数使用控制,允许参数name使用以%(app_label)s'和%(class)s'占位符形式体现的字符串;为模型字段基类Field

6 Django3.0应用开发详解

增加属性descriptor class,用来形成描述信息;模型统计函数Avg与Sum允许对带有distinct行为的数据集合进行统计;调整字段类型BigAutoField的继承父类为

BigIntegerField,调整字段类型SmallAutoField的继承父类为SmallIntegerField;为字段类型FileField增加属性upload to,该属性可用于保存文件的路径信息,并可用于pathlib.Path类的实例传递。调整模型字段FileField(作为继承类,ImageField也受影响)的初始参数storage,使该参数接收可调用方法,便于动态调整storage(Django3.1新增功能)。

在字段方面,Django3.1版本中又新增了如下功能。

口增加了模型的CheckConstraint参数check使用控制,允许使用布尔表达式形式作为传人参数。

口增加了模型的UniqueConstraint参数deferrable使用控制,允许创建延迟性唯一性约束。

口为模型字段OneToOneField以及外键字段ForeignKey的on delete参数增加了RESTRICT选项值,用户可在删除该类字段数据时,根据需要选择model..CASCADE、model..PROTECT与model..RESTRICT。

14.请求响应

对于页面的请求响应处理,Django3.0做了如下调整:

口调整了请求相应的传递信息。为HttpResponse的传递内容信息增加了memoryview格式,用于返回。调整HttpRequest..headers的传递信息,允许以下划线和连字符两种形式查找相关关键字,这两种查询内容一致,例如查询user agent与user-agent,最后查询的都是user-agent.

口调整了请求相应的调用方法。调整了类django.http.HttpResponse中的方法set cookie()与set_signed_cookie(),设置参数samesite默认值为None,用来表示cookie可被用于跨站请求,可根据需要禁止(Django3.1新增功能)。为类django..htp.Http

Response增加方法accepts(),用来根据Accept标头信息接收相关类型的内容(Django

3.1新增功能)。

15.安全管理

在安全管理方面,Django3.0做了如下调整:

口调整配置节点X FRAME OPTIONS的默认值为“DENY”。

口调整配置节点SECURE CONTENT TYPE NOSNIFF的默认值为“True”,当该值为“True”时,安全中间件SecurityMiddleware将为Web响应设置X-Content--Type

Options:nosniff标头信息。

口调整配置节点SECURE REFERRER POLICY的默认值为“same-origin”,当该值为“same-origin”时,安全中间件SecurityMiddleware将设置Referrer Policy标头信息

···试读结束···

阅读剩余
THE END