【Wolfram语言】36 创建云端应用

36 创建云端应用

词汇表

表达式 说明
CloudPublish[expr] 发布到云端
Delayed[expr] 计算延迟到被请求时执行
FormFunction[form,function] 可部署表单的表示
FormPage[form,function] 包含表单与结果页面的表示

Wolfram 语言可让你轻松地将自己创作的任何内容发布到网络上。

创建地图采用Albers等积圆锥投影:

wl 复制代码
In[]:=GeoGraphics[GeoRange -> All, GeoProjection -> "Albers"]

发布到云端

静态

将其发布到云端:

wl 复制代码
In[]:=CloudPublish[GeoGraphics[GeoRange -> All, GeoProjection -> "Albers"]]

如果你不另行指定,CloudPublish 会在 Wolfram Cloud 中为你创建一个新网页并分配唯一地址。

任何访问该网页的人都会看到你发布的图形。

交互

发布到网络的内容不必是静态图形;

它也可以是交互和动态的。

将交互应用发布到网络:

wl 复制代码
In[]:=CloudPublish[Manipulate[Graphics[Table[Circle[{0, 0}, r], {r, min, max}]], {min, 1, 30, 1}, {max, 1, 30, 1}]]

会得到一个带有活动滑块等控件的网页,可以在任何标准浏览器中使用,但由于需通过网络通信,其运行速度会比本地运行慢一些。

延迟计算

CloudPublish 通常会先执行能做的计算,然后再将结果放到网上。

例如 CloudPublish[Now] 会创建一个在部署时显示当时时间的网页;

wl 复制代码
In[]:=CloudPublish[ClockGauge[Now]]

与上例一样,会返回一个带链接的CloudObject对象,点击在页面中显示一个时钟。

如果再次点击链接,上图不会发生变化。

如果想在每次页面被请求时都返回当前时间,可以使用 CloudPublish[Delayed[Now]]

使用 Delayed 创建每次请求都会重新生成的时钟:

wl 复制代码
In[]:=CloudPublish[Delayed[ClockGauge[Now]]]

每次访问该网页时,Wolfram Cloud 都会重新生成时钟并将新版本放到网页上。

更新间隔

可以通过指定更新间隔来创建"实时仪表盘"。

让网页每 2 秒自动更新一次:

wl 复制代码
In[]:=CloudPublish[Delayed[ClockGauge[Now], UpdateInterval -> 2]]

表单函数

除了网站之外,Wolfram 语言也很容易创建基于表单的 Web 应用。

基本思路是设置一个 FormFunction,定义表单结构以及提交时执行的动作。

例如设置一个带有单个名为 name 的字段(期望输入动物名称),提交后生成该动物图像的表单。

创建带单个输入字段(输入动物名称)的表单应用:

wl 复制代码
In[]:=CloudPublish[FormFunction[{"name" -> "Animal"}, #name["Image"] &]]

访问该地址时你会看到一个表单;

提交表单会得到一张老虎的图片示例。

表单交互

表单还能生成任何内容,例如一个交互的 Manipulate

从表单生成 Manipulate

wl 复制代码
In[]:=CloudPublish[FormFunction[{"name" -> "Animal"}, Manipulate[Rotate[#name["Image"], t], {t, 0, 360 °}] &]]

和老虎示例一样,首先需要输入一个动物,比如猫。

初始 旋转

多字段表单

表单可以包含任意数量的字段。

对于每个字段,使用与 Interpreter 相同的规范来说明接受的输入类型。

发布一个接受两个数字的表单:

wl 复制代码
In[]:=CloudPublish[FormFunction[{"x" -> "Number", "y" -> "Number"}, #x + #y &]]

如果向该表单提供非数字输入,会出现错误提示。

字段类型

字段可以期望字符串(String)、整数(Integer)、日期(Date)或其他上百种类型的输入。

智能字段

当请求"真实世界"类型的输入(如 AnimalCity)时,CloudPublish 会自动为表单创建智能字段,用自然语言理解解释输入。

数字类型

但对于更抽象的类型(如数字),可以选择 NumberSemanticNumberComputedNumber

  • Number 只接受明确的数字,如 71
  • SemanticNumber 也接受自然语言数字,如 seventy-one
  • ComputedNumber 允许需要计算得到的数字,如 20th prime number

允许使用自然语言指定数字:

wl 复制代码
In[]:=CloudPublish[FormFunction[{"x" -> "SemanticNumber", "y" -> "SemanticNumber"}, #x + #y &]]

Seventy-one 可作为语义数字;要找素数则需要计算型数字

如果你指定的输入类型是 Image,表单会提供特殊控件来获取图像------例如在移动设备上直接访问相机或相册。

发布一个用于边缘检测的图像应用:

wl 复制代码
In[]:=CloudPublish[FormFunction[{"photo" -> "Image"}, EdgeDetect[#photo] &]]

在移动设备上,可以直接从相机获取图像。

表单页

FormFunction 可用于创建"一次性"表单:填写、提交并得到结果,若要再得到结果需返回表单再提交。
FormPage 则创建包含表单及结果的页面------类似 Wolfram|Alpha 或搜索引擎。

创建显示城市地图的表单页面:

wl 复制代码
In[]:=CloudPublish[FormPage[{"city" -> "City"}, GeoGraphics[#city] &]]

可以更改字段并再次提交以获得新结果。

总结

Wolfram语言中的Web应用基于表单构建。

  • 表单函数FormFuction和表单页FormPage通过CloudPublish函数发布到云端。
  • FormFuction返回结果会跳转页面,而FormPage不会跳转,结果在当前表单页面中显示。
  • 可以使用规则为表单字段添加数据类型约束。
相关推荐
zmzb010312 小时前
C++课后习题训练记录Day62
开发语言·c++
不要em0啦13 小时前
从0开始学python:简单的练习题4
开发语言·python
我想吃余13 小时前
【C++篇】C++11:线程库
开发语言·c++
小李云雾13 小时前
Python 多任务编程入门:进程的创建、同步与进程池使用
开发语言·数据库·python·oracle
henreash13 小时前
C#调用F#的MailboxProcessor
开发语言·c#
CSDN_RTKLIB13 小时前
【静态初始化与动态初始化】术语对比
开发语言·c++
天上飞的粉红小猪14 小时前
线程同步与互斥
linux·开发语言·c++
未来之窗软件服务14 小时前
幽冥大陆(八十九 ) 自动化在线打包任意平台软件 —东方仙盟练气期
开发语言·c#·自动化·仙盟创梦ide·东方仙盟·在线打包
Rysxt_14 小时前
鸿蒙开发语言ArkTS:全面解析优缺点与未来前景
开发语言·华为·harmonyos