1、必修2信息系统与社会 第二章 信息系统的支撑技术 2.6.3 编写网络应用程序 问题 引入 问题 一 问题 二 问题 三 情境导入 问题引入 返回 问题一 返回 问题二 返回 问题三 返回 Python常见的Web应用框架 Flask FlaskFlask是一个使用是一个使用 Python Python 编写的轻量级编写的轻量级 Web Web 应用框架。其应用框架。其 WSGI WSGI 工具箱采用工具箱采用 Werkzeug Werkzeug ,模板引擎则使用,模板引擎则使用 Jinja2 Jinja2 。FlaskFlask使用使用 BSD BSD 授权。授权。FlaskFlask也被称
2、为也被称为 “microframework” “microframework” ,因为它使用简单的核心,用,因为它使用简单的核心,用 extension extension 增加其他功能。增加其他功能。FlaskFlask 没有默认使用的数据库、窗体验证工具没有默认使用的数据库、窗体验证工具,然而然而FlaskFlask保留了扩增的弹性,可以用保留了扩增的弹性,可以用FlaskFlask- - extensionextension加入这些功能:加入这些功能:ORMORM、窗体验证工具、文件上传、各种开放式身份验证技术。、窗体验证工具、文件上传、各种开放式身份验证技术。 Django Djang
3、oDjango是一个开放源代码的是一个开放源代码的WebWeb应用框架,由应用框架,由PythonPython写成。采用了写成。采用了MTVMTV的框架模式,的框架模式, 即模型即模型M M,模板,模板T T和视图和视图V V。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新 闻内容为主的网站的,即是闻内容为主的网站的,即是CMSCMS(内容管理系统)软件。并于(内容管理系统)软件。并于20052005年年7 7月在月在BSDBSD许可证下许可证下 发布。这套框架是以比利时的吉普赛爵士吉他手发布。这套框架是以比利时的吉普赛爵士吉他手Dj
4、ango ReinhardtDjango Reinhardt来命名的。来命名的。Django Django 框架的核心组件有:框架的核心组件有:1 1、用于创建模型的对象关系映射用于创建模型的对象关系映射;2 2、为最终用户设计的完美管理为最终用户设计的完美管理 界面界面;3 3、一流的一流的 URL URL 设计设计;4 4、设计者友好的模板语言设计者友好的模板语言;5 5、缓存系统。缓存系统。 Tronado TornadoTornado是一种是一种 Web Web 服务器软件的开源版本。服务器软件的开源版本。Tornado Tornado 和现在的主流和现在的主流 Web Web 服务器
5、服务器 框架(包括大多数框架(包括大多数 Python Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度的框架)有着明显的区别:它是非阻塞式服务器,而且速度 相当快。得利于其非阻塞的方式和对相当快。得利于其非阻塞的方式和对epollepoll的运用,的运用,Tornado Tornado 每秒可以处理数以千计的每秒可以处理数以千计的 连接,因此连接,因此 Tornado Tornado 是实时是实时 Web Web 服务的一个理想框架。服务的一个理想框架。 Web应用程序编写流程 from flask import Flask app = Flask(_name_) app.
6、route(/) def index(): return 我的第一个Web程序! if _name_ = _main_: app.run() URL、路由和视图函数关联图 Web应用实例 from flask import Flask app = Flask(_name_) app.route(/) def index(): return 我的第一个Web程序! if _name_ = _main_: app.run() 实践体验 单机版聊天机器人对话能力的实现通过导入 aiml模块来解决。AIML(Artificial Intelligence Markup Language)即人工智能标记
7、语言,本模 块由Richard.Wallace发明。目前AIML已经有了 Java、Python、C 、C#及Pascal等语言的版本。 任务:小组合作(2人一组),网上搜索AIML 相关内容,初步了解AIML的作用及实现方法,搜 索在Python中可以使用的AIML库,了解其应用的 方法,并最终以PPT的形式进行汇报。最后完成如 下的“单机版联天机器人”的代码示例。 实例代码 import sys sys.path.insert(0, ./) import aiml k = aiml.Kernel() k.learn(cn-startup.xml) k.respond(load aiml c
8、n) k.respond(start) while True: print(k.respond(input() 实践体验 网络应用的信息输入可以通过表单(Form)实 现。表单在网页中用于搜集丌同类型的用户输入,要 在Flask Web应用程序中使用表单则必须导入 flask_wtf扩展的FlaskForm模块。同时为了使代码 更加精简,可以使用网页模板,则需导入Flask的 render_template模块。 任务:让学生实践完成“网页表单”的实现代码 ,并在此代码基础上提出自己的改进方案(如:界 面布局改变、输入内容形式改变戒界面美化等)。 选择1-2个小组介绍自己的成果,进行点评。 网
9、页表单 from flask import Flask, render_template from flask_wtf import FlaskForm from flask_bootstrap import Bootstrap from wtforms import StringField,SubmitField from wtforms.validators import DataRequired app = Flask(_name_) app.configSECRET_KEY=xxx_ssss_1276589 bootstrap = Bootstrap(app) class NameFo
10、rm(FlaskForm): name = StringField(你的姓名?, validators=DataRequired() submit = SubmitField(提交) app.route(/, methods=GET, POST) def index(): sname = myform = NameForm() if myform.validate_on_submit(): sname = myform.name.data myform.name.data = return render_template(showwtfm.html, form=myform, name=sna
11、me) if _name_ = _main_: app.run() 模板 快速窗体 % import bootstrap/wtf.html as wtf % 你好,% if name %name% else %世界% endif %! wtf.quick_form(form) 实践体验 网络版 将表单输入与将表单输入与AIML库实现在机器人代库实现在机器人代 码整合,最终实现码整合,最终实现“网络聊天机器人网络聊天机器人”。它是。它是 使用表单收集用户的聊天语句提交至使用表单收集用户的聊天语句提交至Web 服务器,然后由服务器,然后由Web服务器中的服务器中的aiml调用调用 respond接
12、口处理这些语句,最后将接口处理这些语句,最后将aiml机机 器人的回复(即处理结果)发送至访问者的器人的回复(即处理结果)发送至访问者的 浏览器并输出。浏览器并输出。 任务:让学生实践完成任务:让学生实践完成“网络聊天机器网络聊天机器 人人”的实现代码。的实现代码。 实践体验 from flask import Flask, render_template from flask_script import Server, Manager from flask_bootstrap import Bootstrap from flask_moment import Moment from flas
13、k_wtf import FlaskForm from wtforms import StringField, SubmitField from wtforms.validators import DataRequired import sys sys.path.insert(0, ./) import aiml k = aiml.Kernel() k.learn(cn-startup.xml) k.respond(load aiml cn) k.respond(start) app = Flask(_name_) app.configSECRET_KEY = hard to guess st
14、ring 实践体验 manager = Manager(app) server = Server(host=127.0.0.1, port=80, threaded=True) manager.add_command(runserver, server) bootstrap = Bootstrap(app) moment = Moment(app) class NameForm(FlaskForm): name = StringField(请开始交谈:, validators=DataRequired() submit = SubmitField(提交) app.route(/, method
15、s=GET, POST) def index(): name = form = NameForm() if form.validate_on_submit(): name = form.name.data form.name.data = return render_template(index.html, form=form, name=k.respond(name) if _name_ = _main_: manager.run() 实践体验 % extends bootstrap/base.html % % block title %Flasky% endblock % % block
16、head % super() % endblock % % block navbar % Toggle navigation 机器人重启 % endblock % base.html 实践体验 % block content % % block page_content % endblock % % endblock % % block scripts % super() moment.include_moment() % endblock % % extends base.html % % import bootstrap/wtf.html as wtf % % block title %聊
17、天机器人% endblock % % block page_content % :% if name % name % else %请说话.% endif % wtf.quick_form(form) % endblock % index.html Web应用框架: Flask、Django、Tronado AIML库、Form 课堂小结 学习评价 对自己和同伴的表现进行客观的评价,并思考后续完善 的方向。(5=优秀,4=超出一般水平,3=满意,2=有 待改进,1=不太理想) 评分项评分项 自我评价自我评价 同学互评同学互评 能完成能完成“例例1”1”的代码编写并完的代码编写并完 成相应的结果
18、呈现成相应的结果呈现 5 4 3 2 15 4 3 2 1 5 4 3 2 15 4 3 2 1 能能完成完成“单机版聊天机器人单机版聊天机器人”代代 码编写并完成相应的结果呈现码编写并完成相应的结果呈现 5 4 3 2 15 4 3 2 1 5 4 3 2 15 4 3 2 1 能能完成完成“网页表单网页表单”的并完成相的并完成相 应的结果呈现应的结果呈现 5 4 3 2 15 4 3 2 1 5 4 3 2 15 4 3 2 1 能完成能完成“网络聊天机器人网络聊天机器人”代码代码 编写并完成相应的结果呈现编写并完成相应的结果呈现 5 4 3 2 15 4 3 2 1 5 4 3 2 15
19、 4 3 2 1 作业 1.1.(开放题)某数据加密方法描述如下:(开放题)某数据加密方法描述如下: (1)(1)以字节为单位进行加密处理;以字节为单位进行加密处理; (2)(2)将将1 1个字节的个字节的8 8位二进制数分割成前位二进制数分割成前4 4位与后位与后4 4位两个二进制数;位两个二进制数; (3)(3)分别将上述两个分别将上述两个4 4位二进制数转换为十进制数;位二进制数转换为十进制数; (4)(4)将每个十进制数转换为将每个十进制数转换为1 1个加密字符,对应的“密码表”如下:个加密字符,对应的“密码表”如下: 值值( (十进制十进制 ) ) 0 0 1 1 2 2 3 3 4
20、 4 5 5 6 6 7 7 8 8 9 9 1010 1111 1212 1313 1414 1515 加密字符加密字符 I I l l i i k k e e C C H H N N P P 0 0 s s t t c c a a r r d d 请设计了一个字符串(仅包含请设计了一个字符串(仅包含ASCIIASCII字符)加密的程序,功能如下字符)加密的程序,功能如下: :程序依次将程序依次将 文本框中每个字符的文本框中每个字符的ASCIIASCII码值作为码值作为1 1个字节转换为两个加密字符,连接这些加密个字节转换为两个加密字符,连接这些加密 字符,最后在页中输出加密结果。下表显示了字符串中一个字符的加密过程:字符,最后在页中输出加密结果。下表显示了字符串中一个字符的加密过程: m m 转换前字符转换前字符m m 109109 字符字符m m的的ASCIIASCII码十进制值码十进制值 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 对应的二进制数对应的二进制数 6 6 1313 分割、转换后的十进制数分割、转换后的十进制数 H H a a 对应的加密字符对应的加密字符 谢谢观看