为了账号安全,请及时绑定邮箱和手机立即绑定
4.1 阿里云 AI 开放平台

阿里云 AI (https://ai.aliyun.com) 致力于构建最全面、最开放、最前沿的AI开放平台,从 2015 年开始,阿里云推出 AI 产品,包括语音识别,还有图像识别、视觉识别等 130 多款细分产品,适用于 300 多个场景。阿里云的 AI 解决方案阿里云提供了提供最易用的 API、SDK 等开发组件,助力企业快速高效的实现产品升级。对每项产品提供多种编程接口,包括:Python、Java、C++、ios、Android、Restful 等。以语音合成为例,阿里云 AI 的语音合成 Python SDK 提供了如下接口:SpeechSynthesizer,设置语音合成请求参数,发送语音合成请求。SpeechSynthesizerCallback,用于获取语音合成结果。

3.1 打包为微信小程序

注册微信小程序账号,获取到 AppID,我们后面配置的时候会用到。在 HBuilderX 工具栏,点击发行,选择小程序-微信。输入小程序名称和 AppID,单击发行就可以了。这样我们就会获得一个微信小程序的打包文件,接下来我们来发布微信小程序项目,打开微信小程序开发者工具,导入刚刚生成的微信小程序项目的打包文件,在微信小程序开发者工具中先测试一下,项目运行是否正常,项目测试没有问题后,点击右上角>>按钮,上传代码就可以发布微信小程序了,最后等待微信团队审核通过,别人就可以在线上访问到你的项目了。

3.1 微信小程序 API

uni-app 的 API 与微信小程序 API 基本一致。掌握微信小程序 API 对后面的开发很有帮助。微信小程序 API 文档:https://developers.weixin.qq.com/miniprogram/dev/api/

2. 开发者工具

小程序的开发需要使用小程序主体提供的开发者工具,以 微信小程序 为例,就是要下载 微信开发者工具。也就是说,如果需要开发多个平台下的小程序,那每个平台提供的工具都需要安装一遍。通常开发者工具会使用其预览、调试功能,以及其他的一些生态链工具,如上传、预览代码等,编辑工作会放在自己的编码工具上进行,因为官方提供的编辑器的功能相比其他主流编辑器或者 IDE 还有许多不足。

4.2 微信

1. 独立的页面维护了全局 错误码错误码由5位整数构成2. 每个接口一个独立的 参数说明页面正常情况下出参只返回业务实体异常情况才有 errCode errMsg每个接口下也可能有自己的业务错误码

2.1 什么的原生开发?什么是混合开发?

2.1.1 原生开发原生开发一般是指用原生语言进行开发,原生开发语言就是官方提供的开发语言,比如 IOS 是利用 Objective-C 和 Xcode 进行开发、小程序是用微信小程序原生语言和微信开发者工具进行开发。2.1.2 混合开发混合开发是指开发一个项目应用时,为了提高运行效率或者开发效率,将各种开发技术进行混合应用的开发形式。混合开发将各种开发方式取长补短,虽然比原生开发更难上手,但是架不住开发效率和运行效率的优势,现在比较大型的应用项目都会用混合开发来进行项目开发。uni-app 的混合开发主要是为了实现一些 uni-app 框架无法实现的功能,或者扩展接入一些第三方的 SDK。

4. 模板方法模式

模板方法模式是定义一个操作中的算法的骨架,从而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。通常对于一些重要的复杂方法和多个子类共有的方法且逻辑相同的情况下会使用模板方法模式。比如用户第三方用户认证的时候就比较适合使用模板方法。我们来看一个例子:假设我们现在需要用到微信、微博的第三方用户授权来获取用户的信息。//使用模板方法模式描述获取第三方用户信息的过程 public abstract class Authentication{ public void checkUserAuthentication(){ checkIdentity(); fetchInfo(); } ​ protected abstract void checkIdentity(); protected abstract void fetchInfo(); } ​ //微信用户 public class WechatAuthenication extends Authentication{ @Override protected void checkIdentity() { System.out.println("获得微信用户授权"); } ​ @Override protected void fetchInfo() { System.out.println("获取微信用信息"); } } ​ //微信用户 public class WeiboAuthenication extends Authentication{ @Override protected void checkIdentity() { System.out.println("获得微博用户授权"); } ​ @Override protected void fetchInfo() { System.out.println("获取微博用信息"); } } ​ //调用模板方法 public class Demo{ public static void main(String...s){ Authentication auth = new WechatAuthenication(); auth.checkUserAuthentication(); auth = new WeiboAuthenication(); auth.checkUserAuthentication(); } }输出结果:获得微信用户授权 获取微信用信信息 获得微博用户授权 获取微博用信信息现在我们使用 Lambda 表达式换个角度来思考模板方法模式。如果我们用函数式接口来组织模板方法中的调用过程,相比使用继承来构建要显得灵活的多。//定义一个处理接口,用来处理一项事务,如授权或者获取信息。 public interface Processer{ public void process(); } ​ //封装调用过程 public class Authentication{ private final Processer identity; private final Processer userinfo; public Authentication(Criteria identity,Criteria userinfo){ this.identity = identity; this.userinfo = userinfo; } ​ public void checkUserAuthentication(){ identity.process(); userinfo.process(); } } ​ //使用模板方法 public class Demo{ Authentication auth = new Authentication(()->System.out.println("获得微信用户授权"), ()->System.out.println("获取微信用户信息")); auth.checkUserAuthentication(); auth = new Authentication(()->System.out.println("获得微博用户授权"), ()->System.out.println("获取微博用户信息")); auth.checkUserAuthentication(); }输出结果:获得微信用户授权 获取微信用信信息 获得微博用户授权 获取微博用信信息此时,我们的模板方法得到了大幅的简化,同时通过函数接口让模板方法获得了极大的灵活性。

1.4 向课程表 course 插入数据

因为表 course 有 teacher_id 字段,所以插入数据之前,需要获取 teacher 表数据:SELECT * FROM teacher;执行结果如下图:teacher 表 id 的值如上图所示,对应 course 表 teacher_id,按照上面 id 可插入相关课程信息:INSERT INTO course (course_name,teacher_id) VALUES('高等数学',1),('英语',2),('政治',3),('信息论',4),('数据结构和算法',5),('体育',6),('模拟电路',7),('数字电路',8),('通信原理',9),('信号系统',10),('概率论',13),('光学原理',14);执行结果如下图:

3. 进入官网

如果要下载 Eclipse,我们建议直接去其官网下载。Tips:目前 Eclipse的官网地址是:https://www.eclipse.org/进入官网后,我们会看到页面右上角有一个 Download 的按钮,点击该按钮即可进入下载页面:

2.1 微框架

Flask 是一个 Python 实现的 Web 开发微框架,但是这个“微”并不代表着 Flask 功能比较简陋、有所欠缺。微框架中的 “微” 意味着:Flask 旨在保持核心简单而易于扩展;Flask 不会替用户做出太多决策,比如使用何种数据库;Flask 的选项(比如使用何种模板引擎) 通常有多个,用户很容易替换。默认情况下,Flask 不包含数据库抽象层、模板引擎、身份认证或其它任何已有多种库可以胜任的功能,如下图所示。然而,Flask 支持用扩展来给应用添加这些功能,应用程序可以很方便的集成这些扩展。众多的扩展提供了数据库集成、表单验证、上传处理、各种各样的开放认证技术等功能。

3.1 进入官网

打开官网首页 https://github.com/

2.2 指定线程的入口函数

下面通过一个具体的例子,说明通过指定线程的入口函数的方式使用多线程。import timeimport threadingdef thread_entry(begin, end): for i in range(begin, end): time.sleep(1) print(i)t0 = threading.Thread(target = thread_entry, args = (1, 4))t1 = threading.Thread(target = thread_entry, args = (101, 104))t0.start()t1.start()t0.join()t1.join()在第 9 行和第 10 行,通过调用 Thread 的构造函数创建了两个线程。在第 9 行,设定线程的入口函数为 thread_entry,传递给入口函数两个参数:1 和 4,新的线程将执行 thread_entry(1, 4),变量 t0 指向新创建的线程对象。在第 10 行,设定线程的入口函数为 thread_entry,传递给入口函数两个参数:101 和 104,新的线程将执行 thread_entry(101, 104),变量 t1 指向新创建的线程对象。在第 4 行到第 7 行,定义了线程入口函数,该函数的功能是打印在 [begin, end) 区间的整数,每打印一个整数,调用 time.sleep(1) 睡眠 1 秒钟。在第 11 行,调用 start 方法启动线程 t0,t0 开始执行 thread_entry(1, 4)。在第 12 行,调用 start 方法启动线程 t1,t1 开始执行 thread_entry(101, 104)。在第 13 行和第 14 行,调用 join 方法,等待线程 t0 和 t1 执行完毕。程序的运行结果如下:110121023103线程 t0 的输出结果为 1、2、3,线程 t1 的输出结果为 101、102、103。由于两者是并发执行的,所以结果交织在一起。

5. 小结

本节课程我们主要了解了如何快速入门 uni-app,并了解了 uni-app 的学习路线,后面的课程会根据本节课的学习路线帮助大家快速上手 uni-app。本节课程的需要掌握的重点如下:使用 uni-app 开发需要掌握 Vue.js 语法基础,以及要学会使用官方工具 HBuilder;需要根据开发的具体情况,掌握微信小程序 API、条件编译、ES6、NPM 等技能;需要了解 uni-app 的学习建议以及学习路线,能帮助我们更加快速的入门 uni-app,快速上手开发。

2.2 使用官方工具 HBuilder

使用uni-app 框架,日常开发建议大家直接使用官方工具 HBuilder 创建项目就可以了。官方工具非常好用,各类配置项很方便,可以帮助我们节省很多时间,生成跨平台项目也是用官方工具 HBuilder 直接生成。MAC电脑使用 HBuilder 会有点小 bug,记得要更新成 HBuilderX 版本,X 是 HBuilder 的下一代版本。

2. 教程和官方文档有什么区别?

官方文档中案例较少,而且好多内容对初学者不太友好,官方文档更多的作用是作为手册使用,而不是作为初学者入门学习的资料。举个例子来说就是,我们刚开始学习英语,肯定是先从一年级课本开始学习,而不是一开始就拿着一本牛津字典去学习。

2.2 打开安装器并开始安装

双击打开该安装文件,我们将打开安装器的界面:此时,我们选择需要安装的版本就可以了,这里我们选择第一个 Eclipse IDE for Java Developers。点击后,我们将得到如下信息:其中:Java 虚拟机的路径,目前 Eclipse 需要 JDK 1.8 以上版本的虚拟机;安装的路径;勾选代表创建开始菜单实体;勾选代表创建桌面快捷方式。通常,我们保持默认即可,点击 INSTALL,如果我们的电脑是第一次安装 Eclipse,那么将弹出一个显示协议信息的窗口:我们点击窗口下方的 Accept Now 即可开始进行安装:

新浪微博

咱们打开新浪微博,然后随便找个带皇冠的,按下F12键(Mac用户按command+option+i)然后选中控制台的箭头,再点击皇冠:再点开这个图片可以发现:可以看到那些大 V 图标皇冠图标以及各种微博认证等图标,都是放在了一张雪碧图里(即使再牛的大 V,身份标志也是放在雪碧图中的)。

小程序

小程序是近两年发展非常迅速的一个生态。小程序赖于应用主体,基于这个主体提供的开放能力创建应用,如微信小程序,利用微信提供的能力,向上构建应用,最后将开发好的小程序应用进行上传发布,即可在微信内打开。本篇幅不会介绍如何开发小程序,小程序有非常完善的一套体系,其可以作为相对独立的技能进行学习,主要目的是提示读者可以向小程序方向进阶。

2. 什么是服务监控平台

Hystrix 中的服务监控平台,就是对微服务项目进行监控的平台,包括服务运行的状态、服务有无宕机、服务异常信息监控等内容,为开发者和运维者提供了比较友好地界面支持,开发者和运维者可以直接通过观察服务平台界面,来判断具体微服务的状态信息,从而更好地对微服务进行控制。默认的 Hystrix 中间件已经为我们封装好了微服务监控平台,但是需要通过引入依赖的方式来使用它,接下来就让我们来看一下如何搭建该服务监控平台吧。

4.2 引入本地图片

在 css 中引入本地文件(比如图片、字体)也可以使用相对路径和绝对路径。需要注意的是,有些小程序端 css 文件不允许引用本地文件,这些平台包括微信小程序、QQ小程序、字节跳动小程序、App v2。(1)绝对路径实例:<style> /* 引入图片 */ .imooc-banner { background-image: url(/static/logo.png); background-image: url(@/static/logo.png); }</style>

1. 多开窗口

多开窗口非常简单,可以在 View-> Layout-> Single (Alt+Shift+1)。我们可以看到有很多选项,意味着我们把编辑器分割成最多4个窗口,并且窗口的展示风格也不完全一样。

3.5 开发数据操作接口

开发商品数据接口,代码如下:实例:/** * 商品数据操作接口 */@Repositorypublic interface IGoodsDao extends CrudRepository<GoodsDo, Long> {}解释下,@Repository 将接口标注为数据访问层组件,该接口通过继承 CrudRepository 实现 CRUD 操作。泛型参数分别为实体类及主键的数据类型。注意此时已经可以通过 IGoodsDao 对数据库 goods 表进行增删改查操作了。

4. 行业案例

接口有的是写给小组内部开发人员交流使用的,有的是对外开放给第三方调用的,接口文档是程序之间交互的桥梁。支付宝 / 微信 的接口是开发人员使用度比较广的第三方接口,我们经常会去调用他们的支付,小程序相关的接口,下面着重看看他们的错误码是如何定义的。

4.3 引入字体文件

字体文件的引用路径推荐使用以 ~@ 开头的绝对路径。如果字体文件小于 40kb,uni-app 会自动将其转化为 base64 格式,如果字体文件大于等于 40kb, 需要自己转换为 base64 格式,否则将不会生效。<style> /* 引入字体文件 */ .font { font-family: test-icon; src: url('~@/static/iconfont.ttf'); }</style>需要注意以下几点:@开头的绝对路径以及相对路径会经过 base64 转换规则校验;不支持引用本地图片的平台,小于 40kb,一定会转换为 base64 格式;h5 平台,图片文件小于 4kb 会转 base64,超出 4kb 时不转;图片文件在其余平台不会转 base64。(2)相对路径实例:background-image: url(../../static/logo.png);

3.1 关于微服务监控平台

技巧 1如果我们的微服务监控平台没有任何数据,或者说,在打开微服务平台之后,各参数一直处于 loading 状态,这个时候,我们只需要在服务端调用任意一个服务接口即可,这样在微服务监控平台,我们就能看到被监控实例的参数了。技巧 2如果我们在访问 /actuator/hystrix.stream 路径时,系统找不到对应的路径,即报 404 异常,那么我们需要在对应项目的启动类中添加一个 Bean :@Beanpublic ServletRegistrationBean hystrixMetricsStreamServlet() { ServletRegistrationBean registration = new ServletRegistrationBean(new HystrixMetricsStreamServlet()); registration.addUrlMappings("/hystrix.stream"); return registration;}这样我们就能正常访问 /actuator/hystrix.stream 下的路径了。

1.4 在官方网站下载

Python 的官方网站为 https://www.python.org,下载步骤如下:进入下载页面 https://www.python.org/downloads,有多个版本的 Python 可以下载,其中 Python 2.7.15 为 Python 2 系列,不要下载 Python 2 系列的版本,如下图所示:点击 Python 3.6.6,进入下载 Python 3.6.6 的页面,有多个安装文件可以下载,“Windows x86-64 executable installer” 是 64 位 Python 的安装文件,“Windows x86 executable installer” 是 32 位 Python 的安装文件,请根据你的操作系统位数下载对应的版本,如下图所示:

2.1 微前端

微前端 尚处在发展时期,其核心概念和 微服务 相似。现阶段较为常用的微前端框架为 single-spa 和 qiankun,后者是基于前者实现的。该技术能做到 技术栈无关,即一个应用,能由多个不同技术的子应用构成,同时做到子应用的相互隔离,这里的隔离就可以选择采用 Web Components 实现。

1.前言

ThinkCMF 是一款支持 Swoole 的开源内容管理框架(CMF),它是基于 ThinkPHP 开发的,它一直秉承 ThinkPHP 的大道至简的理念,坚持做最简约的 ThinkPHP 开源软件,多应用化开发方式,让您更快地完成自己的创业项目,用 ThinkCMF 可以开发后台管理系统、企业建站系统、微信小程序开发,、小程序API、cms 等制定化的功能,本小节主要介绍如何使用 ThinkCMF 完成学生的信息管理。1. 1 来到 ThinkCMF官网,如下图所示点击 下载:1.2 在新打开的页面中点击 下载 Source code (zip):Tips: 需要注册登录才能开始下载。1.3 将下载好的文件解压,部署的时候将入口路径配置到 public,如下图所示:1.4 浏览器访问部署好的 ThinkCMF 开始安装:1.5 点击 接受 之后来到安装向导界面:1.6 点击下一步之后开始配置数据库相关的配置:1.7 配置好数据库之后点击 创建数据库:1.8 安装完成之后出现如下图界面表示安装成功:1.9 在浏览器访问 http://xxx.com(域名)/admin开始登录后台:1.10 输入之前安装的时候设置的密码即进入后台管理界面:

5.2 按文档开发后端 API 接口

相比于使用模板引擎,用 Spring Boot 开发后端接口简直太轻松了。通过给控制器添加注解,就能将控制器方法返回值序列化为 JSON 。程序员最爱,就是轻松又愉快。5.2.1 使用 Spring Initializr 创建项目Spring Boot 版本选择 2.2.5 , Group 为 com.imooc , Artifact 为 spring-boot-restful ,生成项目后导入 Eclipse 开发环境。像这种老套的重复操作,我还是拿出来讲讲,为何,因为要继续呵护我们的初学者们。万一有朋友因为一个小地方看不明白,丧失了学习编程的动力,那就是罪过了。5.2.2 引入项目依赖RESTful 项目其实就是标准的 Web 项目,引入 Web 项目依赖即可。实例: <!-- 引入web项目相关依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>5.2.3 创建商品类与商品服务类创建商品类与商品服务类,以完成对商品的增删改查操作。由于本章我们的重点是演示 RESTful 后端接口,所以此处没有操作真实的数据库。实例:/** * 商品类 */public class GoodsDo { /** * 商品id */ private Long id; /** * 商品名称 */ private String name; /** * 商品价格 */ private String price; /** * 商品图片 */ private String pic; //省略get set方法}实例:/** * 商品服务 */@Service // 注册为服务类public class GoodsService { /** * 获取商品列表 */ public List<GoodsDo> getGoodsList() { List<GoodsDo> goodsList = new ArrayList<GoodsDo>(); GoodsDo goods = new GoodsDo(); goods.setId(1L); goods.setName("苹果"); goods.setPic("apple.jpg"); goods.setPrice("3.5"); goodsList.add(goods); return goodsList; } /** * 按id获取商品信息,模拟返回对应商品信息 */ public GoodsDo getGoodsById(Long id) { GoodsDo goods = new GoodsDo(); goods.setId(1L); goods.setName("苹果"); goods.setPic("apple.jpg"); goods.setPrice("3.5"); return goods; } /** * 新增商品,模拟返回数据库影响行数 */ public int addGoods(GoodsDo goods) { return 1; } /** * 根据商品id更新商品信息,模拟返回数据库影响行数 */ public int editGoods(GoodsDo goods) { return 1; } /** * 根据商品id删除对应商品,模拟返回数据库影响行数 */ public int removeGoods(Long id) { return 1; }}Tips: 服务层方法,建议不要使用 select /insert/update /delete 命名,因为服务层处理的逻辑往往不止于关系数据库表的增删改查。此处采用的是 get /add/edit /remove 。5.2.4 根据 API 文档实现控制器方法此处需要解释的地方我都写在注释中了。实例:@RestController // 通过该注解,第一是将GoodsController注册为控制器,可以响应Http请求;第二是可以将控制器中的方法返回值序列化为json格式。public class GoodsController { @Autowired // 自动装配goodsService private GoodsService goodsService; /** * 查询商品信息 * 1、@GetMapping表示可以使用get方法请求该api * 2、"/goods/{id}"表示请求路径为/goods/{id}的形式,其中{id}为占位符 * 3、@PathVariable("id")表示将占位符{id}的值传递给id * 4、也就是说/goods/123请求的话,会将123传递给参数id */ @GetMapping("/goods/{id}") public GoodsDo getOne(@PathVariable("id") long id) { return goodsService.getGoodsById(id); } /** * 查询商品列表,使用get方法 */ @GetMapping("/goods") public List<GoodsDo> getList() { return goodsService.getGoodsList(); } /** * 新增商品 * 1、@PostMapping表示使用post方法 * 2、@RequestBody表示将请求中的json信息转换为GoodsDo类型的对象信息,该转换也是由SpringMVC自动完成的 */ @PostMapping("/goods") public void add(@RequestBody GoodsDo goods) { goodsService.addGoods(goods); } /** * 修改商品 */ @PutMapping("/goods/{id}") public void update(@PathVariable("id") long id, @RequestBody GoodsDo goods) { // 修改指定id的商品信息 goods.setId(id); goodsService.editGoods(goods); } /** * 删除商品 */ @DeleteMapping("/goods/{id}") public void delete(@PathVariable("id") long id) { goodsService.removeGoods(id); }}

2.1 官方下载地址

Android Studio 安装包的官方下载地址是 https://developer.android.google.cn/studio#downloads

首页上一页1234567下一页尾页
直播
查看课程详情
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号