web网站发展至今,特别是服务器端,涉及到的知识、内容,非常广泛。这对程序员的要求会越来越高。如果采用成熟,稳健的框架,那么一些基础的工作,比如,安全性,数据流控制等都可以让框架来处理,那么程序开发人员可以把精力放在具体的业务逻辑上面。 使用框架的优点:
·稳定性和可扩展性强
·可以降低开发难度,提高开发效率。 在 Python 中常用的 Web 框架有:
Flask 、Django、Tornado
Flask简介
Flask 是一个 Python 实现的 Web 开发微框架。你可以查看:
1、中文文档 2、英文文档
Flask 依赖两个外部库: Jinja2 模板引擎和 Werkzeug WSGI 工具集。
helloworld简单示例
首先在python中安装Flask框架。
pip install flask
然后
# 第一步 导入Flask类
from flask import Flask
# 第二步 Flask函数接收一个参数__name__,它会指向程序所在的包
app = Flask(__name__)
# 第三步 装饰器的作用是将路由映射到视图函数 demo ,并返回 helloworld
@app.route('/')
def demo():
return "helloworld!!"
# 第四步 Flask应用程序实例的 run 方法 启动 WEB 服务器
if __name__ == '__main__':
app.run()
相关配置参数
1、初始化参数
Flask 程序实例在创建的时候,需要默认传入当前 Flask 程序所指定的包(模块),接下来就来详细查看一下 Flask 应用程序在创建的时候一些需要我们关注的参数:app = Flask(__name__, # Flask程序所在的包(模块),传 __name__ 就可以 ;其可以决定 Flask 在访问静态文件时查找的路径
static_path='static', # 静态文件访问路径(不推荐使用,使用 static_url_path 代替)
static_url_path='static', # 静态文件访问路径,可以不传,默认为:/ + static_folder
static_folder='static', # 静态文件存储的文件夹,可以不传,默认为 static
template_folder='templates' # 模板文件存储的文件夹,可以不传,默认为 templates
)
2、程序加载配置
在 Flask 程序运行的时候,可以给 Flask 设置相关配置,比如:配置 Debug 模式,配置数据库连接地址等等,设置 Flask 配置有以下三种方式:
# 第一种 从对象中加载配置
class Config(object):
DEBUG = True
app.config.from_object(Config)
# 第二种 从文件中加载配置
app.config.from_pyfile('config.ini')
# 第三种 从环境变量中加载配置
app.config.from_envvar('ENVCONFIG')
3、app.run的参数
可以指定运行的主机IP地址,端口,是否开启调试模式app.run(host="0.0.0.0", port=5000, debug = True)
Flask中的路由
1、指定路由地址
# 指定访问路径为 demo1
@app.route('/demo1')
def demo1():
return 'demo1'
2、给路由传参示例:有时我们需要将同一类 URL 映射到同一个视图函数处理,比如:使用同一个视图函数来显示不同用户的个人信息。
# 路由传递参数
@app.route('/user/')
def user_info(user_id):
return 'hello %s' % user_id
路由传递的参数默认当做 string 处理,也可以指定参数的类型
# 路由传递参数
@app.route('/user/')
def user_info(user_id):
return 'hello %d' % user_id
这里指定int,尖括号中的内容是动态的,在此暂时可以理解为接受 int 类型的值,实际上 int 代表使用 IntegerConverter 去处理 url 传入的参数
3、指定请求方式
@app.route('/demo2', methods=['GET', 'POST'])
def demo2():
# 直接从请求中取到请求方式并返回
return request.method
视图常用逻辑
1、返回json
在使用 Flask 写一个接口时候需要给客户端返回 JSON 数据,在 Flask 中可以直接使用 jsonify生成一个 JSON 的响应# 返回JSON
@app.route('/demo4')
def demo4():
json_dict = {
"user_id": 10,
"user_name": "laowang"
}
return jsonify(json_dict)
注:不推荐使用 json.dumps 转成 JSON 字符串直接返回,因为返回的数据要符合 HTTP 协议规范,如果是 JSON 需要指定 content-type:application/json
2、重定向
重定向到百度网址:# 重定向
@app.route('/demo5')
def demo5():
return redirect('http://www.baidu.com')
重定向也可以使用url_for生成指定视图函数所对应的url
@app.route('/demo1')
def demo1():
return 'demo1'
# 重定向
@app.route('/demo5')
def demo5():
return redirect(url_for('demo1'))
重定向可以到带参数的视图函数, 在url_for 函数中传入参数
# 路由传递参数
@app.route('/user/')
def user_info(user_id):
return 'hello %d' % user_id
# 重定向
@app.route('/demo5')
def demo5():
# 使用 url_for 生成指定视图函数所对应的 url
return redirect(url_for('user_info', user_id=100))
3、自定义状态码
在 Flask 中,可以很方便的返回自定义状态码,以实现不符合 http 协议的状态码,例如:status code: 666@app.route('/demo6')
def demo6():
return '状态码为 666', 666
......未完待续......