Python Web Development Libraries 简明教程
Python Web Development Libraries - Introduction
每当用户打开任何网页浏览器(如 Google Chrome 或 Mozilla)并搜索“Web 开发”时,就会在短时间内出现数千个结果。是什么让这一切成为可能?Web 开发!它广泛涉及到通过 Intranet 或 Internet 为托管构建、创建和维护网站相关的工作。与网站设计相关的工包括多个领域:Web 编程、数据库管理、Web 设计、Web 发布等。
Web 开发包括让网站能够运行的所有代码。我们可以将整个 Web 开发过程分为两类:
-
Front-end
-
Back-end
尽管前端和后端 Web 开发肯定彼此不同,但它们也像同一枚硬币的两面。一个完整的网站依靠每一方与另一方有效地进行通信和操作,作为一个单一单元。前端和后端在 Web 开发中都同样重要。
应用程序的前端或客户端是代码,负责用户在屏幕上直接体验的一切,从文本颜色到按钮、图像和导航菜单。前端开发人员使用的一些常见技能和工具如下所示:
-
HTML/CSS/JavaScript
-
CSS preprocessors
-
Frameworks
-
Libraries
-
Git and Github
通常,应用程序的后端/服务器端负责管理数据库中的信息并将该信息提供给前端。网站的后端包括服务器、应用程序和数据库。通常,它包括在进入浏览器之前发生的所有事情。后端 Web 开发中必需的工具包括:
-
Programming language − Ruby、PHP、Python 等。
-
Database − MySQL、PostgreSQL、MongoDB、Oracle 等。
Why Web Development?
在当今世界,有多种选择可以宣传您的业务或技能并分享您的想法。其中一些是通过网站、应用商店中的原生应用程序等进行推广。创建新网站作为业务开发工具的趋势正在世界范围内迅速 gaining momentum 。但是,我们当中的一些人可能不知道网站在业务发展中的重要性。
当前,有许多初创企业正在努力在公开市场上确立自己的地位。然而,事实也总是如此,其中大多数未能获得他们想要的特定观众。导致他们失败的一个主要原因是,他们低估了一个功能齐全的开发网站为他们赢取业务的潜力。用于业务或任何其他目的的网站开发可能会很有用。
让我们来看看网站开发对业务增长很重要的原因:
Reaching out to your audiences
在线网站可以覆盖最广泛的受众,而不受限制于约束原生应用程序的平台。观看者或客户可以轻松访问,即从台式机/笔记本电脑到移动设备,因为网站有能力通过网络浏览器显示内容。
与原生应用程序相比,网络浏览要简单得多,因为它不需要用户访问设备上的应用商店或下载他们的应用程序(这可能包括一个或多个访问您内容的过程)。基于 Web 的应用程序比原生应用程序更灵活且敏捷,因为没有严格的应用商店要求和内容限制需要遵守。
另一个对 Web 开发非常有用的工具是利用 SEO 技术来定位您的受众。
24/7 Accessible
如果企业主将网站开发为在线论坛或类似论坛,而不是为公司建立一个实体店面,那么有很大的机会在线获得更大的受众进行链接。这是因为大多数人整天都与互联网相连。
通常,人们倾向于选择最明智的方式先进行在线检查,然后再做出决定。因此,如果企业主填写产品的所有基本详细信息并制定一种安全的方式及时将产品送到客户手中,那么人们宁愿在线购买,也不愿亲自访问店面。这也允许人们即使在一天中最奇怪的时间也能访问它。
Python Frameworks
Python 是一种网络和应用程序开发者最可接受的语言之一,因为它注重效率和可读性。有许多杰出的 Python Web 框架,每个框架都有自己的专长和功能。
Django
在这里,我们将概述 Django 框架的一些必要的详细信息和功能。
Category - Django 属于全栈 Python 框架。
Release - 最新版本 – 2.1 版本,常用版本 – 1.8、1.6 版本。
About - Django 是由经验丰富的开发者构建的高级 Python Web 框架,它允许进行快速、干净和实用设计开发。Django 处理了网络开发的许多复杂性,因此你可以专注于编写应用,而无需发明轮子。Django 是免费且开源的。
为了将对象映射到数据库表,Django 使用 ORM,并且同样的方法用于在数据库之间转移数据。
它与大多数所有重要数据库(如 Oracle、MySQL、PostgreSQL、SQLite 等)配合使用。
业界中有众多网站使用 Django 作为其后端开发的主要框架。
Features of Django
此 Python Web 框架的一些优秀特性是 −
-
URL routing
-
Authentication
-
Database schema migrations
-
ORM (Object-relational mapper)
-
Template engine
Django 框架的官方网站是 − https://www.djangoproject.com/
Flask
Category − Flask 属于非全栈框架。
Release − 1.0.2 于 2018 年 5 月 2 日发布
About − 我们将其归类为微型框架,因为我们不需要任何特定的库或工具。它没有表单验证或数据库抽象层,或任何预先存在的第三方库提供通用函数的其他组件。但是,flask 支持多个扩展,这些扩展扩展了应用程序功能,就好像它们是在 Flask 本身中实现的一样。存在用于对象关系映射、表单验证、上传处理、各种开放身份验证技术和几个常见框架相关工具的扩展。
Web2py
Category − Web2py 属于全栈框架系列。
Release − 2.17.1,已于 2018 年 8 月 6 日发布
About − Python 2.6、2.7 至 Python 3.x 版本。无进一步依赖,它本身就是一个完整软件包。应用程序的开发、数据库管理、调试、部署、测试和维护都可以通过 Web 界面来完成,但通常不需要。这是一种可扩展的开源框架,配有它自己的基于 Web 的 IDE,以及代码编辑器、一键式部署和调试器。
Features of Web2py
此框架附带了许多开发工具和内置功能,消除了开发者的复杂化繁琐过程。
-
运行容易,无需安装和配置。
-
几乎支持所有主要操作系统,如 Windows、Unix/Linux、Mac、Google App Engine,以及几乎所有 Web 托管平台通过 Python 2.7/3.5/3.6/ 版本。
-
易于与 MySQL、MSSQL、IBM DB2、Informix、Ingres、MongoDB、SQLite、PostgreSQL、Sybase、Oracle 和 Google App Engine 通信。
-
它可以防止包括跨站点脚本、注入缺陷和恶意文件执行在内的最常见类型漏洞。
-
支持错误跟踪和国际化。
-
Multiple protocols readability.
-
采用成功的软件工程实践,使得代码易于阅读和维护。
-
通过向后兼容性确保以用户为导向的进步。
Pyramid
Category −Pyramid 是一个非全栈框架
Release - 1.9.2,发布于 2018-04-23
About - Pyramid 是一个紧凑、快速、务实的 Python Web 框架。它作为 Pylons 项目的一部分而开发。它在类 BSD 许可下获得许可。它使得现实世界的 Web 应用程序开发和部署变得更加有趣、更可预测,更高效。
Features of Pyramid
Python Pyramid 是开源的框架,有以下特色 -
-
Simplicity −任何人无须预先了解都可以开始使用它。
-
Minimalism - Pyramid 完全开箱即用,它只附带一些几乎所有 Web 应用程序都会用到的重要工具,可能是安全或提供 JavaScript 和 CSS 等静态资产,或将网址附加到代码。
-
Documentation - 包含独家且最新的文档。
-
Speed - 非常快速而且准确。
-
Reliability - 它经过开发,兼顾保守性和全面测试。如果未经妥善测试,它会被认为已损坏。
-
Openness - 它按照宽松开放的许可证出售。
Dash
Category - Dash 框架属于“其他”Python web 框架。
Release - 0.24.1,Dash 核心后端。
About - Dash 是一个用于创建交互式 Web 可视化的开源库。Plotly 团队创建了 Dash,这是一种利用 Flask、React.js 和 plotly.js 来构建自定义数据可视化应用程序的开源框架。该库的关键亮点是,您可以只通过 Python 代码构建高度交互的 Web 应用程序。数据科学家喜欢 Dash 框架,尤其是那些不太熟悉 Web 开发的人员。
利用 Dash,开发人员可以访问所有可配置属性和底层 Flask 实例。利用 Dash 框架开发的应用程序可以部署到服务器中,而且最终呈现到 Web 浏览器中。
Dash 应用程序天生跨平台(Linux/Win/Mac),且对移动设备友好,而且 Flash 插件的丰富集可以扩展应用程序的功能。
Django Framework
在本章中,我们将详细讨论 Django 框架。
Django 是一个用于构建 Web 应用程序的 MVT Web 框架。巨大的 Django Web 框架包含很多“内置信息”,开发者常常惊叹于所有这些是如何协同工作的。添加这么多内置信息的原理是将通用 Web 功能放入框架本身,而不是作为单独的库添加。
Django 框架流行的主要原因之一是它拥有庞大的 Django 社区。社区如此庞大,以至于专门为其创建了一个网站,让来自各地的开发者可以开发第三方包,包括身份验证、授权、功能齐全的 Django 驱动的 CMS 系统、电子商务插件等等。你尝试去开发的东西很有可能已被其他人开发出来了,你只需要将那个整合到你的项目中即可。
Why should you use Django?
Django 的设计是为了鼓励开发者快速、干净、实用地设计地开发网站。Django 以其实用的方式来完成工作而从众多框架中脱颖而出。
如果你计划构建一个高度可定制的应用程序,比如社交媒体网站,Django 是最佳的框架之一。Django 的优势在于它在用户之间的交互以及共享不同类型媒体的能力。Django 的一大优势在于其利用大型社区支持的能力,这给了你高度可定制的第三方即用型插件,用于你的应用程序。
以下是选择 Django 用作 Web 开发的十大理由−
Python
Python 是公认的最容易学习的编程语言之一,因为它有简单的语言结构、流结构和简单的语法。它非常通用,既能运行网站,也能运行桌面应用程序和嵌入到许多设备中的移动应用程序,并作为一种流行的脚本语言用于其他应用程序。
Scalable
Django 是基于 MVC 设计模式 的。这意味着所有实体,如数据库 (database)、后端和前端代码,都是独立的实体。Django 允许我们将代码从静态媒体中分离出来,包括图片、文件、CSS 和 JavaScript,它们构成了你的网站。
Django 支持用于 Web 服务器、缓存、性能管理、集群和平衡的第三方库的完整列表。Django 提供的优点之一是对主要的电子邮件和消息应用程序和服务的支持,如 ReST 和 OAuth。
Battle tested
Django 在 2005 年首次开源。在 12 年的发展之后,Django 现在不仅运行新闻发布网站,而且还运行 Pinterest、Instagram、Disqus、Bitbucket、EventBrite 和 Zapier 等主要全球性企业的全部或部分业务。这使得其成为一种强大且可靠的 Web 框架,供开发者使用。
Huge package support
由于它有很大的社区支持和庞大的开发者网络,因此你打算做的任何事情很可能以前都已完成过。大量的国际开发者社区通过将他们的项目作为开源包发布,为社区做出贡献。
这些项目的其中一个资料库是 Django 包网站。目前,Django 包列出了超过 3400 个用于我们在 Django 项目中使用的可重复使用的 Django 应用程序、网站和工具。
Actively developed
与开放源代码项目相关的最大风险之一是其可持续性。我们无法确定它是否能够持续很长时间。
Django 没有此类风险,因为它已经存在 12 年了。它持续发布、提供更新/更好的版本,其活跃社区每天都在壮大,并且拥有一个由自愿贡献者组成的大核心团队,他们每天都维护和改进代码库。
Who’s Using Django?
由于 Django 独一无二的优势,有许多流行网站都使用 Python 构建在 Django 框架之上。以下是基于 Django 全部或部分构建的一些主要网站。
Disqus
它是全球最受欢迎的博客评论托管网站之一。它可以通过 Disqus 轻松地与大多数流行的 CMS(内容管理系统)集成,例如 WordPress 和许多其他系统。通过满足超过 5000 万用户群的需求,Django 可以让网站所有者与其社区取得联系。
Bitbucket
Bitbucket 类似于 GitHub,是一个版本控制存储库托管服务。Bitbucket 与 GitHub 之间的唯一区别在于 Bitbucket 托管 Mercurial 存储库,而 GitHub 托管 Git 存储库。由于数百万用户使用 Bitbucket,并且 Bitbucket 提供的所有服务(例如创建存储库、推送代码、添加协作者、提交、提交请求等)都必须稳定可靠。Django 负责运行 Bitbucket 网站。
Instagram 是一款社交网络应用,专为那些喜欢与所有朋友分享照片和视频的人打造。目前 Instagram 上有很多名人,以便与粉丝们保持更密切的联系。Django 框架也在运行 Instagram。
The Washington Post
如果世界上有一家有影响力的报纸,那肯定就是《华盛顿邮报》。《华盛顿邮报》的网站是一个非常流行的在线新闻来源,可作为其日报的补充。《华盛顿邮报》的网站拥有巨大的浏览量和流量,而 Django Web 框架能够轻松地应对这些问题。
Installing and Creating a Django project and app
在安装 Django 之前,我们必须确保已经安装了 Python。假设你正在使用 virtualenv,只需 pip install django 就足够了。
Creating Django Project
完成安装后,我们需要创建一个 Django 项目。
在 Windows 机器中运行以下命令将创建如下所示的 Django 项目:
django-admin startproject my_project_name
键入 dir 将显示一个新的文件和一个新的目录,如上所示。
manage.py −manage.py 是一个命令行可执行 Python 文件,它只是 django-admin 的包装器。它帮助我们管理项目,这也暗示在它的名称中。
通过此,它在 myFirstDjangoProject 中创建了一个名为 myFirstDjangoProject 的目录,它表示我们项目的配置根目录。让我们深入探索一下。
Configuring Django
通过将 myFirstDjangoProject 目录称为“配置根”,我们的意思是该目录包含为常规配置我们的 Django 项目而必需的文件。该目录外部的几乎所有内容都将仅关注与项目的模型、视图、路由等相关的“业务逻辑”。将项目连接在一起的所有点都会在此处生成。
-
init .py − 此项为空,并将目录更改为可导入的 Python 包。
-
settings.py − 如名称所示,这是将设置大多数配置项的地方。
-
urls.py − 使用 urls.py 设置 URL。通过此,我们不必在此文件中明确地为项目写入每个 URL。但是,我们必须告诉 Django 声明了 URL 的位置(即,我们需要在 urls.py 中链接其他 URL)。
-
wsgi.py − 此项旨在帮助应用程序投入生产,它类似于其他应用程序,如 Flask、Tornado、Pyramid,它公开一些“应用程序”对象。
Setting the settings
查看 settings.py 将揭示它的大小相当大 - 这只是默认设置。其他我们需要注意的事情是静态文件、数据库、媒体文件、云集成或 Django 项目可以配置的其他几十种方式。让我们了解 settings.py 文件中提到的要点:
-
BASE_DIR − 对于查找文件,这非常有用。在 setting.py 文件中,BASE_DIR 参数设置基本目录的绝对路径。
-
SECRET_KEY − 用于制作哈希。通常,我们使用 secret_key 进行 Cookie、会话、CSRF 保护和认证令牌。
-
DEBUG − 我们可以将它设置为在开发或生成模式下运行项目。
-
ALLOWED_HOSTS − 我们提供通过它提供我们应用程序的域名列表。在开发模式下,设置是可选的;然而,在生产机器中,我们需要设定我们的 Django 项目。
-
INSTALLED_APPS − 它是在我们的 Django 项目中当前安装和运行的 Django“应用程序”的列表。内置 Django 提供如下六个已安装的应用程序:
-
MIDDLEWARE − 它帮助我们的 Django 项目运行。它是一个 Python 类,可连接到 Django 请求/响应处理。
-
TEMPLATES − 它定义文档应如何显示在前端。Django 模板用于生成任何基于文本的格式。
-
WSGI_APPLICATION − 我们设置的任何服务器都必须知道 WSGI 文件的位置。如果你使用外部服务器,它将在自身设置中查找。默认情况下,它指向 wsgi.py 中的对象。
-
DATABASES − 它设置到我们的 Django 项目当前正在访问的数据库。设置默认数据库是必须的。如果我们设置我们选择的数据库,我们需要提及与数据库相关的一些内容,如 - HOST、USER、PASSWORD、PORT、数据库 NAME 和适当的 ENGINE。
-
STATIC_URL − 这是在引用 STATIC_ROOT 中位于静态文件时的使用的 URL。默认情况下,它为 None。
然而,我们可能需要为静态文件添加一个路径。转到文件末尾,在 STATIC_URL 条目的正下方,添加一个名为 STATIC_ROOT 的新条目,如下所示 −
myFirstDjangoProject/settings.py
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, ‘static’)
Setting up a Database
有很多不同的数据库软件可以存储你网站的数据。我们将使用默认软件 sqlite3。
这是在你 myFirstDjangoProject/settings.py − 中给出的以下部分中已经设置的
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
为了为我们的博客创建一个数据库,让我们在控制台中运行以下代码 − python manage.py migrate (我们需要在包含 manage.py 文件的 myFirstDjangoProject 目录中。
如果一切顺利,你将获得以下输出 −
Starting the Web Server
你需要在包含 manage.py 文件的目录中。在控制台中,我们可以通过如下所示运行 python manage.py runserver 来启动 Web 服务器 −
现在,你需要做的就是检查你的网站是否正在运行。打开你的浏览器(Firefox、Chrome、Safari、Internet Explorer 或你用任何其他浏览器)并输入此地址 −
或
http://localhost:8000/ # 因为我们的 Web 服务器仅在我们的本地计算机中运行。
恭喜!您刚刚创建了你的第一个网站并使用 Web 服务器运行它!
在 Web 服务器运行期间,你不会看到一个新的命令行提示来输入其他命令。终端将接受下一项文本,但不会执行新命令。这是因为 Web 服务器持续运行以侦听传入请求。
Django Models
我们正在尝试创建一个 Django 模型,它将存储我们博客中的所有帖子。但要确保其正常工作,我们需要了解对象。
Objects
对象是属性和操作的集合。让我们用一个例子来理解这一点。假设我们想模拟一只猫,我们将创建一个名为 Cat 的对象,它具有颜色、年龄、情绪(好/坏/困)和主人等属性。
然后,Cat 有一些动作:呼噜、抓挠或喂食。
Cat
--------
color
age
mood
owner
purr()
scratch()
feed(cat_food)
CatFood
--------
taste
因此,我们基本上试图用属性(称为对象属性)和操作(称为方法)在代码中描述真实的事物。
在构建博客时,我们需要一些文本内容和标题。有作者姓名、创建日期和发布日期也是必要的。
因此,我们的博客将包含以下对象:
Post
--------
title
text
author
created_date
published_date
我们还需要一些用于发布该帖子的方法。在了解了什么是对象之后,我们可以为博客文章创建一个 Django 模型。
模型是 Django 中一种特殊的对象类型,并保存到数据库中。我们将在 SQLite 数据库中存储我们的数据。
Creating an application
为了保持清晰明了,我们将在项目中创建一个单独的应用程序。接下来,我们将尝试通过运行以下简单的命令来创建博客 Web 应用程序。
现在我们注意到,一个新的 myBlog 目录已创建并且其中包含多个文件。我们项目中的目录和文件应如下所示:
创建应用程序后,我们还需要告诉 Django 使用它。我们在文件 myFirstDjangoProject/settings.py 中执行此操作。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myBlog',
]
Creating a blog post model
在 myBlog/models.py 文件中,我们定义了所有称为模型的对象——这是一个我们定义博客文章的地方。
打开 myBlog/models.py,删除其中的所有内容,并按如下所示编写代码:
首先,我们通过调用 from 或 import 从其他文件中导入一些功能。这样,我们可以通过 from and import 包含一些部分,而不用在每个文件中复制和粘贴相同内容。
class Post(models.Model) - 这行代码定义了我们的模型(它是一个对象)。
-
class 是一个特殊关键字,表示我们正在定义一个对象。
-
Post 是我们模型的名称。始终用大写字母开始类名称。
-
models.Model 表示 Post 是一个 Django 模型,因此 Django 知道它应该保存在数据库中。
现在,让我们讨论一下上面定义的属性:title、text、created_date、published_date 和 author。为此,我们需要定义每个字段的类型。
-
models.CharField - 这就是你用有限的字符来定义文本的方式。
-
Models.TextField - 这是用于长文本,没有限制的。
-
Models.DateTimeField - 这是用于日期和时间的。
-
Models.ForeignKey - 这是与另一模型的链接。
我们使用 def 来定义函数/方法,而 str 是该方法的名称。
方法通常会返回一些内容。在本文中,当我们调用 str () 时,我们会得到一篇 Post 标题下的文本 (字符串)。
Creating tables for models in your database
最后一步是向数据库添加一个新模型。首先,我们必须让 Django 明白我们已对模型做出一些更改。让我们在控制台窗口中使用命令 python manage.py make migrations myBlog 进行此操作,如下所示:-
然后,Django 会准备一个迁移文件,我们现在必须将其应用于数据库。在控制台中,我们可以输入: python manage.py migrate myBlog ,输出应如下所示:-
我们的 Post 模型现在已在我们的数据库中。
Django Admin
我们要添加、编辑和删除刚建模的帖子,现在我们要使用 Django 管理。
所以,让我们打开 myBlog/admin.py file 并把以下内容放入其中 -
首先,我们要导入(包含)在之前的章节中定义的 Post 模型。为了让我们的模型在管理页面中可见,我们需要使用 manage.py createsuperuser (Post)向 admin.site 注册模型。
要登录管理网站,你需要创建一个超级用户帐户,这个帐户可以控制网站上的所有内容。所以,请停止 Web 服务器并在命令行中输入 manage.py createsuperuser ,然后按 Enter。
好,现在是时候看一下我们的 Post 模型了。记住在控制台中运行 python manage.py run server 来运行 Web 服务器。转到浏览器并输入地址 https://127.0.0.1:8000/admin/. ,使用我们刚刚选择的凭据登录。然后,你应看到与以下类似的 Django 管理信息中心:-
转到 Post 并使用它进行一些尝试。你可以从任何地方添加许多博文和内容。你的博文会看起来像这样:-
本课程只是 Django 的概览,我们能够使用几行代码创建一个博文。
Flask Framework
Flask 是一种微框架,几乎不依赖于外部库。它是一种非常轻量的框架,让我们可以自由地做任何我们想做的事情。
在本章中,我们将使用 Python 和 Flask 框架构建一个项目。
Flask Startup and Configuration
类似大多数广泛使用的 python 库,可以从 Python 程序包索引 (PPI) 安装 Flask 程序包。让我们首先创建一个目录(在本章中,我们创建了一个名为 flaskProject 的目录),然后创建一个虚拟环境(并将其称为 flaskEnv ),所有项目相关的依赖项都将加载到该环境中(包括 flask)。你还可以安装 flask-sqlalchemy,以便你的 flask 应用程序可以轻松地与 SQL 数据库通信。
安装 flask 之后,flaskEnv(我们的虚拟环境名称)将显示类似以下的内容:
Creating an app with flask
通过安装 flask,我们可以使用如下所示的几行代码创建一个简单的“ hello application in flask ”:
在终端中键入以下内容:
$python flaskapp.py
然后你可以看到以下输出:
在 http://127.0.0.1:5000/ 或 localhost:5000 上运行
以下是我们示例代码中所执行功能的说明:
-
首先,我们导入 Flask 类库。此类的实例是 WSGI 应用程序。
-
其次,我们创建此类的实例。应用程序包或模块名称是我们的第一个参数。Flask 必须知道如何在何处查找静态文件、模板和其他文件,这是必需的。
-
接下来是 route() 装饰器,我们使用此装饰器来了解哪个 URL 应该触发我们的方法/函数。
Creating URL Routing
URL 路由使 Web 应用程序中的 URL 便于记忆。我们现在将创建一些 URL 路由:
/hello
/members
/members/name
我们可以根据上面的 URL 编写下面的代码并保存为 app.py。
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return "Index!"
@app.route('/Hello')
def hello():
return "Hello, World!"
@app.route("/members")
def members():
return "Members"
@app.route("/members/<name>/")
def getMember(name):
return name
if __name__ == '__main__':
app.run(debug=True)
$ python app.py
Running on [role="bare"]http://localhost:5000/
我们在浏览器中获得下面的输出 −
我们可以在浏览器中尝试其他 URL,如下所示 −
Running on [role="bare"]http://localhost:5000/hello, will give the following output −
Running on [role="bare"]http://localhost:5000/members, will give −
Running on [role="bare"]http://localhost:5000/members/TutorialsPoint/, will give you the following output −
但通常我们不想返回字符串(如上),我们返回模板。为此,我们想要从 flask 中使用函数 “ render_template ”,并使用一些输入返回 render_template。所以,下面的函数将完成我们的工作 −
from flask import render_template
return render_template(‘home.html’)
让我们创建一个文件夹模板并在其中放置 home.html 文件。
接下来,我们将讨论布局。我们不会为每个单独的模板使用 html head 标签和 body 标签,而是设计一个布局来包含 head 和 body 标签,并包装当前视图或当前模板。为此,我们必须创建一个单独的文件并将其称为 layout.html 。在此,我们可以放置我们的正常 head 标签、body 标签和其他所有必需的标签。
我们可以使用下面的代码行创建我们的新 layout.html −
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>MyFlaskApp</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
</head>
<body>
{% include 'includes/_navbar.html' %}
<div class="container">
{% block body %}
{% endblock %}
</div>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js">
</script>
</body>
</html>
在上面的代码中,我们给出了标题曲目 MyFlaskAp,在 head 中使用 css cdn,在 body 块中使用 javascript 来启用引导程序。
现在,我们必须为每个单独的页面创建导航栏。为此,我们必须首先创建一个包含文件夹,然后在其中创建 _navbar.html 文件。现在在 _navbar.html 中,我们必须使用 getbootstrap.com 提供的标准启动程序模板。新创建的 _navbar.html 文件如下所示 −
并将此 _navbar.html 文件包含到我们的 layout.html 文件中。
{% include 'includes/_navbar.html' %}
当我们拥有布局块时,我们能够在我们的主页文件 (home.html) 中扩展此块。
我们的 home.html 文件可以使用下面的代码创建 −
{% extends 'layout.html' %}
{% block body %}
<div class="jumbotron text-center">
<h1>Welcome to FlaskApp</h1>
<p>This application is built on Flask webframework!</p>
</div>
{% endblock %}
使用此内容如果我们尝试运行我们的 flaskapp.py 文件,那么我们可以在我们的浏览器中看到下面的输出 −
现在,我们希望激活(当前标签无效)我们的 about 标签。为 about 标签创建一个路由并创建一个模板文件 about.html 。
appflask.py 中的 about 标签路由如下所示 −
about.html 文件的内容如下所示 −
因此现在已处理了 Home 和 About。对于文章,我们可以在根目录中创建新文件 (data.py),其中我们放置数据并在我们的网页中调用该数据。
data.py
def Articles():
articles = [
{
'uid': 1,
'title': 'Article_One',
'body': 'Flask, being a microframework, often requires some repetitive step
to get a third party library working. Because very often these steps could
be abstracted to support multiple projects the Flask Extension Registry
was created.',
'Author': 'Rajesh Joshi',
'Created-on': '07-09-2018'
},
{
'uid': 2,
'title': 'Article_Two',
'body': "Flask, being a microframework, often requires some repetitive steps
to get a third party library working. Because very often these steps could
be abstracted to support multiple projects the Flask Extension Registry
was created.",
'Author': 'Rajesh J',
'Created-on': '07-09-2018'
},
{
'uid': 3,
'title': 'Article_Three',
'body': 'Flask, being a microframework, often requires some repetitive steps
to get a third party library working. Because very often these steps could be
abstracted to support multiple projects the Flask Extension Registry
was created.',
'Author': 'Joshi Rajesh',
'Created-on': '07-09-2018'
}
]
return articles
以下是 articles.html 的代码,该代码将显示每个 uid 的文章标题。
{% extends 'layout.html' %}
{% block body %}
<h1>Articles</h1>
{% for article in articles %}
<li class="list-group-item">
<a href="article/{{article.uid}}"> {{article.title}}</a>
</li>
{% endfor %}
{% endblock %}
总结来说,Flask 是目前最流行的 Python Web 框架之一,因为它的轻量级。尽管它是微型的,但它是一个可扩展的 Python Web 框架。通过提供所需的功能,Flask 可加速简单 Web 应用程序的开发。因此,Flask 更适合较小、不太复杂的应用程序。
Web2py Framework
Web2py 是一款易于使用的框架。使用 web2py 无需安装和配置,因为它具有可移植性,且可以在 USD 驱动器中运行。它基于 MVC 框架,与许多其他 Python 框架相似。尽管大多数框架不支持旧版本的 Python,但 web2py 仍然支持旧版本:Python 2.6 和 2.7。它还支持 LDAP 认证,这是当今广泛接受的认证方式。
Web2py 尝试通过关注三个主要目标降低 Web 开发的进入门槛 −
-
Rapid development
-
Ease of use
-
Security
考虑到用户观点,Web2py 会不断在内部进行优化以使其成为更快速、更精简的框架,包括对向后兼容性的支持。
Installing and Configuring Web2py Framework
运行一个 web2py 非常简单,你需从此链接下载 exe 文件: http://www.web2py.com/init/default/download
对于 Windows,你可以下载 zip 文件,将其解压,直接或通过命令行运行 exe 文件。系统会弹出如下屏幕,要求提供管理员密码。
你可以选择一个管理员密码并启动服务器。你将看到以下屏幕 −
Creating an app using Web2py
现在我们准备创建一个新的应用程序。单击位于底部的 admin 标签。因此,输入管理员密码后,我们将看到以下屏幕 −
转到新简单应用程序,输入一些应用程序名称(如 helloWeb2py),然后单击创建。这将显示如下所示的设计界面页面 −
你还可以访问当前的实时网络,helloWeb2py,只需在本地机器上输入 http://127.0.0.1:8000/helloWeb2py ,你将看到以下输出 −
在 helloWeb2py 应用程序的设计页面中,转到控制器,然后单击 default.py 旁边的编辑按钮。如果你更改 index() 函数的返回值,将显示以下输出 −
保存更改内容,现在你可以在 helloWeb2py 应用程序中查看所做的更改。只需刷新 http://127.0.0.1:8000/helloWeb2py 链接,你将看到以下输出 −
Deploying the app on cloud platform
现在,如果你想在云平台上部署你的应用程序,请返回主页并单击站点。你可以选择任何一种部署选项。在这里,我们选择“pythonAnywhere”。转到 pythonAnywhere 网站并注册(如果尚未注册)。单击 “Add a new web app” 并填写所有凭据(选择 web2py 应用程序)。大功告成。
现在,转到 https://username.pythonanywhere.com/welcome/default/index ,单击 admin 标签(输入密码)。然后单击上传并安装打包的应用程序。按如下内容填写凭据并单击安装。
一切都完成后,将出现一个如下所示的弹出消息 −
现在,要查看你的应用程序,请打开以下链接 −
我们的第一个 web2py 应用程序已成功创建并部署。
总而言之,Web2py 是一种免费、快速、安全的 web 开发框架,完全用 python 编写,并且鼓励在各个方面(模型、视图、控制器)使用 python。这是一个非常适合小型 web 应用程序或原型的框架,但无法达到企业级质量要求。原因在于,在企业级应用程序中,由于缺乏单元测试、良好准确的错误报告和分散的模型,解决 bug 的复杂度将呈指数级增长。
Pyramid Framework
Pyramid 是一个通用、开源的 web 应用程序开发框架,用 python 构建。它允许 python 开发人员轻松创建 web 应用程序。
Installing, starting up and configuring
正如所描述的,“从小开始,大功告成,坚持到底的框架”,Pyramid 非常像 Flask,安装和运行时只需要很少的工作。事实上,一旦你开始构建这个应用程序,你就会发现其中的一些模式类似于 Flask。
以下是创建 Pyramid 框架环境的步骤:
-
首先,创建一个项目目录。在此处,我们创建了一个名为 pyramidProject 的目录(你可以选择你想要的任何名称)。
-
接下来,创建一个虚拟环境,你将在其中安装所有特定于项目的依赖关系。在此处,我们创建了一个名为 pyramidEnv 的虚拟环境文件夹,其中安装了 Pyramid。
-
然后,转到目录 pyramidEnv 并通过 pip install pyramid 安装 Pyramid。
完成上述所有操作后,你的目录结构如下所示:
系统中安装的 Pyramid 版本如下所示:
Core Concepts
Pyramid 框架基于以下核心概念:
-
Zope (可扩展性、遍历、声明性安全性)——Pyramid 在可扩展性、遍历概念和声明性安全方面以 Zope 为基础。
-
Pylons (URL 调度、非观点持久性、模板化等)——Pyramid 从中汲取概念的另一个领域是 Pylons 项目。Pylons 有路由的概念,它在 Pyramid 框架中调用 URL 调度,并且它们还具有持久性层或模板化的非观点视图。
-
Django (视图,文档级别)——Pyramid 还从 Django 中获得提示。我们采取视图的方式、路由 URL 的方式以及文档级别都非常类似于 Django。
以下是 Pyramid 框架的功能:
-
它是已知的最快的 Python Web 框架。
-
它支持小项目和大项目(当你的小框架不够用时,何必重新编写)。
-
它支持类似于微框架的单文件 Web 应用程序。
-
It has built-in sessions.
-
它支持类似于 Plone/Zope 的事件。
-
它提供事务管理(如果你已经注意到,我们之前已经使用过 Zope)。
Configuration
配置是影响应用程序操作的设置。配置 Pyramid 应用程序有两种方法:命令式配置和声明式配置。
Pyramid 配置支持:
-
命令式配置或甚至对基于装饰器的配置的覆盖
-
配置冲突侦测(包括更本地对更不本地确定)
-
配置的可扩展性(从多应用中包含)
-
灵活的身份验证和授权规则
-
程序化配置内省(查看用于生成导航的路径的当前状态)
URL generation
在金字塔中,我们可以为路径、资源和静态资源生成 URL。使用 URL 生成 API 既容易又灵活。通过金字塔的多个 API 生成 URL,用户可以任意更改配置,而不必担心破坏任何网页的链接。
简而言之,金字塔中的 URL −
-
支持 URL 生成,以允许对应用程序进行更改,这些更改不会破坏链接。
-
生成 URL,指向处于应用程序内部或外部的静态资源。
-
supports Routes and Traversal.
Views
金字塔的主要任务之一是在请求到达应用程序时查找并调用视图可调用对象。视图可调用对象是在对应用程序中的请求做出响应时执行一些有趣操作的代码片段。
在将视图映射到 URL 调度或 Python 代码时,可以进行任何类型的调用。视图可以是函数声明或实例,可以在金字塔中用作视图。
下面给出视图的一些重要要点:
-
视图从任何可调用对象生成。
-
基于渲染器的视图可以简单返回字典(不必返回 webby 样式对象)。
-
支持每条路径的多个视图(GET 与 POST 与 HTTP 头部检查等)。
-
视图响应适配器(当你想指定视图如何返回的值处理方式与响应对象不同时)。
Extensibility
金字塔的设计考虑了可扩展性。因此,如果金字塔开发人员在构建应用程序时牢记某些约束,第三方应该能够在无需修改源代码的情况下更改应用程序的行为。遵守某些约束的金字塔应用程序的行为可以在不进行任何修改的情况下进行覆盖或扩展。它设计用于针对多个环境的灵活部署(无单例)。金字塔具有“Tweens”中间件支持(WSGI 中间件,但在金字塔本身的上下文中运行)。
Running a Hello, Pyramid Program
在安装金字塔框架以检查一切都运行良好之后,我们可以想到的最简单的程序是运行一个简单的“Hello, World”或“Hello, Pyramid”程序。
下面是我在端口号 8000 上运行的金字塔“Hello, Pyramid”程序:
上面的示例很容易运行。将此保存为 app.py(在此,我们给出了名称 pyramid_helloW.py)。
运行最简单的程序:-
接下来,在浏览器中打开 http://localhost:8000/ ,您将看到 Hello, Pyramid! 消息如下所示 −
以下是上述代码的说明 −
Line no. 1-3
在文件开头,我们有 import 语句。第一行导入 make_server 函数,该函数可以创建一个简单的 Web 服务器,当它传递给应用程序时。第二行和第三行从 pyramid 导入配置和响应函数。这些函数分别用于配置详细信息、设置应用程序的参数以及响应请求。
Line no. 5-6
现在,我们有一个名为 hello_world 的函数定义。实现生成响应的视图代码。满足视图要求的函数负责呈现将传递回请求实体的文本。在上述情况下,该函数在调用时使用我们之前导入的响应函数。这会回传一个应该提供给客户端的值。
Line no. 9-11
在第 9 行中,我们创建一个名为 config 的变量,该变量来自我们在程序顶部导入的配置器函数创建的对象。第 10 行和第 11 行调用此对象的 add_route 和 add_view 方法。此方法用于定义应用程序可以使用的视图。正如我们所看到的,我们传递了我们之前定义的 hello_world 函数。这是该函数实际上作为视图被合并的地方。
Line no. 12-14
在此,我们实际上通过调用配置对象的 make_wsgi_app 方法来创建 WSGI 应用程序。这使用对象的属性(例如,我们添加的视图)来创建一个应用程序。然后将此应用程序传递给我们在导入时导入的 make_server 函数,以创建一个可以启动 Web 服务器来为我们的应用程序提供服务的对象。最后一行启动此服务器。
我们的 hello world application 是最简单、最容易使用的金字塔应用程序之一,配置为“命令式”。它是必要的,因为我们在执行配置任务时可以使用 Python 的全部功能。
总之,Pyramid 是一个拥有庞大且活跃社区的开源 Python Web 框架。这个大型社区为使 Python Web 框架流行且相关做出了贡献。Pyramid Web 框架通过提供一组健壮的功能和工具简化并加速了 Web 应用程序的开发。
Dash Framework
在本章中,我们将详细讨论 Dash 框架。
Dash 是一个用于构建分析性 Web 应用程序的开源 Python 框架。它是一个强大的库,简化了数据驱动的应用程序的开发。对于那些不太熟悉 Web 开发的 Python 数据科学家而言,它特别有用。用户可以使用 Dash 在其浏览器中创建出色的仪表板。
基于 Plotly.js、React 和 Flask 构建,Dash 将现代 UI 元素(如下拉菜单、滑块和图形)直接连接到您的分析 Python 代码。
Dash 应用程序包括一个 Flask 服务器,该服务器使用 HTTP 请求通过 JSON 数据包与前端 React 组件通信。
Dash 应用程序完全用 Python 编写,因此不需要 HTML 或 JavaScript。
Dash Setup
如果您的终端中尚未安装 Dash,请安装下面提到的 Dash 库。由于这些库处于活动开发阶段,因此请经常安装和升级库。Python 2 和 3 也受支持。
-
pip install dash==0.23.1 # Dash 核心后端
-
pip install dash-renderer==0.13.0 # Dash 前端
-
pip install dash-html-components==0.11.0 # HTML 组件
-
pip install dash-core-components==0.26.0 # 功能增强型组件
-
pip install plotly==3.1.0 # Plotly 绘图库
为了确保一切正常工作,我们在这里创建了一个简单的 dashApp.py 文件。
Core Components
我们可以用 dash_html_components 和 dash_core_components 库构建布局。Dash 提供了应用程序所有可视化组件的 Python 类。我们还可以用 JavaScript 和 React.js 来自定义我们自己的组件。
import dash_core_components as dcc
import dash_html_components as html
dash_html_components 是用于所有 HTML 标签的,而 dash_core_components 用于使用 React.js 构建的交互性。
使用上述这两个库,我们来编写如下所示的代码:
app = dash.Dash()
app.layout = html.Div(children=[
html.H1(children='Hello Dash'),
html.Div(children='''Dash Framework: A web application framework for Python.''')
相应的 HTML 代码将类似如下所示:
<div>
<h1> Hello Dash </h1>
<div> Dash Framework: A web application framework for Python. </div>
</div>
Writing Simple Dash app
我们将在文件 dashApp.py 中学习如何使用上述库编写一个简单的 Dash 示例。
# -*- coding: utf-8 -*-
import dash
import dash_core_components as dcc
import dash_html_components as html
app = dash.Dash()
app.layout = html.Div(children=[
html.H1(children='Hello Dash'),
html.Div(children='''Dash Framework: A web application framework for Python.'''),
dcc.Graph(
id='example-graph',
figure={
'data': [
{'x': [1, 2, 3], 'y': [4, 1, 2], 'type': 'bar', 'name': 'Delhi'},
{'x': [1, 2, 3], 'y': [2, 4, 5], 'type': 'bar', 'name': u'Mumbai'},
],
'layout': {
'title': 'Dash Data Visualization'
}
}
)
])
if __name__ == '__main__':
app.run_server(debug=True)
Running the Dash app
在运行 Dash 应用程序时,请注意以下几点:
(MyDjangoEnv) C:\Users\rajesh\Desktop\MyDjango\dash>python dashApp1.py
-
正在提供 Flask 应用程序“dashApp1”(延迟加载)
-
环境:productionWARNING:请勿在生产环境中使用开发服务器。请改用生产 WSGI 服务器。
-
Debug mode: on
-
Restarting with stat
-
Debugger is active!
-
Debugger PIN: 130-303-947
-
正在 http://127.0.0.1:8050/ 上运行(按 CTRL+C 退出)
127.0.0.1 - - [12/Aug/2018 09:32:39] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [12/Aug/2018 09:32:42] "GET /_dash-layout HTTP/1.1" 200 -
127.0.0.1 - - [12/Aug/2018 09:32:42] "GET /_dash-dependencies HTTP/1.1" 200 -
127.0.0.1 - - [12/Aug/2018 09:32:42] "GET /favicon.ico HTTP/1.1" 200 -
127.0.0.1 - - [12/Aug/2018 09:39:52] "GET /favicon.ico HTTP/1.1" 200 -
在您的网络浏览器中访问 http:127.0.0.1:8050/ 。您应该会看到一个类似于此的应用程序。
在上述程序中,需要特别注意以下几点:
-
应用程序布局由“组件”树组成,例如 html.Div 和 dcc.Graph。
-
dash_html_components 库为您遇到的每一个 HTML 标记提供了一个组件。html.H1 (children = ‘Hello Dash’) 组件在您的应用程序中生成一个 <h1> Hello Dash </h1> HTML 元素。
-
并非所有组件都是纯 HTML。dash_core_components 描述了高级组件,这些组件是通过 React.js 库使用 JavaScript、HTML 和 CSS 生成的,具有交互性。
-
每个组件完全通过关键字属性进行描述。Dash 是声明式的:您将主要通过这些属性描述您的应用程序。
-
children 属性很特殊。根据惯例,它始终是第一个属性,这意味着您可以省略它。
-
Html.H1 (children=’Hello Dash’) 与 html.H1 (‘Hello Dash’) 相同。
-
您应用程序中的字体看起来会与这里显示的不同。此应用程序使用自定义 CSS 样式表来修改元素的默认样式。自定义字体样式是允许的,但截至目前,我们可以添加以下 URL 或您选择的任何 URL-app.css.append_css ({“external_url”:https://codepen.io/chriddyp/pen/bwLwgP.css}),以使您的文件获得与这些示例相同的外观。
More about HTML
dash_html_compoments 库包含一个用于所有 HTML 标签的组件类,以及所有 HTML 参数的关键字参数。
让我们在先前应用文本中添加组件的内联样式 -
# -*- coding: utf-8 -*-
import dash
import dash_core_components as dcc
import dash_html_components as html
app = dash.Dash()
colors = {
'background': '#87D653',
'text': '#ff0033'
}
app.layout = html.Div(style={'backgroundColor': colors['background']}, children=[
html.H1(
children='Hello Dash',
style={
'textAlign': 'center',
'color': colors['text']
}
),
html.Div(children='Dash: A web application framework for Python.', style={
'textAlign': 'center',
'color': colors['text']
}),
dcc.Graph(
id='example-graph-2',
figure={
'data': [
{'x': [1, 2, 3], 'y': [4, 1, 2], 'type': 'bar', 'name': 'Delhi'},
{'x': [1, 2, 3], 'y': [2, 4, 5], 'type': 'bar', 'name': u'Mumbai'},
],
'layout': {
'plot_bgcolor': colors['background'],
'paper_bgcolor': colors['background'],
'font': {
'color': colors['text']
}
}
}
)
])
if __name__ == '__main__':
app.run_server(debug=True)
在上面的示例中,我们使用 style 属性修改了 html.Div 和 html.H1 组件的内联样式。
它在 Dash 应用程序中被渲染如下 -
dash_html_components 和 HTML 属性有一些关键区别 -
-
对于 Dash 中的 style 属性,你只需提供一个字典,而 HTML 中是分号分隔的字符串。
-
Style 字典键是 camelCased ,因此 text-align 更改为 textalign 。
-
Dash 中的 ClassName 类似于 HTML class 属性。
-
第一个参数是通过 children 关键字参数指定 HTML 标签的子级。
Reusable Components
通过用 Python 编写我们的标记,我们可以创建复杂的、可重用的组件(比如表格),而无需切换上下文或语言 -
下面是一个快速示例,它从 pandas 数据框生成一个“表格”。
import dash
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd
df = pd.read_csv(
'https://gist.githubusercontent.com/chriddyp/'
'c78bf172206ce24f77d6363a2d754b59/raw/'
'c353e8ef842413cae56ae3920b8fd78468aa4cb2/'
'usa-agricultural-exports-2011.csv')
def generate_table(dataframe, max_rows=10):
return html.Table(
# Header
[html.Tr([html.Th(col) for col in dataframe.columns])] +
# Body
[html.Tr([
html.Td(dataframe.iloc[i][col]) for col in dataframe.columns
]) for i in range(min(len(dataframe), max_rows))]
)
app = dash.Dash()
app.layout = html.Div(children=[
html.H4(children='US Agriculture Exports (2011)'),
generate_table(df)
])
if __name__ == '__main__':
app.run_server(debug=True)
我们的输出将类似于 -
More about Visualization
dash_core_components 库包含一个名为 Graph 的组件。
Graph 使用开源 plotly.js JavaScript 绘图库呈现交互式数据可视化。Plotly.js 支持约 35 种图表类型,并在矢量质量 SVG 和高性能 WebGL 中呈现图表。
下面是一个从 Pandas 数据框创建散点图的示例 -
import dash
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd
import plotly.graph_objs as go
app = dash.Dash()
df = pd.read_csv(
'https://gist.githubusercontent.com/chriddyp/' +
'5d1ea79569ed194d432e56108a04d188/raw/' +
'a9f9e8076b837d541398e999dcbac2b2826a81f8/'+
'gdp-life-exp-2007.csv')
app.layout = html.Div([
dcc.Graph(
id='life-exp-vs-gdp',
figure={
'data': [
go.Scatter(
x=df[df['continent'] == i]['gdp per capita'],
y=df[df['continent'] == i]['life expectancy'],
text=df[df['continent'] == i]['country'],
mode='markers',
opacity=0.7,
marker={
'size': 15,
'line': {'width': 0.5, 'color': 'white'}
},
name=i
) for i in df.continent.unique()
],
'layout': go.Layout(
xaxis={'type': 'log', 'title': 'GDP Per Capita'},
yaxis={'title': 'Life Expectancy'},
margin={'l': 40, 'b': 40, 't': 10, 'r': 10},
legend={'x': 0, 'y': 1},
hovermode='closest'
)
}
)
])
if __name__ == '__main__':
app.run_server()
以上代码的输出如下所示 -
这些图形是交互式的和响应式的。你可以将鼠标悬停在点上以查看其值,单击图例项以切换迹线,单击并拖动进行缩放,按住 shift 并单击并拖动进行平移。
Markdown
当 dash 通过 dash_html_components 库展现 HTML 风格时,用 HTML 编写副本可能很乏味。对于书写文本块,你可以在 dash_core_components 库中使用 Markdown 组件。
Core Components
dash_core_components 包含一组更高级别的组件,如下拉菜单、图形、markdown、块等等。
与其他所有 Dash 组件一样,它们是完全声明式描述的。每个可配置选项都作为组件的关键字参数提供。
下面是这个示例,用到了一些可用的组件−
# -*- coding: utf-8 -*-
import dash
import dash_core_components as dcc
import dash_html_components as html
app = dash.Dash()
app.layout = html.Div([
html.Label('Dropdown'),
dcc.Dropdown(
options=[
{'label': 'New York City', 'value': 'NYC'},
{'label': u'Montréal', 'value': 'MTL'},
{'label': 'San Francisco', 'value': 'SF'}
],
value='MTL'
),
html.Label('Multi-Select Dropdown'),
dcc.Dropdown(
options=[
{'label': 'New York City', 'value': 'NYC'},
{'label': u'Montréal', 'value': 'MTL'},
{'label': 'San Francisco', 'value': 'SF'}
],
value=['MTL', 'SF'],
multi=True
),
html.Label('Radio Items'),
dcc.RadioItems(
options=[
{'label': 'New York City', 'value': 'NYC'},
{'label': u'Montréal', 'value': 'MTL'},
{'label': 'San Francisco', 'value': 'SF'}
],
value='MTL'
),
html.Label('Checkboxes'),
dcc.Checklist(
options=[
{'label': 'New York City', 'value': 'NYC'},
{'label': u'Montréal', 'value': 'MTL'},
{'label': 'San Francisco', 'value': 'SF'}
],
values=['MTL', 'SF']
),
html.Label('Text Input'),
dcc.Input(value='MTL', type='text'),
html.Label('Slider'),
dcc.Slider(
min=0,
max=9,
marks={i: 'Label {}'.format(i) if i == 1 else str(i) for i in range(1, 6)},
value=5,
),
], style={'columnCount': 2})
if __name__ == '__main__':
app.run_server(debug=True)
以上程序的输出如下−
Calling Help
Dash 组件是声明式的。在安装时,这些组件的每一个可配置方面均作为关键字参数设置。你可以在你的 Python 控制台中,在组件上调用帮助来学习更多关于一个组件和它的可用参数的信息。其中一些信息如下−
>>> help(dcc.Dropdown)
Help on class Dropdown in module builtins:
class Dropdown(dash.development.base_component.Component)
| A Dropdown component.
| Dropdown is an interactive dropdown element for selecting one or more
| items.
| The values and labels of the dropdown items are specified in the `options`
| property and the selected item(s) are specified with the `value` property.
|
| Use a dropdown when you have many options (more than 5) or when you are
| constrained for space. Otherwise, you can use RadioItems or a Checklist,
| which have the benefit of showing the users all of the items at once.
|
| Keyword arguments:
| - id (string; optional)
| - options (list; optional): An array of options
| - value (string | list; optional): The value of the input. If `multi` is false (the default)
-- More --
总之,Dash 应用程序的布局描述了应用程序的外观。布局是一个组件的层级树。dash_html_components 库为所有 HTML 标签和关键字参数提供了类,描述了 HTML 属性,如样式、类名和 id。dash_core_components 库生成了高级组件,如控件和图表。
Choosing a Better Framework
Python Web 框架的世界提供了多种选择。一些需要考虑的主要框架有 Django、Flask、Bottle、Diesel、Web2py、Pyramid、Falcon、Pecan 等,它们争夺开发人员的心智份额。Pyramid、Django、Web2py 和 Flask 等框架凭借它们的优缺点清单是理想的;为您的项目选择一个框架是一项艰难的选择。
Dash 完全设计用于满足不同的需求集。因此,作为开发人员,您希望将大量的选项减少到一个选项,该选项将帮助您按时完美地完成项目。
如果比较 Flask、Pyramid 和 Django 框架,Flask 是一个微框架,主要针对具有较简单要求的小型应用程序,而 Pyramid 和 Django 都针对较大的应用程序。Pyramid 是以灵活性和自由为理念构建的,因此开发人员拥有适合该项目的正确工具。在金字塔的情况下,开发人员可以自由选择数据库、URL 结构、模板化样式等等。但 Django 包括 Web 应用程序所需的所有电池,所以我们只需要安装 Django 就可以开始工作了。
Django 带有一个 ORM,而 Pyramid 和 Flask 让开发人员自己选择如何(或是否)存储他们的数据。一般来说,迄今为止,最常见的非 Django Web 应用程序 ORM 是 SQLAlchemy,但是其他选项可以是 DjangoDB、MongoDB、LevelDB 和 SQLite。
作为一名开发人员,如果我必须在我的项目中选择 Django 和 Web2py,我需要了解这两个框架的优点和缺点。因此,让我们比较 Django 和 Web2py −
Django
Django 的社区是一个大优势。这对开发人员来说实际上意味着资源财富将更大。具体来说,这归结为 −
-
Documentation
-
Open source resources
-
Third-party apps support
-
Deployment support
-
具有有益开发人员的 IRC 频道
Django 拥有非常庞大的开发团队和文档社区。当我们处理编写复杂的后台时,它是一个合适的框架,因为它提供了许多第三方应用程序,可以让您像自动化用户逻辑(注册、身份验证)、异步任务、API 创建、博客等事情。
Web2py
Web2py 很适合快速开发简单的 Web 应用程序或 http 服务器。以下是 Web2py 的一些优点和局限性。
Benefits of Web2py
以下是 Web2py 框架的一些优点 -
-
与 Django 和 Flask 相比,Web2py 在开发速度和简易性方面都是一个潜在的框架。由于 Web2py 使用基于 Python 的模板语言,因此这可以让 Python 开发人员在理解编写模板作为视图的基本知识后立即开始编写代码。
-
Web2py 可以将 Python 编译代码作为优化运行,以缩短运行时间,并允许您以编译方式分发代码。
Limitations of Web2py
以下是该框架的一些限制:
-
Web2py 支持 doctest,但它不支持单元测试。现在 doctest 由于其范围有限而并非最佳选择。
-
没有区分生产模式和开发模式。如果出现异常,将始终生成工单,您将必须导航到该工单来检查错误。在生产服务器的情况下,这可能会有用,但对于开发环境来说会很困难,因为开发人员确实需要立即看到错误,而不是检查工单编号。
-
Web2py 具有一个良好的数据库抽象层 (DAL),它允许您抽象出许多类型的数据库引擎,但它缺乏强大的 ORM。如果您正在处理相对较大的模型,那么您的代码将被所有嵌套定义和属性分散,这会使事情变得复杂。
-
如果没有修改,我们无法使用标准 Python 开发工具,因为 web2py 实际上没有 IDE 支持。
Django 和 Web2py 框架是全栈框架。这意味着它们提供了所需的所有代码 - 从表单生成器到模板布局和表单验证,让您可以根据您的特定需求编写内容。
然而对于 Flask 和 Pyramid 等非栈框架,如果您想创建一个功能齐全的网站,则需要自己添加大量代码和额外位。这需要大量的技能和时间。
Dash
Dash 完全设计用于执行为仪表板构建反应式框架的特定任务。Plotly 的 Dash 是让 Python 开发人员不必学习 Javascript 和前端 Web 开发即可创建交互式 Web 应用程序的绝佳方式。Dash 构建在 Flask、Plotly.js、React 和 React Js 之上。
由于属于不同类别的框架,因此 Dash 与其他框架(如上所述)之间没有可比性。以下是一些在其他交互式仪表盘框架(Jupiter Dashboards、matplotlib 以及其他框架)中更喜欢 Dash 的原因 -
-
只需 50 行代码,您便可以编写一个简单的“Hello World”Dash 应用,因为 Dash 所需的样板非常少。
-
整个 Dash 应用程序都用 Python 语言编写,这是全球最流行的语言。
-
在您自己的 Python 代码中,您可以将 Dash 交互式组件(如下拉列表、文本输入、滑块和图表)与反应式 Dash “回调”绑定在一起。
-
Dash 应用程序中的复杂 UI 可以有多个输入、多个输出以及依赖于其他输入的输入。
-
同时,多个用户可以在 Dash 应用程序上开展工作。
-
为了使用 React 创建自己的 Dash 组件,dash 使用 React.js 来渲染组件并包括一个插件系统。
-
由于 Dash 的图表组件具有交互性,开发人员或编写者可以编写响应图中单击、盘旋或选择点的冲刺应用程序。