python的flask框架的使用的详细步骤,flask调用python程序

  python的flask框架的使用的详细步骤,flask调用python程序

  本文给大家带来了一些关于python的知识,主要介绍了Flask的运行原理,并对Flask的运行原理做了简要的分析,以增强大家对Flask的理解。希望对你有帮助。

  推荐:python学习教程

  所有Python Web框架都必须遵循WSGI协议。这里,我们应该简要回顾一下WSGI的核心概念。

  WSGI中有一个非常重要的概念:每一个Python Web应用都是一个可调用的对象。在flask中,这个对象就是app=FLASK (name)创建的app,也就是下图中绿色的应用部分。要运行一个web应用,必须要有一个web服务器,比如python中的apache、nginx或者gunicorn,下面我们要讲的werkzeug提供的WSGIServer就是下图中黄色的服务器部分。

  如何与服务器应用程序通信是WSGI的功能。它指定了app的接口(environ,start_response),服务器会调用应用程序并给它传递两个参数:environ包含所有请求的信息,start_response是应用程序处理后需要调用的函数。这些参数是状态代码、响应头和错误消息。

  WSGI应用的一个很重要的特点就是可以嵌套。换句话说,你可以写一个应用程序。它所做的是调用另一个应用程序,然后返回(类似于代理)。一般来说,嵌套的最后一层是业务应用,中间是中间件。这样做的好处是业务逻辑和其他功能可以分离,比如限流、认证、序列化等。并且都可以实现到不同的中间层,与业务逻辑无关,可以独立维护;而且,用户可以动态组合不同的中间层来满足不同的需求。

  Flask基于Werkzeug WSGI工具箱和Jinja2模板引擎。Flask由BSD授权。Flask又被称为“微框架”,因为它使用了一个简单的核心,并通过扩展添加了其他功能。默认情况下,Flask没有数据库和表单验证工具。然而,Flask保留了扩展的灵活性,这些功能可以通过Flask-extension添加:ORM、表单验证工具、文件上传和各种开放认证技术。我们可以理解为Flask是一个核心,其他功能是插件。需要哪些功能?只需找到相应的插件,插入内核,就可以实现这个功能。

  Flask怎么把代码转换成我们能看到的网页?首先,我们要看一下Web程序的一般流程。对于我们的Web应用来说,当客户端想要获取动态资源(比如用ASP、PHP之类的语言编写的网站)时,这个时候就会发起一个HTTP请求(比如用浏览器访问一个URL)。此时Web应用会在服务器后台进行相应的业务处理(比如操作数据库或者进行一些计算操作等。),取出用户需要的数据,生成相应的HTTP响应(当然如果访问的是静态资源,服务器会直接返回用户需要的资源,不会进行业务处理)。整个处理项目如下:

  在实际应用中,不同的请求可能调用相同的处理逻辑。这里,具有相同业务处理逻辑的HTTP请求可以通过一种URL来标识。例如,在我们的博客站点中,所有对文章内容的请求都可以用articles/这样的URL来表示,其中article_id用于区分不同的文章。然后在后台定义一个get_article(article_id)的函数,用来获取文章对应的数据。此外,还需要建立URL和功能的一一对应关系。这就是所谓的Web开发中的路线分布,如下图所示:

  在Flask中,werkzeug用于路径分配。werkzeug是Flask使用的底层WSGI库(WSGI,全称Web Server Gateway interface,或Python Web Server Gateway interface,是为Python语言定义的Web服务器和Web应用程序之间的简单通用接口)。

  WSGI将Web服务分为两部分:服务器和应用程序。WGSI服务器只负责两件与网络相关的事情:接收浏览器的HTTP请求,向浏览器发送HTTP响应;HTTP请求的具体处理逻辑是通过调用WSGI应用来进行的。WSGI工作流程如下图所示:

  在Flask中,路由分发的代码非常容易编写,如下所示:

  #管理注销页面

  @main.route(/logout )

  定义注销():

  dm=数据管理器()

  currentUsers=dm.getUsers(0 )

  打印(当前用户[0])

  render _ template( current users . html ,users=currentusers)通过业务逻辑函数获取我们需要的数字

  据后,服务器将会根据这些数据来生成HTTP响应(对于Web应用来说,一般就是一个HTML文件,这个是可以直接被我们的客户端,即浏览器直接读取并解释的)。在Web开发中,常规的做法是将获取的数据传入Web应用提供的一个HTML模板文件中,经过模板系统的渲染后最终得到我们所需要的HTML响应文件。
  一般情况下,虽然请求不同,但是响应中的数据的展示方式是相同的 ,通俗点说就是除了我们请求获得的数据不一样外,其他都是一样的,那么我们就可以设计一个模板(除了数据内容可以改动,其他都是固定的HTML文件)。我们以博客站点为例,对不同article而言,其具体article content虽然不同,但页面展示的内容除了请求的数据外都是一样的,都有标题拦,内容栏等。也就是说,对于article来说,我们只需提供一个HTML模板,然后传入不同article数据,即可得到不同的HTTP响应。这就是所谓的模板渲染 ,如下图所示:

  在Flask中使用Jinja2模板渲染引擎来做模板渲染(Jinja2是基于python的模板引擎,功能比较类似于于PHP的smarty,J2ee的Freemarker和velocity。它能完全支持unicode,并具有集成的沙箱执行环境,应用广泛。jinja2使用BSD授权)。Jinja2的工作流程如下图所示:

  在Flask中,模板渲染的代码写起来也是十分的便捷,代码如下:

  

@app.route('/articles/<int:article_id>/') 

  defget_article(article_id):

  returnrender_template('path/to/template.html', data_needed)

  在Flask中,我们处理一个请求的流程就是,首先根据用户提交的URL来决定由哪个业务逻辑函数来处理,然后在函数中进行操作,取得所需的数据。再将取得的数据传给相应的模板文件中,由Jinja2负责渲染得到HTTP响应内容,即HTTP响应的HTML文件,然后由Flask返回响应内容。
  下面主要以实例项目对Flask运行原理做一简要解析。在实例项目中,使用到了程序工厂函数和蓝本。项目目录结构如下:

  在manager.py文件中,定义了项目启动的入口函数:

  

# 确保服务器只会在该脚本被 Python 解释器直接执行的时候才会运行,而不是作为模块导入的时候。

  if __name__ == '__main__':

   # 启用cmd命令行

   # manager.run()

   app.run(host='0.0.0.0', port=9000, debug=True)

同时,在该文件中创建了工厂方法实例:

  

	app = create_app()
  在工程方法中,对数据库进行了相关配置,创建了前端导航栏,同时对所创建的蓝本进行了注册。在创建的蓝本中主要涉及授权、路由及错误处理模块。

  

# 构造工厂方法

  def create_app():

   # 在这里__name__ == __main__

   app = Flask(__name__)

   app.url_map.converters['regex'] = RegexConverter

   # 防止跨站攻击 注:为了增强安全性,密钥不应直接写入代码,而应该保存在环境变量中

   # app.config['SECRET_KEY'] = 'hard to guess string SUNNY2017'

   # app.secret_key = 'Sunny123456'

   # flask提供的读取外部文件

   app.config.from_pyfile('config')

   # basedir = os.path.abspath(os.path.dirname(__file__))

   # print(basedir)

   # 配置数据库连接

   app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://lmapp:lmapp@localhost/smp'

   app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True

   app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

   nav.register_element('top', Navbar(u'APP安盾',

   View(u'当前在线', 'main.index'),

   View(u'全部用户', 'main.all_users'),

   View(u'注销', 'main.logout'),

   View(u'修改密码', 'main.chgpwd'),

   ))

   nav.init_app(app)

   db.init_app(app)

   bootstrap.init_app(app)

   # init_views(app)

   from .auth import auth as auth_blueprint

   from .main import main as main_blueprint

   # 注册蓝本 url_prefix='/auth'

   app.register_blueprint(auth_blueprint,)

   app.register_blueprint(main_blueprint, static_folder='static')

   return app

推荐学习:python教程以上就是Python学习之解析Flask运行原理(图文详解)的详细内容,更多请关注盛行IT软件开发工作室其它相关文章!

  

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 浅谈python程序的错误-变量未定义的原因,浅谈python程序的错误-变量未定义为
  • 浅谈python程序的错误-变量未定义的原因,浅谈python程序的错误-变量未定义为,浅谈Python程序的错误-变量未定义
  • Python程序设计与算法基础教程,python算法指南
  • Python程序设计与算法基础教程,python算法指南,Python常用算法学习基础教程
  • ,,8个实用的Python程序你知道几个
  • python程序打包成exe可执行文件,python程序打包成exe后的 运行速度
  • python流程管理,Python程序开发流程
  • Python程序开发案例教程,python程序设计案例实践教程
  • python编程基础与案例集锦,python程序代码实例
  • python程序设计实例教程董付国课后答案,python程序设计第三版董付国
  • 如果在python程序中没有导入相关模块,python外部模块不用导入可以直接使用
  • Python程序语言设计基础,Python编程设计
  • python程序语言的特点,Python编程的特点
  • python程序编写,python编程求素数
  • python向服务器发送数据,python程序如何在服务器部署
  • 留言与评论(共有 条评论)
       
    验证码: