中企动力 > 头条 > python3开发

网站性能检测评分

注:本网站页面html检测工具扫描网站中存在的基本问题,仅供参考。

python3开发

Python疯长!Python 3.7 新特性! 流量视频课程

img

冬易

关注

不管你是否承认,人工智能已经爆发,你我早已是局中人。

不信?

当司机打开滴滴APP,靠说话输入目的地——这是语音识别;

当走进火车站,机器查验身份证——这是图像识别;

当你打开度秘APP,说想去一家不辣、好吃、人均消费100元左右的餐厅——这是自然语言处理。

人工智能火爆,人工智能第一语言Python疯长。

近日,Python官网静悄悄地发布了一条大消息:正式发布 Python 3.7.0!同时发布的还有Python 3.6.6稳定版。

Python官网宣布,正式发布Python 3.7.0。

全文如下:

2018年6月27日星期三Python 3.7.0现已推出(同时还有3.6.6版本)!代表Python开发社区和Python 3.7发布团队,我们很高兴地宣布Python 3.7.0现在可以使用了。Python 3.7.0是Python语言的最新功能版本,包含许多新的功能和优化。你可以在这里下载 Python 3.7.0:https://python.org/downloads/release/python-370/Python的大多数第三方库也应该尽快支持3.7.0软件包。有关3.7系列功能的更多信息,请参阅Python 3.7中的新功能文档。有关3.7.0中所做更改的详细信息,请参见其更改日志。3.7系列的维护版本将从2018年7月开始定期进行。我们希望您喜欢Python 3.7!另附:我们也很高兴地宣布,Python 3.6.6的下一个维护版本Python 3.6可以使用了:https://python.org/downloads/release/python-366/感谢所有帮助Python开发和这些发布的志愿者!欢迎通过志愿或组织捐赠支持Python软件基金会的工作。

1

Python 3.7.0 重大功能改进

那么,这次新发布的Python 3.7.0 有哪些重要的改进呢?总的来说,

新的syntax功能:

PEP 563,推迟了类型注释(type annotations)的评估

向后不兼容的syntax更改:

async 和 await 现在是保留关键词

新的库模块:

contextvars:PEP 567 - 上下文变量dataclasse:PEP 557 - 数据类importlib.resources

新的内置功能:

PEP 553,新的 breakpoint() 函数

Python 数据模型改进:

PEP 562,定制访问模块属性PEP 560,核心支持 typing module 和 generic typesdict 对象的插入顺序保存性质被纳入Python官方语言规范

标准库的重大改进:

asyncio 模块增加了新功能,提高了可用性和性能time 模块新增纳秒级函数支持,新函数将纳秒数作为整数值返回

CPython 部署改进:

避免使用 ASCII 作为默认文本编码PEP 552,deterministic .pycs新的 runtime 模式PEP 565,改进了 DeprecationWarning 处理

C API 改进:

PEP 539,用于线程本地存储的新C API

文档改进:

PEP 545,Python文档翻译新增日语、法语和韩语文档

2

Python 3.7.0 新增特性

那么,接下来详细看看这些功能。

PEP 563:推迟对注释语句的评估

Python的类型提示有两个明显的可用性问题:

注释只能使用当前范围内已有的名称,换句话说,它们不支持任何类型的前向引用; 注释源代码对Python程序的启动时间有不利影响。

通过推迟注释评估可以解决这两个问题。编译器不是编译在定义时在注释中执行表达式的代码,而是将注释以字符串形式存储。如果需要,可以使用typing.get_type_hints()在运行时解析注释。在不需要解析的常见情况下,注释的存储成本更低,并且启动时间更快。

PEP 538:C语言环境强制

Python 3系列中的一个持续的挑战是确定一种合理的默认策略,用于处理目前在非Windows平台上使用默认C或POSIX语言环境的“7-bit ASCII”文本编码假设。

PEP 538更新默认解释器命令行界面,自动将该语言环境强制转换为可用的基于UTF-8的语言环境。 自动设置LC_CTYPE意味着核心解释器和C扩展(例如readline)将假设使用UTF-8作为默认文本编码,而不是ASCII。

PEP 540:强制UTF-8 Runtime 模式

新的-X utf8命令行选项和PYTHONUTF8环境变量可用于启用CPython UTF-8模式。

PEP 553:内置breakpoint()

Python 3.7新增了内置函数breakpoint(),作为进入Python调试器的简单而一致的方式。

PEP 539:新增用于线程本地存储的C API

虽然Python为线程本地存储支持提供了一个C API; 但现有的线程本地存储(TLS)API使用int来表示所有平台上的TLS密钥,但这既不符合POSIX标准,也不具备任何实际意义上的便携性。

PEP 539通过向CPython提供新的线程本地存储(TSS)API来改变这一点,该API取代了在CPython解释器中使用现有TLS API,同时弃用现有API。TSS API使用新类型Py_tss_t而不是int来表示TSS密钥,这将允许在本地TLS密钥定义的平台上构建CPython。

PEP 562:定制对模块属性的访问

Python 3.7支持在模块上定义__getattr __(),并且只要没有找到模块属性就会调用它。也允许在模块上定义__dir __()。

PEP 564:time 内置函数支持纳秒

为了避免精度损失,PEP 564在timemodule添加了六个新“纳秒”(nanosecond)变量:

time.clock_gettime_ns()time.clock_settime_ns()time.monotonic_ns()time.perf_counter_ns()time.process_time_ns()time.time_ns()

PEP 565:在__main__中默认显示DeprecationWarning

DeprecationWarning的默认处理已更改,以便默认情况下再次显示这些警告,但仅当触发它们的代码直接在__main__模块中运行时才会显示。

PEP 560:新增支持类型模块和泛型

PEP引入了两种特殊方法__class_getitem __()和__mro_entries__,这些方法现在被大多数类和特殊构造用于输入。结果,不同类型的各种操作的速度提高了7倍,可以使用泛型而没有元类冲突,并且修改了类型模块中长期存在的一些bug。

PEP 552:基于哈希的.pyc文件

PEP 552扩展了pyc格式,允许源文件的哈希值用于invalidation,而不是源timestamp。这种.pyc文件称为“hash-based”。默认情况下,Python仍然使用基于时间戳的invalidation,并且不会在运行时生成基于哈希的.pyc文件。可以使用py_compile或compileall生成基于哈希的.pyc文件。

PEP 545:Python文档翻译

PEP 545描述了创建和维护Python文档翻译的过程。添加了三种语言的翻译:

日本:https://docs.python.org/ja/

法语:https://docs.python.org/fr/

韩国:https://docs.python.org/ko/

开发运行时模式:-X dev

新的-X dev命令行选项或newPYTHONDEVMODE环境变量可用于启用CPython的开发模式。在开发模式下,CPython执行额外的运行时检查,这些检查无法在默认情况下启用。

3

性能提升及文档下载

根据官方文档表示,新升级的各种优化使 Linux 上的 Python 启动时间减少了 10%,而 macOS 上的启动时间更是减少了 30%。

由于字节码更改,方法调用现在可以快 20%。

由于PEP 560工作,typing 导入时间减少了 7 倍,现在许多 typing 操作也更快。

等等优化,还有更多。

Python官网有非常全面的文档:

也列出了转换为新版本会遇到的问题和应对方法:

4

下载地址

Python 3.7.0 下载地址为:https://python.org/downloads/

如何创建一个Linux虚拟机用于Python 3的机器学习开发 推广视频课程

img

易辰

关注

前言

Linux是用Python进行机器学习,人工智能开发的极好环境。

在本教程中,您将了解如何创建和设置用于使用Python进行机器学习的Linux虚拟机。

完成本教程后,您将知道:

如何下载和安装VirtualBox来管理虚拟机。如何下载和安装Fedora Linux。如何在Python 3中安装用于机器学习的SciPy环境。

如果您的基本操作系统是Windows,Mac OS X和Linux,本教程适用于你,让我们开始吧。

Linux虚拟机的好处

有很多原因可能需要使用Linux虚拟机进行Python机器学习开发。

例如,下面列出了使用虚拟机的五大优点:

要使用系统上不可用的工具(如果您在Windows上)。在不影响本地环境的情况下安装和使用机器学习工具(例如使用Python 3工具)。为不同项目(Python2和Python3)提供高度自定义的环境。要保存机器的状态并准确地拿起你离开的地方(从机器跳到机器)。与其他开发人员共享开发环境(设置一次并多次重复使用)。

也许最有利的一点是能够轻松使用您的环境不支持的机器学习工具。

我是OS X用户,尽管可以使用brew,pip和macports安装机器学习工具,但我仍然发现安装和使用Linux虚拟机进行机器学习开发更容易。

概要

本教程分为三部分:

下载并安装VirtualBox。在虚拟机中下载并安装Fedora Linux。安装Python机器学习环境

下载并安装VirtualBox

VirtualBox是用于创建和管理虚拟机的免费开源平台。

一旦安装完成,您可以创建所有您喜欢的虚拟机,只要您具有要从其安装的ISO映像或CD即可。

访问VirtualBox.org https://virtualbox.org/。单击“下载VirtualBox”访问下载页面 https://virtualbox.org/wiki/Downloads。

3.为您的工作站选择二进制文件。

4.为您的系统安装软件并按照安装说明进行操作。

下载并安装Fedora Linux

我选择了Fedora Linux,因为我认为它比一些Linux更友善,更温和。它是面向工作站和开发人员的RedHat Linux的领先优势。

下载Fedora ISO映像

首先下载Fedora Linux的ISO文件。 在这种情况下,Fedora 25的64位版本。

1.访问GetFedora.org https://getfedora.org/。

2.单击“Workstation”访问Workstation页面 https://getfedora.org/en/workstation/。

3.点击“立即下载”进入下载页面 https://getfedora.org/en/workstation/download/。

4.在“其他下载”下点击“64位1.3GB Live镜像”

5.你现在应该有一个名字为ISO的文件:

“Fedora的工作站的Live-x86_64-25-1.3.iso”。

我们现在准备在VirtualBox中创建VM。

创建Fedora虚拟机

现在,让我们在VirtualBox中创建Fedora虚拟机。

1.打开VirtualBox软件。

2.点击“新建”按钮。

3.选择名称和操作系统。

名称:Fedora25

键入:Linux

版本:Fedora(64位)

点击“继续”

4.配置内存大小

2048

5.配置硬盘

现在创建一个虚拟硬盘

硬盘文件类型: VDI(VirtualBox磁盘映像) 存储在物理硬盘上

动态分配文件位置和大小:10GB

我们现在准备从ISO映像安装Fedora。

安装Fedora Linux

现在,让我们在新的虚拟机上安装Fedora Linux。

1.选择新的虚拟机,然后单击“开始”按钮。

2.单击文件夹图标并选择Fedora ISO文件:

“Fedora的工作站的Live-x86_64-25-1.3.iso”。

3.点击“开始”按钮。

4.选择第一个选项“启动Fedora-Live-Workstation-Live 25”并按Enter键。

5.按“Esc”键跳过检查。

6.选择“Live System User”。

7.选择“安装到硬盘驱动器”。

8.完成“语言选择”(英语)

9.完成“安装目的地”(“ATA VBOX HARDDISK”)。

您可能需要等待一分钟让VM创建硬盘。

10.单击“开始安装”。

11.设置root密码。

12.为自己创建一个用户。

记下用户名和密码(以便以后可以使用它)。

勾选“设置此用户管理员”(以便您可以安装软件)。

13.等待安装完成...(5分钟?)

14.点击“退出”,点击右上角的电源图标; 选择关闭电源。

安装Python机器学习环境

Fedora使用Gnome 3 https://en.wikipedia.org/wiki/GNOME作为窗口管理器。

Gnome 3与之前的Gnome版本完全不同; 您可以通过使用内置的帮助系统了解如何解决问题。

安装Python环境

首先安装所需的Python库进行机器学习开发。

1.打开终端。

点击“Activities”

键入“terminal”

点击图标或按回车

2.确认Python3已安装,键入:

python3 --version

3.安装Python机器学习环境。 特别是:

NumPySciPyPandasMatplotlibStatsmodelsScikit-Learn

DNF(https://en.wikipedia.org/wiki/DNF_(software))是软件安装系统,正式是yum。 第一次运行dnf时,它会更新软件包的数据库,这可能需要一分钟。

键入:

sudo dnf install python3-numpy python3-scipy python3-scikit-learn python3-pandas python3-matplotlib python3-statsmodels

出现提示时输入您的密码,按“y”和“enter”确认安装。

确认你的环境

执行下列Python脚本 version.py:

# scipyimport scipyprint('scipy: %s' % scipy.__version__)# numpyimport numpyprint('numpy: %s' % numpy.__version__)# matplotlibimport matplotlibprint('matplotlib: %s' % matplotlib.__version__)# pandasimport pandasprint('pandas: %s' % pandas.__version__)# scikit-learnimport sklearnprint('sklearn: %s' % sklearn.__version__)# statsmodelsimport statsmodelsprint('statsmodels: %s' % statsmodels.__version__)

键入:

python3 versions.py

结果如下:scipy: 1.0.0numpy: 1.14.0matplotlib: 2.1.2pandas: 0.22.0statsmodels: 0.8.0sklearn: 0.19.1

如果得到上面的结果,恭喜你,你的Linux机器学习Python开发环境建立完毕。

机器学习入门参考

请参考下列两篇文章,进行你的机器学习,人工智能入门!

https://toutiao/i6529328389931663875/https://toutiao/i6529678762655613444/

原文地址: https://machinelearningmastery/linux-virtual-machine-machine-learning-development-python-3/

@Python 开发者,如何更加高效地编写代码? 行业视频课程

img

萧书桃

关注

对于 Python 开发者而言,Anaconda 能省下大量时间下载和安装模块包、处理项目环境等问题,帮助开发者更加愉快地编写代码。

如果你苦于给 Python 安装各种包,安装过程中还各种出错。那么我墙裂推荐——Anaconda,它可以帮助你管理这些包,包括安装、卸载、更新。

Anaconda 附带一大批常用数据科学包,如:conda,Python 等 150 多个学科包以及依赖项,你可以立即开始处理数据。

还有一个好处就是:如果你的项目是 Python 2,新项目是 Python 3,你无需同时安装两个版本 Python,Anaconda 会帮助你为不同的项目建立不同的运行环境。

Anaconda 的安装

版本选择

由于 Python 有 2 和 3 两个版本,因此 Anaconda 也在 Python2 和 Python3 的基础上推出了两个发行版,即Anaconda2 和 Anaconda3。Python3 被越来越多的开发者所接受,但让人尴尬的是很多遗留老系统依旧运行在 Python2 环境中,因此你不得不同时在两个版本中进行开发、调试。

如何在系统中同时共存 Python2 和 Python3 是开发者不得不面对的问题,Anaconda 能完美解决 Python2 和 Python3 的共存问题。

conda 是 Anaconda 下用于包管理和环境管理的命令行工具,是 pip 和 vitualenv 的组合。安装成功后 conda 会默认加入到环境变量中,因此可直接在命令行窗口运行 conda 命令。

如果你熟悉 virtualenv,那么上手 conda 非常容易,不熟悉 virtulenv 的也没关系,它提供的命令就几个,非常简单。我们可以利用 conda 的虚拟环境管理功能在 Python2 和 Python3 之间自由切换。

多版本切换

# 基于 python3.6 创建一个名为 test_py3 的环境conda create --name test_py3 python=3.6# 基于 python2.7 创建一个名为 test_py2 的环境conda create --name test_py2 python=2.7# 激活 test 环境activate test_py2 # windowssource activate test_py2 # linux/mac# 切换到python3activate test_py3快速安装

Anaconda 可用于多个平台( Windows、Mac OS X 和 Linux)。

官网地址:https://continuum.io/downloads。官网下载需要科学上网,此外我给你们准备了镜像网站:https://mirrors.tuna.tsinghua.edu/help/anaconda/,方便你们下载。

选择合适自己的版本下载,建议下载 Python 3。

下载好以后你只需要傻瓜式的安装即可。

第一个 Python 代码

启动 Anaconda 之后,你会看到这样的界面,我推荐使用 jupyter notebook 编写,点击 launch。

jupyter notebook 打开的是一个网址形式的界面,点击右上角的 new 创建第一个 Python 文件吧。

jupyter 支持很多种文本格式,code、markdown、Raw NBConvert、Heading。

常用的就是 code 和 markdown了,你可以同时在一个 Python 文件中写 code 和 md。你也可以直接用 jupyter 打开。

经过几天的学习,我已经写了部分 Python 的入门博客和代码,在 Github 上,你更是可以直接将代码打开运行在 Anaconda 上。图示中的 .ipynb 文件就是 jupter 文件的扩展名,你可以直接运行,也可以编辑。欢迎 follow 和 star——https://github/angelOnly/python_learning_note。

Spyder VS PyCharm

Spyder 是 Anaconda 自带的一款编辑器。

相比较而言,Pycharm 用起来更便捷,虽然 Spyder 中所有的变量也都能显示,方便调试,里边还有 ipython notebook。但是很细节的一些代码还是 Pycharm 更便捷一些。

强烈推荐 Anaconda+Pycharm 组合。因为 Anaconda 安装的时候已经默认为你安装了一大堆做数据分析常用的包,所以,直接在 Pycharm 中把默认解释器改为 Anaconda 中的 Python 即可。

另外,只是针对数据分析与机器学习,Anaconda 用起来更方便一些,对于 Python 的其他用途,比如爬虫、Web开发,Pycharm 更好一些。针对大型的 Web 框架修改调试,还是需要个大型 IDE。

声明:本文为 Python 梦工厂投稿,版权归对方所有。

Learn Python 3:Flask Web开发小记,大神超详细总结,三天学会 流量视频课程

img

詹妮弗

关注

最近看了Flask Web开发:基于Python的Web应用开发实战,书中详细介绍了Web程序的开发、测试、部署过程,值得一读!我在书中例子的基础上做了些更改,实现了一个简单的个人博客:NiceBlog,仅作为个人学习,还有许多不足的地方待完善,这里做一些简单的记录,方便以后查阅

大家如果喜欢我们文章,可以在小编的学习平台学习,可以在评论区获取

也希望看到积极留言

一、功能

1、对于普通用户,主要有如下功能:

注册、登录、重置密码(邮箱验证)文章列表、详情评论喜欢

2、对于管理员,除了有普通用户的功能,主要有如下功能:

写文章(Markdown编辑)用户权限管理(管理喜欢、评论的权限)评论管理(删除、屏蔽)

3、为移动端提供相关api接口

二、项目结构

遵循了书中多文件Flask程序的基本结构,下边是NiceBlog的项目结构:|-NiceBlog|-app/ 主目录 |-api/ 为移动端提供接口的蓝本 |-auth/ 权限认证的蓝本 |-main/ 主体功能的蓝本 |-manage/ 管理相关功能的蓝本 |-static/ 静态资源目录(icon、js、css) |-templates/ html模板目录 |-__init__.py 初始化项目的工厂函数 |-decorators.py 自定义的装饰器 |-email.py 发送邮件功能 |-excepitions.py 自定义异常处理 |-models.py 数据模型 |-migrations/ 数据库迁移脚本目录 |-nb_env/ 虚拟环境 |-tests/ 单元测试目录 |-config.py 配置文件 |-manage.py 启动程序以及其他的程序任务 |-requirements.txt 项目的依赖包列表

三、实现

1、工厂函数

一个简单的Flask Web程序可以写在单文件中,

test.py

app = Flask(__name__)# 定义的路由@app.route('/')def index():return '

Hello World!

'if __name__ == '__main__':app.run()

但是执行程序时,由于在全局作用域创建导致无法动态修改配置,也导致了单元测试时无法在不同配置环境运行程序。所以可以把程序的创建转移到可显示调用的工厂函数中,也就是前边项目结构中的

__init__.py

,在工厂函数中导入需要的Flask扩展:

def create_app(config_name):app = Flask(__name__) # 导致指定的配置对象 app.config.from_object(config[config_name]) # 调用config.py的init_app() config[config_name].init_app(app) # 初始化扩展 bootstrap.init_app(app) mail.init_app(app) moment.init_app(app) db.init_app(app) login_manager.init_app(app) pagedown.init_app(app) return app

2、蓝本

新的问题来了,使用工厂函数后,程序在运行时创建,而不是在全局作用域,必须等到执行

create_app()

后才能使用

@app.route()

装饰器,这时就要使用蓝本了,在蓝本中也可以定义路由,但是定义的路由处于休眠状态直到蓝本注册到程序后在成为程序一部分,例如main蓝本的目录结构如下:|-NiceBlog|-app/ 主目录 |-main/ 主体功能的蓝本 |-__init__.py 创建蓝本 |-errors.py 蓝本的错误处理 |-forms.py 蓝本的表单 |-views.py 蓝本的路由

首先看一下

__init__.py

# 两个参数分别指定蓝本的名字、蓝本所在的包或模块(使用 __name__即可)main = Blueprint('main', __name__)# 导入路由模块、错误处理模块,将其和蓝本关联起来# 在蓝本的末尾导入在两个模块里还要导入蓝本,防止循环导入依赖from app.main import views, errors

2.1、表单

forms.py

是当前蓝本中的表单,项目中使用了

FlaskForm

,可以方便的完成表单校验,例如创建、编辑文章的表单:

class BlogForm(FlaskForm):title = StringField('请输入文章标题', validators=[DataRequired(), Length(1, 128)]) labels = StringField('文章标签(标签之间用空格隔开)', validators=[DataRequired()]) summary = TextAreaField('文章概要', validators=[DataRequired()]) content = TextAreaField('文章内容', validators=[DataRequired()]) preview = TextAreaField('文章预览', validators=[DataRequired()]) publish = SubmitField('发布') save = SubmitField('保存')

2.2、路由

views.py

就是在蓝本中定义的路由,例如主页的路由:

@main.route('/create-blog', methods=['GET', 'POST'])@admin_requireddef create_blog():""" 写新文章 """ form = BlogForm() if form.validate_on_submit(): blog = None if form.publish.data: # 发布 elif form.save.data: # 保存草稿 return redirect(url_for('main.index')) return render_template('markdown_editor.html', form=form, type='create')

注意装饰器为当前蓝本的名字

main

,而不是之前的

app

create_blog()

称为视图函数,一个路由保存了URL到视图函数的映射关系。

redirect(url_for('main.index'))

代表重定向到主页,

url_for()

的参数为要跳转到的URL对应的视图函数名,但需要加上视图函数所在的蓝本名,即

main.index

render_template()

是Flask提供的函数,把

Jinja2

模板引擎集成到了程序中,第一个参数是模板名称对应一个html文件,即执行该视图函数后最终要渲染的页面,后边的参数为传递给模板的参数。

2.3、错误处理

errors.py

是蓝本中的错误处理程序,例如:

@main.app_errorhandler(404)def page_not_found(e):if request.url.find('api') != -1: return jsonify({'error': '请求的资源不存在', 'code': '404', 'data': ''}) return render_template('error/404.html'), 404

如果使用

@main.errorhandler

装饰器只有当前蓝本的错误才能触发,为了使其他错误也能触发所以使用了

@main.app_errorhandler

装饰器

2.4、注册蓝本

其它蓝本的定义也类似,最后需要在工厂函数中重注册蓝本,例如:

def create_app(config_name):# ...... # 注册main蓝本 from app.main import main as main_blueprint app.register_blueprint(main_blueprint) # 注册auth蓝本 from app.auth import auth as auth_blueprint # 使用url_prefix注册后,蓝本中定义的所有路由都会加上指定前缀,/login --> /auth/login app.register_blueprint(auth_blueprint, url_prefix='/auth') return app

3、前端

3.1、Jinja2

Flask使用

Jinja2

作为模板引擎,模板是一个包含响应文本的HTML文件,其中包含只有在请求的上下文才知道的动态占位变量。默认情况下,模板保存在

templates

目录。

Jinja2

模板中

{{ 变量名 }}

代表一个变量(注意变量名两边有一个空格,可以识别任意类型的变量),从渲染模板时使用的数据中获取。如果变量的值是HTML,由于转义的原因导致浏览器不能正常显示HTML代码,所以需要使用

safe

过滤器,例如文章详情的HTML显示就需要这样处理,过滤器写在变量名后用竖线隔开

{{ 变量名|过滤器名 }}

Jinja2

中用

{% 控制语句 %}

代表控制结构来改变模板的渲染流程,例如:

# 条件控制{% if xxx %}

Android

{% else %}

iOS

{% endif %}

# for循环{% for x in xs %}

{{ x }}

{% endfor %}

# 导入{% import 'xxx.html' %}

# 包含{% include 'xxx.html' %}

导入、包含的目的都是为了复用,还可以通过继承实现复用,类似于类的继承:

# 继承{% extends "base.html" %}

通过继承,模板中重复的代码都可以写在父模板里,例如导航条和页面底部footer就可以放在父模板里。

3.2、Bootstrap

前端使用了Bootstrap框架,它提供了良好的CSS规范,可以帮助我们更好的美化界面,具体的可参考:https://v3.bootcss/,要在项目中集成它可以使用Flask的

Flask-Bootstrap

扩展,直接在PyCharm安装,并在工厂函数中初始化,还要让项目的父模板继承Bootstrap的基类模板:

# common_base.html{% extends "bootstrap/base.html" %}

Bootstrap的基类模板

base.html

提供了一个网页框架,包含了Bootstrap中的所有CSS和JS文件。除此之外基类模板还定义了许多可在其子类模板中重定义的块,使用格式如下:

{% block 块名称 %}{% endblock %}

常用的块如下:

块名称

含义

head标签中的内容

title

标签中的内容

body标签中的内容

stylescss样式单的定义

navbar自定义的导航条

content自定义的页面内容

page_content定义content在内部

scriptsJS声明,一般在模板尾部

注意如在子模板在模板已有的块中添加新内容,需要使用

super()

函数:

{% block scripts %}{{ super() }} {% endblock %}

3.3、Flask-WTF

在2.1中我们已经看到了用

Flask-WTF

定义表单的方式,即自定义的表单类继承

FlaskForm

类,并添加需要的类变量,

Flask-WTF

定义了许多标准字段可以被渲染成指定的表单类HTML标签,例如:

字段名

对应的H5标签

StringField文本框

TextAreaField多行文本框

PasswordField密码输入框

BooleanField复选框

SubmitField表单提交按钮

同时

Flask-WTF

还提供了许多常用的表单校验函数,例如:

Email()

EqualTo()

DataRequired()

Length()

等等,当点击提交按钮时,会自动校验表单是否满足预定义的条件。

在2.2中,我们通过参数把表单类的实例同步

form

参数传入模板:

render_template('markdown_editor.html', form=form, type='create')

在模板中可以通过如下方式生表单(只保留了部分核心代码):

{{ form.hidden_tag() }} {{ form.title(id="title", class="form-control editor-blog-title", placeholder=form.title.label.text) }} {{ form.labels(class="form-control editor-blog-area", placeholder=form.labels.label.text) }} {{ form.summary(class="form-control editor-blog-area", placeholder=form.summary.label.text, rows=3) }} {{ form.publish(class="btn btn-info") }} {{ form.save(class="btn btn-success") }}

这样的好处是我们能自定义表单的样式等等,但是工作量蛮大的,如果对表单样式没有特殊的需求,Bootstrap中的表单样式可以满足需求,可以通过

Flask-Bootstrap

提供的辅助函数快速的渲染表单,只需要如下两步:

{% import "bootstrap/wtf.html" as wtf %}{{ wtf.quick_form(form) }}

例如登录的H5模板就是这样做的。

form.hidden_tag()

模板参数将被替换为一个隐藏字段,用来实现在配置中激活的 CSRF 保护。如果你已经激活了CSRF,这个字段需要出现在你所有的表单中。

在2.2中,如果点击表单提交按钮,所有的表单都能成功通过校验,则

form.validate_on_submit()

的值为

True

,否则校验失败,网页会出现对应提示。如果有两个提交按钮,那么在校验成功后,还需要判断点击的是哪个按钮,否则所有的按钮都执行了同一个操作。例如我们的文章发布和保存按钮,当表单类中的按钮字段的

data

属性为

True

则代表该按钮被点击,例如:

if form.publish.data: # 发布elif form.save.data: # 保存草稿

3.4、jQuery

有些页面需要在相关操作后修改控件的CSS样式,例如文章详情的喜欢和取消喜欢按钮,最简单的方式是操作成功后直接刷新整个页面,但这样体验并不好,更好的方式是局部刷新。这里直接使用jQuery(Bootstrap也提供了类似的操作,同时包含了jQuery,不需要单独导入jQuery)来实现。使用

jQuery

强大的选择器功能可以方便的得到要操作的

DOM节点

,按钮的点击也是发起一个请求,

jQuery

也集成了

ajax

,可以方便的处理请求,在请求完成后根据响应结果来更改

DOM节点

的样式。看下按钮的点击事件:

favourite = function (id) { if ($('.blog-favourite-btn').length > 0) {//取消喜欢$.get('/manage/blog/cancel_favourite', { id: id }).done(function (data) { $('.blog-favourite-btn span').removeClass('glyphicon-heart').addClass('glyphicon-heart-empty'); $('.blog-favourite-btn').removeClass('blog-favourite-btn').addClass('blog-unfavourite-btn'); }) } else if ($('.blog-unfavourite-btn').length > 0) {//喜欢 $.get('/manage/blog/favourite', { id: id }).done(function (data) { if ('200' === data) { $('.blog-unfavourite-btn span').removeClass('glyphicon-heart-empty').addClass('glyphicon-heart'); $('.blog-unfavourite-btn').removeClass('blog-unfavourite-btn').addClass('blog-favourite-btn'); } if ('403' === data) { alert('没有操作权限'); } }) } }

4、Markdown

书中使用的是

Flask-PageDown

Markdown

两个库来实现对Markdown功能的支持,但是不够理想,有些Markdown语法并不能很好的支持,例如

Flask-PageDown

实时预览时并不支持代码块和表格等。最后使用了marked这个库,它是一个全功能的Markdown解析器和编译器,用JavaScript编写,构建速度快,其实就是实时将用Markdown语法编辑的内容转换成对应的HTML预览,但是没有CSS样式的HTML还是有点丑,github-markdown-css是一个不错的选择,可以帮助我们实现github风格的Markdwon预览。既然是要编辑文章那么直接使用HTML里的

肯定难以实现理想的效果,这里使用了ace,它是一个用JavaScript编写的独立代码编辑器,下载

...

@Python 开发者,如何更加高效地编写代码? 流量视频课程

img

Malcolm

关注

对于 Python 开发者而言,Anaconda 能省下大量时间下载和安装模块包、处理项目环境等问题,帮助开发者更加愉快地编写代码。

如果你苦于给 Python 安装各种包,安装过程中还各种出错。那么我墙裂推荐——Anaconda,它可以帮助你管理这些包,包括安装、卸载、更新。

Anaconda 附带一大批常用数据科学包,如:conda,Python 等 150 多个学科包以及依赖项,你可以立即开始处理数据。

还有一个好处就是:如果你的项目是 Python 2,新项目是 Python 3,你无需同时安装两个版本 Python,Anaconda 会帮助你为不同的项目建立不同的运行环境。

Anaconda 的安装

版本选择

由于 Python 有 2 和 3 两个版本,因此 Anaconda 也在 Python2 和 Python3 的基础上推出了两个发行版,即Anaconda2 和 Anaconda3。Python3 被越来越多的开发者所接受,但让人尴尬的是很多遗留老系统依旧运行在 Python2 环境中,因此你不得不同时在两个版本中进行开发、调试。

如何在系统中同时共存 Python2 和 Python3 是开发者不得不面对的问题,Anaconda 能完美解决 Python2 和 Python3 的共存问题。

conda 是 Anaconda 下用于包管理和环境管理的命令行工具,是 pip 和 vitualenv 的组合。安装成功后 conda 会默认加入到环境变量中,因此可直接在命令行窗口运行 conda 命令。

如果你熟悉 virtualenv,那么上手 conda 非常容易,不熟悉 virtulenv 的也没关系,它提供的命令就几个,非常简单。我们可以利用 conda 的虚拟环境管理功能在 Python2 和 Python3 之间自由切换。

多版本切换

# 基于 python3.6 创建一个名为 test_py3 的环境conda create --name test_py3 python=3.6# 基于 python2.7 创建一个名为 test_py2 的环境conda create --name test_py2 python=2.7# 激活 test 环境activate test_py2 # windowssource activate test_py2 # linux/mac# 切换到python3activate test_py3快速安装

Anaconda 可用于多个平台( Windows、Mac OS X 和 Linux)。

官网地址:https://continuum.io/downloads。官网下载需要科学上网,此外我给你们准备了镜像网站:https://mirrors.tuna.tsinghua.edu/help/anaconda/,方便你们下载。

选择合适自己的版本下载,建议下载 Python 3。

下载好以后你只需要傻瓜式的安装即可。

第一个 Python 代码

启动 Anaconda 之后,你会看到这样的界面,我推荐使用 jupyter notebook 编写,点击 launch。

jupyter notebook 打开的是一个网址形式的界面,点击右上角的 new 创建第一个 Python 文件吧。

jupyter 支持很多种文本格式,code、markdown、Raw NBConvert、Heading。

常用的就是 code 和 markdown了,你可以同时在一个 Python 文件中写 code 和 md。你也可以直接用 jupyter 打开。

经过几天的学习,我已经写了部分 Python 的入门博客和代码,在 Github 上,你更是可以直接将代码打开运行在 Anaconda 上。图示中的 .ipynb 文件就是 jupter 文件的扩展名,你可以直接运行,也可以编辑。欢迎 follow 和 star——https://github/angelOnly/python_learning_note。

Spyder VS PyCharm

Spyder 是 Anaconda 自带的一款编辑器。

相比较而言,Pycharm 用起来更便捷,虽然 Spyder 中所有的变量也都能显示,方便调试,里边还有 ipython notebook。但是很细节的一些代码还是 Pycharm 更便捷一些。

强烈推荐 Anaconda+Pycharm 组合。因为 Anaconda 安装的时候已经默认为你安装了一大堆做数据分析常用的包,所以,直接在 Pycharm 中把默认解释器改为 Anaconda 中的 Python 即可。

另外,只是针对数据分析与机器学习,Anaconda 用起来更方便一些,对于 Python 的其他用途,比如爬虫、Web开发,Pycharm 更好一些。针对大型的 Web 框架修改调试,还是需要个大型 IDE。

声明:本文为 Python 梦工厂投稿,版权归对方所有。

img

在线咨询

建站在线咨询

img

微信咨询

扫一扫添加
动力姐姐微信

img
img

TOP