版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
人工智能技术开发框架计算机与软件学院第二章FlaskWEB应用开发01AI应用开发概述02人工智能发展历史03数据处理与分析工具04机器学习框架Scikit-Learn05深度学习框架Tensorflow202FlaskWEB应用开发WEB工作原理Web(WorldWideWeb)即全球广域网,也称为万维网,工作原理是:当你请求一个网络资源的时候,应该在浏览器上输入所要访问网页的统一资源定位符(UniformResourceLocator,URL),当然,也可以通过超链接方式链接定位到要请求的那个网页或静/动态资源。之后是对URL根据分布于全球的因特网域名解析系统的数据库进行查询解析,并根据解析结果决定访问哪一个IP地址对应的服务器。接下来是向对应的Web服务器发出一个HTTP请求,相应的Web服务器接收HTTP请求后,调用相应的Web应用处理请求,然后Web服务器再将响应结果(响应结果指的是图片、超文本标记语言,即HTML、JavaScript和视频等资源)返回给客户端浏览器。URL简介通常的URL一般由传输协议名、资源所在的主机名或IP地址、网络服务程序的端口号和(目录)文件名等几个部分组成,即:URL=传输协议+主机名+端口号+(目录)文件名传输协议一般是http(HyperTextTransferProtocol,超文本传输协议)或https(HyperTextTransferProtocoloverSecureSocketLayer,安全套接字层超文本传输协议)主机名这里主要指服务(www)+域名(如:)端口号是可选的,没有给出的话,默认端口一般是指80号端口(http协议使用的80端口,https协议使用的443端口)目录的出现是在网站结构复杂时,某些资源会放到某个目录下或若干个目录下,这样就构成了文件的路径。文件名精确地指定了要访问的Web页面。未指定文件名时,处理请求的Web服务器会根据服务器本身的设置查找出默认的文件,如index.html、default.jsp等:80:443CDN简介腾讯-深圳(1万部电影)用户1(北京)网络用户2(北京)用户1(南京)用户2(南京)CDN(南京)CDN(北京)Flask安装用pip安装Flask:pipinstallflaskFlask默认自带了一个轻量级的WEBServer,无需用户单独安装简单Flask程序示例所有的Flask程序都必须创建一个程序实例。Web服务器使用一种名为Web服务器网关接口(WebServerGatewayInterface,WSGI)的协议,把接收自客户端的所有请求都转给这个对象进行处理。程序实例是Flask类的对象,经常使用下述代码创建:路由和视图函数的绑定,使用@符号配置路由:@app.route('/')defhello_world():return'HelloWorld!‘这里的hello_world()函数叫做视图函数,视图函数必须要有返回值,返回价值为字符串或简单的HTML页面等内容。#创建程序实例fromflaskimportFlaskapp=Flask(__name__)#启动程序if__name__=='__main__':
#指定默认主机为是,port为8888
app.run(debug=True,host='',port=8888)URL参数传递Flask中如果要传递一个变量或者一个参数,可以通过表单和地址栏两种方式来传递。其中,通过浏览器地址栏URL方式传递/获取某个变量或参数使用得比较多。这样可以使用相同的URL指定不同的参数来访问不同的内容Flask通过URL传递参数,传递参数的语法是:'/<参数名>/'。需要注意两点:参数需要放在一对<>(尖括号)内;视图函数中需要设置同URL中相同的参数名示例代码:@app.route("/user/<name>")defvisitByName(name):return"接收到的名称为:%s"%nameURL反转有时候在作网页重定向或是模板文件时需要使用在视图函数中定义的URL,我们必须根据视图函数名称得到当前所指向的URL,这就是URL反转。使用URL反转,用到了url_for()函数,需要使用fromflaskimporturl_for导入,url_for()函数最简单的用法是以视图函数名作为参数,返回对应的URL页面跳转和重定向用户在访问某个页面的时候,我们希望他登录后才能访问该页面,如果此时他没有登录,系统就让浏览器由当前页面跳转到登录页面,这里就涉及页面重定向问题。所谓页面重定向,就是用户在打开某个页面的时候,我们期望页面跳转到另一个指定的页面,让用户完成某种操作或执行某个动作。Flask中提供了重定向函数redirect(),该函数的功能就是跳转到指定的URL重定向是将原本的URL重新定向成为一个新的URL,可以实现页面的跳转。Flask中使用到了redirect()函数,需要使用fromflaskimportredirect将其导入才能使用页面跳转和重定向浏览器服务器:5000/Index()/user_login:5000/user_loginUser_login()这是用户登录页面Jinja2模板引擎在Flask中通常使用Jinja2模板引擎来实现复杂的页面渲染。Jinja2被认为是灵活、快速和安全的模板引擎技术,被广泛使用随着不同终端(个人PC、平板电脑,手机、移动穿戴设备等)的兴起,开发人员在越来越多地思考:如何写一份功能代码(业务逻辑代码),这份业务逻辑代码能够在响应式或非响应式设备上都能使用。为了提升开发效率,开发人员开始高度重视前后端的分离,后端负责业务逻辑/数据访问,前端负责表现、交互逻辑,同一份业务逻辑代码可应用于多个不同终端的视图渲染后端实际上实现的功能一般叫做业务逻辑,前端完成的功能一般叫做表现逻辑。如果把业务逻辑和表现逻辑混在一起,势必造成系统耦合度高、代码维护困难的现象,因此分离业务逻辑和表现逻辑,把表现逻辑交给视图引擎,即网页模板模板实质上是一个静态的包含HTML语法的全部或片段的文本文件,也可包含由变量表示的动态部分。使用真实值替换网页模板中的变量,生成对应数据的HTML片段,这一过程称为渲染。Flask提供了Jinja2模板引擎来渲染模板,模板文件保存在templates目录中渲染模板Flask通过render_template()函数来实现模板的渲染。要使用Jinja2模板引擎,需要使用fromflaskimportrender_template命令导入render_template函数。在视图函数的return方法中,render_template()函数的首个参数声明使用哪一个模板文件。向模板中传递参数(1)Flask提供Jinja2模板引擎来渲染模板的同时,还可以将程序中的参数或变量值传递给指定的模板进行渲染render_template()函数第一个参数是指定模板文件的名称,比如这里的index.html和user.html,第二个参数为可选项,可以为空。第二个参数不为空时,一般用于向模板中传递变量同时在模板中接收变量值,需要把变量放在{{}},比如{{var1}}等向模板中传递参数(2)如果视图函数中有多个变量值都需要传递给模板,可以使用**locals()方法在模块中可以直接使用变量名来获取参数值,如:{{title}}和{{author}}来直接使用变量if语句(1)在Jinja2模板引擎中可以使用if和for循环控制语句,控制模板渲染的方向。模板引擎中,if和for语句中应该放到{%%}中在前端的Jinja2语法中,if可以进行判断:是否存在参数,存在的参数是否满足条件基本语法如下:{%ifcondition%}<!--condition指的是条件-->{%else%}<!--条件不满足时-->{%endif%}<!--结束if语句-->if语句(2)if…elif…else…endif语法结构:{%ifcondition1%}<!–condition1指的是条件1-->{%elifconditio2%}<!–condition2指的是条件2-->{%else%}<!--条件不满足时-->{%endif%}<!--结束if语句-->for语句(1)模板中的for语句定义如下:{%for目标in对象%}<p>目标</p>{%endfor%}注意:不可以使用continue和break表达式来控制循环的执行。for语句(2)使用**locals()传递参数的例子过滤器与字符串操作相关的过滤器对列表进行操作相关的过滤器对数值进行操作相关的过滤器
过滤器本质上是一个转换函数,有时候不仅需要输出变量的值,还需要把某个变量的值修改后再显示出来,而在模板中不能直接调用Python中的某些方法,这时就用到了过滤器。与字符串操作相关的过滤器<p>{{name|default('None',true)}</p> name为变量名,如果name为空,则用None替换name<p>{{'hello'|capitalize}}</p> 将字符串hello转化成Hello,实现首字母大写的目的<p>{{'HELLO'|lowere}}</p> 将字符HELLO全部转为小写<p>{{'hello'|replace('h','x')}}</p> 将hello中的字母h替换成x对列表进行操作相关的过滤器<p>{{[01,80,42,44,77]|first}}</p> 取得列表中的首个元素01<p>{{[01,80,42,44,77]|last}}</p> 取得列表中的最后一个元素77<p>{{[01,80,42,44,77]|count}}</p> 取得列表中的元素个素,个数为5,count也可以使用length替换<p>{{[01,80,42,44,77]|sort}}</p> 列表中的元素重新排序,默认按照升序进行排序<p>{{[01,80,42,44,77]|join(','}}</p> 将列表中的元素合并为字符串,返回1,80,42,44,77对数值进行操作相关的过滤器<p>{{18.8888|round}}</p>四舍五入取得整数,返回19.0<p>{{18.8888|round(2,’floor’)}}</p>保留小数点后2位,返回结果为18.88<p>{{-2|abs}}</p>求绝对值运算,返回结果为2宏的使用宏的定义宏的导入include的使用宏的定义jinja2中的宏功能类似于传统程序语言中的函数,它跟Python中的函数类似,可以传递参数,但是不能有返回值,可以将一些经常用到的代码片段放到宏中,然后把一些不固定的值抽取出来作为一个变量宏(Macro)有声明和调用两个部分:<!--定义宏-->{%macroinput(name,type='text',value='')-%} <inputtype="{{type}}"name="{{name}}"value="{{value|e}}">{%-endmacro%}上面的代码定义了一个宏,定义宏要加macro,宏定义结束要加endmacro标志。上面宏定义的名称是input,它有3个参数,分别是name、type和value,value参数有默认值。<!--调用宏-->{{input('username')}}{{input('password',type='password')}}宏的使用:举例{#宏的定义#}{%macroinput(name,type='text',value='')-%}<inputtype="{{type}}"name="{{name}}"value="{{value|e}}">{%-endmacro%}{#宏的使用#}<p>用户名:{{input('username')}}</p><p>密码:{{input('password',type='password')}}</p><p>登录:{{input('submit',type='submit',value='登录')}}</p>执行网页后,生成对应的代码如下:<p>用户名:<inputtype="text"name="username"value=""></p><p>密码:<inputtype="password"name="password"value=""></p><p>登录:<inputtype="submit"name="submit"value="登录"></p>宏的导入一个宏可以被不同的模板使用,建议将其声明在一个单独的模板文件中。需要使用时导入即可,而导入的方法类似于Python中的importinclude的使用在宏文件中引用其他宏,可以使用include语句。include语句可以把一个模板引入到另外一个模板中,类似于把一个模板的代码复制到另外一个模板的指定位置注意:使用include标签时是在templates目录中寻找相应的文件,不能使用相对路径set语句和with语句set与with语句都可以在Jinja2中定义变量并赋予值。set定义的变量在整个模板范围内都有效,with关键字在定义变量并赋值的同时,限制了with定义变量的作用范围。set关键字的使用方法:(1)给变量赋值:{%settelephone='1388888888'%}(2)给列表或数组赋值:{%setnav=[('index.html','index'),('product.html','product)]%}可以在模板中使用{{telephone}}和{{nav}}来引用这些定义的变量。with关键字的使用方法:{%withpass=60%}{{pass}}{%endwith%}with定义的变量的作用范围在{%with%}和{%endwith%}代码块内,在模板的其他地方,引用此变量值无效。静态文件加载静态文件的加载一般需要先新建文件夹static,在文件夹下再新建css、js和images文件夹,在这些文件夹中存放css、js、images文件,同时要需要使用‘url_for’函数。这里仅以加载图片文件为例说明静态文件的加载模板的继承一个系统网站往往需要统一的结构,这样看起来比较“整洁”。比如,一个页面中都有标题、内容显示、底部等几个部分。如果在每一个网页中都进行这几部分的编写,那么整个网站将会有很多冗余部分,而且编写的网页程序也不美观。这时可以采用模板继承,即将相同的部分提取出来,形成一个base.html,具有这些相同部分的网页通过继承base.html来得到对应的模块。模板的继承语法: {%extends“模板名称”%}块的概念:模板继承包含基本模板和子模板。其中,基本模板里包含了网站里基本元素的基本骨架,但是里面有一些空的或不完善的块(block)需要用子模板来填充。使用方法如下:
在父模板中:…{%blockblock的名称%}{%endblock%}…
在子模板中:…{%blockblock的名称%}子模板中代码{%endblock%}…视图高级技术:路由路由的概念:在Flask应用中,路由是指用户请求的URL与视图函数之间的映射,处理URL和函数之间关系的程序称为路由。Flask框架根据HTTP请求的URL在路由表中匹配预定义的URL规则,找到对应的视图函数,并将视图函数的执行结果返回给服务器路由视图函数的绑定在Flask框架中,默认是使用@app.route装饰器将视图函数和URL绑定,例如:@app.route('/')defhello_world():retrun‘helloworld’上述代码中,视图函数为hello_world(),使用app.route装饰器将URL和执行的视图函数的关系保存到app.url_map属性上。上述代码实现了将URL'/'与视图函数hello_world()的绑定,可以通过url_for('hello_world')反转得到URL'/',实际上可以给这个装饰器再加上endpoint参数(给这个URL命名)。@app.route('/',endpoint='index')defhello_world():return‘helloworld’注意:一旦使用了endpoint参数,在使用url_for()反转时就不能使用视图函数名了,而是要用自定义的URL名,如:url_for(‘index’),而不是url_for('hello_world')除了使用@app.route装饰器,我们还可以使用add_url_rule来绑定视图函数和URL数据交互表单处理文件上传表单处理:简单的表单处理表单是搜集用户数据信息的各种表单元素的集合区域,它的作用是实现用户和服务器的数据交互。通过表单搜集客户端输入的数据信息,然后提交到网站服务器端进行处理。Form表单是Web应用中最基础的一部分,为了能处理Form表单,Flask-WTF扩展提供了良好的支持在上面的案例中,对表单没有进行必要的保护措施,很容易被人利用,控制用户在当前已登录的Web应用程序上执行非本意的操作,如跨站请求伪造(CSRF,Cross-siterequestforgery)。因此,在实际部署服务器上的代码时,不建议使用这个方式处理表单,推荐使用Flask-WTF方式进行表单处理(请同学们自学)文件上传Flask文件上传有3点要求:一个<form>标签被标记有enctype=multipart/form-data,并且在里面包含一个<inputtype=file>标签服务端应用通过请求对象上的files字典访问文件使用文件的save()方法将文件永久地保存在文件系统上的某处注意:表单中必须要有enctype=“multipart/form-data”,否则上传文件无效。一般可以写成:<formaction="“method="post“enctype="multipart/form-data">实现一个上传和保存文件的WEB应用实战案例第二章课后作业(1)习题1:请参考如下代码,实现URL反转功能
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度绿色餐饮采购标准合同3篇
- 二零二五年度冷链物流仓储管理服务合同2篇
- 2025年度苗木种植基地土地租赁合同样本(含品牌授权)
- 2025年度飞行员劳动合同(含飞行业绩奖励)4篇
- 中医师专属2024聘用协议模板版B版
- 个性化全新承诺协议文档(2024版)版B版
- 二零二五年度出租车公司股权置换及运营权转让协议3篇
- 2025年度个人商铺租赁税费代缴及财务结算合同4篇
- 二零二五年度农民合作社加盟社员入社合同范本
- 个人宠物寄养服务2024年度合同
- 皮肤内科过敏反应病例分析
- 电影《狮子王》的视听语言解析
- 妊娠合并低钾血症护理查房
- 煤矿反三违培训课件
- 向流程设计要效率
- 2024年中国航空发动机集团招聘笔试参考题库含答案解析
- 当代中外公司治理典型案例剖析(中科院研究生课件)
- 动力管道设计手册-第2版
- 2022年重庆市中考物理试卷A卷(附答案)
- Python绘图库Turtle详解(含丰富示例)
- 煤矿机电设备检修技术规范完整版
评论
0/150
提交评论