Flask程序的基本结构

了解flask程序的基本结构,完成第一个flask程序的运行
所有的flask程序都需要一个实例程序,web服务器使用了一种名为web服务器网关接口(WGSI)的协议,把接收客户端的请求都交给这个实例去处理
from flask import Flask
app=Flask(__name__)
构造函数里面只有一个必须选用的参数的名字是主模块或者包的名字,一般情况下,__name__这个就是其所需要的值,其实就是为了查找其根目录,目的就是寻找根目录之下的资源文件的位置,以后会有更复杂的初始化方式
路由和视图函数
首先客户端(比如浏览器)将请求发给服务器,服务器将请求发给flask实例之后就需要知道对那些URL请求哪些代码,这个时候就会有一个URL到python函数的一个映射关系程序,我们就该程序讲其称为路由
在flask程序中使用路由最简单的方法就是使用实例提供的app.route修饰器,把修饰的函数注册为路由
@app.route(‘/‘)
def index():
return ‘<h1>Hello World!</h1>‘
上面那个就是定义了根地址的处理程序,比如服务器的域名叫做www.example.com,那么你访问http://www.example.com就会访问这个index方法,返回值就是响应,就如你搜索的时候看到的东西,像index这种函数我们就叫做视图函数,返回的值就是表单或者html代码
就像之前的Java Web中的一样,镶嵌字符串会导致代码难以维护
就比如说一些动态的URL,比如说你的个人登录的欢迎页面,这个时候也是可以用路由来进行定义的
@app.route(‘/user/<name>‘)
def index(name):
return ‘<h1>Hello {0}!</h1>‘.format(name)
之后任何能匹配到前面的静态地址都会访问这个函数,从而生成个人的欢迎页面,动态部分除了使用默认的字符串之外的话还有就是可以进行类型的定义,比如说int,float,path(也是字符串,只不过把斜线不当做分隔符,当初字符串的一部分),只支持这三种
@app.route(‘/user/<int:id>‘)就会只匹配整数的动态URL
启动服务器
if __name__==‘__main__‘:
app.run(debug=True)
这个__name__=‘__miain__‘就表示只有这个脚本执行的时候才会去启动这个服务器,如果是其他脚本引入的,就不会执行这个
会一直执行,一直到ctrl+C停止,debug=True的作用就是可以重载程序或者是启用调试服务器
一个完整的程序
记得先要把虚拟环境激活以及安装好flask框架
虽然说PyCharm也可以进行Git的傻瓜式操作,暂时最好不要用那个,还是直接用Git命令比较好
运行http://127.0.0.1:5000,这个时候会显示404,之后你再开始运行这个py文件之后就可以显示正常的画面了

from flask import Flask
app=Flask(__name__)
@app.route(‘/‘)
def index():
return ‘<h1>Hello,World!</h1>‘
@app.route(‘/user/<name>‘) #动态路由,这个user可以随便改的,并且不需要重新运行该python文件就可以直接用了
def user(name):
return ‘<h1>Hello {0}</h1>‘.format(name)
if __name__==‘__main__‘:
app.run(debug=True)
看到上面那个图,每次的请求都会有一个响应,后来换成ss的时候就会重新启动一次,就相当于是一个请求响应的循环
请求响应循环
现在就来介绍一下这个框架的设计概念
程序和请求的上下文
首先在客户端输入网址之后要想获得自己想要的结果就必须记得要把请求的对象(封装http请求的对象)传到视图函数中,如果使用参数的话就会让视图函数变得很杂乱无章,这就需要有一个上下文将其变为全局可以访问
from flask import request
@app.route(‘/‘)
def index():
user_agent=request.headers.get(‘User-Agent‘)
return ‘<p>Your Browser is {0}</p>‘.format(user_agent)
<p>表示是段落标签的意思,其实request不可能是一个全局变量,因为之后就会使用多线程服务器的时候一个线程去处理客户端发送的不同的请求,这个时候每个线程看到的request变量都会不一样,就需要说在一个线程当中这个上下文就需要全局可访问,这个时候就不会影响到其他的线程
这个之后就是一个线程池里面取出线程
Flask有两种上下文:程序上下文以及请求上下文

使用这些变量的时候需要就是提前激活(推送)这些上下文,程序上下文被推送的时候就可以使用那两个变量,请求上下文被推送的时候就可以使用下面的两个变量,请求完成之后就可以将其删除,看下面就可以知道不推送的时候就会报错

请求调度
Flask会用app.route()或者app.add_url_rule()来生成URL映射

第二个是falsk自己加的一个特殊的路由,用于访问静态的文件,那三个都是请求方法,当然这个都用的是GET,其他两个是由flask自己进行处理的
请求钩子

响应
@app.route(‘/404‘)
def FOF():
return ‘<h2>Bad Request</h2>‘,404

就比如说这个时候就会显示404,后面加个逗号继续就表示需要返回不同的响应码
@app.route(‘/‘)
def index():
response=make_response(‘<h1>take a cookie</h1>‘)
response.set_cookie(‘answer‘,‘42‘)
return response
还有一种比较常用的响应就是重定向,一般都是用302
from flask import redirect
@app.route(‘/‘)
def index():
return redirect(‘http://www.baidu.com‘)

并且这个重定向就是客户端的跳转,所以说里面的网址都会跳转
Flask扩展
Flask设计成可以扩展的形式,比如说数据库以及用户认证并没有提供这样的功能,社区人员开发了很多不同用途的扩展,如果还不能满足需求的话就可以用一些标准包以及一些代码库,下面就演示一个怎么将其扩展整合到程序中的实例
使用Flask-Script支持命令行选项
Flask web服务器支持很多的启动设置的选项,但是只能在app.run()里面去设置才行,很不方便,其实最好的方式就应该是直接在命令行中去实现
Flask-Script是一个Flask扩展,为Flask程序添加了一个命令行的解析器,可以用匹配pip install flask-script
一定要记得更换这个解释器,不然的话就会你安装了一些东西之后发现不起作用

from flask_script import Manager
manager=Manager(app)
if __name__==‘__main__‘:
manager.run()
看的书上介绍是在from flask.ext.script import Manager里面,但是自己实际上去弄的时候是在flask_script里面的,专门为Flask扩展的都在flask.ext里面(但是自己实际上实现并不是这样)
上面的那个扩展也适用于很多扩展,就是将程序实例弄进构造函数中,创建的对象就可以在各个扩展中进行使用,用manager.run()启动之后就可以开始解析命令行了

原文地址:https://www.cnblogs.com/zpfXdd/p/8280445.html

时间: 2024-10-14 17:57:56

Flask程序的基本结构的相关文章

Flask学习之一——程序的基本结构

1. 初始化 所有flask程序都必须创建一个程序实例(application instance) from flask import Flask app = Flask(__name__) 2. 路由和视图函数 处理URL和函数之间关系的程序称为路由.在Flask中定义定义路由最简单的方式,是使用程序实例提供的app.route修饰器,把修饰的函数注册为路由. @app.route('/') def index(): return '<h1>Hello World!</h1>'

基于Python的Flask的开发实战(第二节程序的基本结构)

1.初始化 所有的flask程序都必须创建一个程序实例 web服务器使用wsgi接口协议,把接收客户端的请求都转发给这个程序实例来进行处理.这个程序实例就是flask对象 from flask import Flask app = Flask(__name__)#__name__决定程序的根目录,以便以后能找到相对于程序根目录的资源文件位置 2.路由和视图函数 程序实例需要知道接收请求后,需要知道url请求应该运行哪些代码.所以保存了一个url和python函数的映射关系:这个映射关系就叫做路由

flask框架的教程--程序的基本结构[二]

一个简单的程序 from flask import Flask # 实例化app 对象 app = Flask(__name__) @app.route('/') def index(): return "<h1>hello Gaidy</h1>" if __name__ == '__main__': app.run() 运行结 程序和请求上下文 为了避免大量可有可无的参数把视图函数弄得一团糟,Flask 使用上下文临时把某些对象 变为全局可访问.Falsk 使

【黑马程序员】————结构体

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.什么是结构体 数组:只能由多个相同类型的数据构成 结构体:可以由多个不同类型的数据构成 二.结构体的定义 1.定义形式 结构体内部的元素,也就是组成成分,我们一般称为"成员". 结构体的一般定义形式为: 1 struct 结构体名{ //struct是关键字,是结构体类型的标志 2 3 类型名1 成员名1; 4 5 类型名2 成员名2; 6 7 …… 8 9 类型名n 成员名n;

一个简单的flask程序

初始化 所有Flask程序都必须创建一个程序实例. 程序实例是Flask类的对象,经常使用下述代码创建: from flask import Flask app = Flask(__name__) Flask类的构造函数只有一个必须指定的参数,及程序主模块或包的名字. 在大多数程序中,Python的__name__变量就是所需的值. 路由和视图函数 客户端把请求发送给Web服务器,Web服务器再把请求发送给Flask程序实例. 程序实例需要知道对每个URL请求运行哪些代码,所以保存了一个URL到

flask (一) 一个完成的Flask程序

from flask import Flask app = Flask(__name) @app.route('/') def index(): return '<h1>Hello World!</h1> if __name__ == '__main__': app.run(debug = True) 然后在命令行中 执行 pyhont hello.py 在浏览器中输入 127.0.0.1:5000/ 就可以看到helloworld的字样了 代码分析 第一行 导入flask模块 第

Flask从入门到精通之flask程序入门

初始化 所有Flask程序都必须创建一个程序实例,Web服务器使用一种名为Web服务器网关接口的的协议(WSGI),把接收自客户端的所有请求转发给这个对象处理.程序实例是Flask类的对象,使用下面代码构建 from flask import Flask app = FLask(__name__) Flask类的构造函数只有一个必须指定的参数,即程序主模块或则包的名称..在大多数程序中,Python 的__name__ 变量就是所需的值.将构造函数的name 参数传给Flask 程序,这一点可能

字符串的格式化、程序的分支结构

一.字符串的格式化 1.字符串通过format()方法进行格式化处理. 2.format()方法格式控制 3.左对齐.右对齐.居中 >>> s = 'PYTHON' #左对齐 >>> '{:30}'.format(s) 'PYTHON ' #右对齐 >>> '{:>30}'.format(s) '                             PYTHON' #居中且使用*填充 >>> '{:*^30}'.format

C语言程序的基本结构

目录 一.C语言基础知识的学习方法 二.C语言程序开发的流程 三.安装C语言的编译器 四.C程序的基本结构 1.程序的注释 2.预处理指令 3.主函数的入口 4.主函数体 五.编译并执行 C 程序 六.知识总结 七.课后作业 八.版权声明 一.C语言基础知识的学习方法 1)我的课程内容是精心整理的,某些知识点可能没有提到应用场景,但绝对不会是没用的知识.课程中没有提到的知识可以了解一下,但不必深入学习,意义不大. 2)学习不要贪快,欲速则不达的道理大家应该明白,学习的重点是培养写程序的感觉. 3