网站后端_Python+Flask.0003.FLASK快速入门之Hello Word?

框架特点:

1. 非常小, 小到可称为微型框架

2. 可扩展, 设计初衷就是不会替开发者做太多决策,支持随时更换或动手实现扩展模块

3. 三依赖, 路由/调试/WSGI(由WERKZEUG提供的WEB服务器网关接口实现),模版系统(由JINJA2实现),签名(由ITSDANGEROUS实现)

快速安装:

pip install flask

快速入门:


#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
#
# Authors: limanman
# 51CTOBG: http://xmdevops.blog.51cto.com/
# Purpose:
#
"""
# 说明: 导入公共模块
from flask import Flask
# 说明: 导入其它模块
app = Flask(__name__)
@app.route(‘/‘)
def hello_word():
    return ‘Hello Word!‘
if __name__ == ‘__main__‘:
    app.run(host=‘0.0.0.0‘, port=9000)


1.  # -*- coding: utf-8 -*-用于声明源文件编码,PY解释器会以此编码解析源码文件,没有特殊情况下强制设置为utf-8

2. from flask import Flask用于引入Flask类,Flask类实现了一个WSGI应用

3. app = Flask(__name__),通过Flask接收包或模块名作为参数让flask创建一个WSGI实例,flask通过flask.helpers.get_root_path(模块名/包名)来获取程序的根目录,以便获取静态/模版/配置等文件

4. @app.route(‘/‘)装饰器将url和视图函数的关系保存到app.url_map映射表中,由路由来根据映射表对号入座调用视图函数

5. if __name__ == ‘__main__‘: 用于保证其它模块导入此行下面的代码块儿不会被执行

6. app.run(host=‘0.0.0.0‘, port=9000)用于设置启动参数,默认监听127.0.0.1的5000端口,可通过指定host/port来设置监听地址和端口,服务启动后会调用werkzeug.serving.run_simple进入轮询,默认使用werkzeug.serving.BaseWSGIServer处理请求,当我们访问http://127.0.0.1:9000/时,路由通过app.url_map找到注册‘/‘这个url模式以及关联的视图函数,由于函数返回‘Hello Word!‘,状态码为200,如果访问一个不存在的路径,则在app.url_map找不到对应的模式,就会向浏览器返回‘Not Found‘,状态码为404



注意:  默认的app.run的启动方式只用于调试,不要用于生产环境,生产环境应该换为Gunicorn或uWSGI,其实WERKZEUG还自带werkzeug.serving.ThreadedWSGIServer多线程类和werkzeug.serving.ForkingWSGIServer多进程类

时间: 2024-09-30 10:29:47

网站后端_Python+Flask.0003.FLASK快速入门之Hello Word?的相关文章

网站后端_Python+Flask.0008.FLASK响应相关之隐式显式与自定义响应?

隐式响应: 1. 视图函数的返回值会被隐式转换为一个响应对象 2. 如果返回的是一个合法的响应对象,则会从视图函数中直接返回 3. 如果返回的是一个字符串,会用字符串数据和默认参数创建字符串为主体,状态码为200,MIME类型为text/html的werkzeug.wrappers.Response响应对象 4. 如果返回的是一个元组(response, status, headers),且至少包含一个元素,status值会覆盖状态代码,headers可以是一个列表或是字典,作为额外的消息头 5

网站后端_Python+Flask.0009.FLASK静态资源之默认及自定义资源目录?

默认位置: 说明: WEB应用大多会提供基于CDN的静态文件服务以便给用户更好的体验,静态文件主要包括CSS/JS/图片/字体等,FLASK默认只需要在项目根目录下创建"static"的目录,项目中使用基于/static开头的路径就可以访问,但是为了更好的处理能力,推荐使用Nginx或是其它的WEB服务器管理静态文件 推荐方案: 1. 不要在项目中直接写死静态文件路径,应该使用url_for生成路径,当然如果我们想指定路径也可以在创建app实例时指定static_folder参数 #!

网站后端_Python+Flask.0010.FLASK即插视图之自定义视图类及视图修饰?

即插视图; 说明: FLASK的视图灵感来自于DJANGO的基于类而非基于函数的通用视图,主要目的是为了解决多个视图函数之间已经实现的部分,通过类继承的方式继承到其它视图,总之为了一点,就是少写代码,然后通过add_url_rule让我们定义的视图类支持动态插入,也就是所谓的即插视图 深入视图: # 转换前: #!/usr/bin/env python # -*- coding: utf-8 -*- """ # # Authors: limanman # 51CTOBG: h

网站后端_Python+Flask.0006.FLASK地址转换之默认转换与自定义转换?

动态规则: 说明: URL规则可添加变量部分,也就是说将符合同种规则的URL抽象成一个URL模式 @app.route('/instance/<uuid>/') def instance(uuid):     return 'Instance: {}'.format(uuid) 注意: 尖括号中内容是动态的,凡是匹配到/instance/前缀的都会被映射到这个路由上,在内部把uuid作为参数而获得,默认类型为字符串 默认转换: 说明: 可通过<converter:variable_nam

网站后端_Python+Flask.0007.FLASK构造跳转之301跳转与302重定向?

构造地址: 说明: FLASK支持通过视图函数及传参来构造URL,而且未来修改URL可一次性修改,且默认构建会转义特殊字符和Unicode数据,这些工作不需要我们自己处理,且不仅支持在上下文中构造而且还支持在模版文件中构造 #!/usr/bin/env python # -*- coding: utf-8 -*- """ # # Authors: limanman # 51CTOBG: http://xmdevops.blog.51cto.com/ # Purpose: #

网站后端_Python+Flask.0005.FLASK调试模式之开启DEBUG与PIN使用?

自动加载: # 方式一 if __name__ == '__main__':     app.run(host='0.0.0.0', port=9000, debug=True) # 方式二 if __name__ == '__main__':     app.debug = True     app.run(host='0.0.0.0', port=9000) 说明: 可通过如上两种方式开启调试模式,调试模式下PY文件被修改会自动重新加载,资源文件/模版文件/配置文件修改必须重启生效~这个确实

网站后端_Python+Flask.0012.FLASK域名相关之域名与动态子域名实现?

域名设置: 说明: SERVER_NAME内置属性的设置会影响全局URL,它主要有两个作用,第一个作用是在请求上下文之外生成绝对URL,当然如果设置也会影响请求上下文内的绝对URL,第二个作用是用于子域名的支持 #!/usr/bin/env python # -*- coding: utf-8 -*- """ # # Authors: limanman # 51CTOBG: http://xmdevops.blog.51cto.com/ # Purpose: # "

网站后端_Python+Flask.0004.FLASK配置管理之三种方式加载外部配置?

简单介绍: 说明: 复杂的项目需要配置各种环境,若设置少可直接硬编码,设置多的话可通过加载配置/加载文件/加载变量的方式来设置 app.config.update(     DEBUG=True, ) 扩展: app.config是flask.config.Config类的实例,继承子PY内置数据结构dict,所以可以使用如上update方法,支持传入多个键值对,其实app.config内置很多配置变量(http://flask.pocoo.org/docs/0.11/config/#Built

三 Flask web开发快速入门

1:会话: from flask import Flask, url_for, request, render_template, session from werkzeug.utils import redirect, escape app = Flask(__name__) @app.route('/') def index(): if 'username' in session: return 'Logged in as %s' % escape(session['username'])