Flask学习笔记-Flask创建与配置

框架的轻重

重量级的框架:为方便业务程序的开发,提供了丰富的工具、组件,如Django

轻量级的框架:只提供Web框架的核心功能,自由、灵活、高度定制

初识Flask

Flask诞生于2010年,是Armin ronacher(人名)用Python语言基于Werkzeug工具箱编写的轻量级Web开发框架。它主要面向需求简单的小应用。

Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login),都需要用第三方的扩展来实现。比如可以用Flask-extension加入ORM、窗体验证工具,文件上传、身份验证等。Flask没有默认使用的数据库,你可以选择MySQL,也可以用NoSQL。其 WSGI 工具箱采用 Werkzeug(路由模块) ,模板引擎则使用 Jinja2 。可以说Flask框架的核心就是Werkzeug和Jinja2。

Python最出名的框架要数Django,此外还有Flask、Tornado等框架。虽然Flask不是最出名的框架,但是Flask应该算是最灵活的框架之一,这也是Flask受到广大开发者喜爱的原因。

与Django对比

django提供了:

  • django-admin快速创建项目工程目录
  • manage.py 管理项目工程
  • orm模型(数据库抽象层)
  • admin后台管理站点
  • 缓存机制
  • 文件存储系统
  • 用户认证系统

而这些,flask都没有,都需要扩展包来提供

Flask扩展包

  • Flask-SQLalchemy:操作数据库;
  • Flask-migrate:管理迁移数据库;
  • Flask-Mail:邮件;
  • Flask-WTF:表单;
  • Flask-script:插入脚本;
  • Flask-Login:认证用户状态;
  • Flask-RESTful:开发REST API的工具;
  • Flask-Bootstrap:集成前端Twitter Bootstrap框架;
  • Flask-Moment:本地化日期和时间

Flask文档

中文文档: http://docs.jinkan.org/docs/flask/

英文文档: http://flask.pocoo.org/docs/0.11/

FLask开发版本之在Python 3 的状况

目前 Python 社区正处于改善库以对 Python 编程语言中迭代支持的进程中。尽管情况大大改善, 但还存在一些问题,因此使我们现在很难切换到 Python 3 上。 导致这些问题的一部分原因是语言中的变更长时间没有复查, 一部分也是因为我们没有找出低层 API 应该如何做出修改来适应 Python 3 中 Unicode 的差异。一旦应对变更的解决方案出现,Werkzeug 和 Flask 就会立刻迁移到 Python 3,并且我们会提供升级现有应用到 Python 3 的提示。在那之前,我们强烈建议在开发时候使用 Python 2.6 和 2.7,并打开 Python 3 警告。 如果你计划在近期升级到 Python 3 ,我们强烈推荐你阅读 How to write forwards compatible Python code.”

虽然Flask对于Python 2和Python 3的支持都很好了但是Flask的扩展库,别人开发的库,很多都还是Python 2,不支持Python 3

1. 第一个Flask程序–Hello world

# coding:utf-8

# 倒入Flask类
from flask import Flask

# 创建FLask的应用对象
# __name__ 表示当前模块的名字
app = Flask(__name__,)

@app.route("/")
def index():
    '''定义视图函数'''
    return "hello word" 

if __name__ == '__main__':
    # 启动flask程序
    # app.run()

Flask创建app对象

初始化参数

import_name:

static_url_path:

static_folder: 默认‘static’

template_folder: 默认‘templates’

配置参数

app.config.from_pyfile(“yourconfig.cfg”) 或

app.config.from_object()

在视图读取配置参数

app.config.get() 或者 current_app.config.get()

app.run的参数

app.run(host=”0.0.0.0”, port=5000)

路由

app.url_map 查看所有路由

同一个视图多个路由装饰器

由于Flask高度“自由”不同于Django中自带的路由,Flask需要自己编写路由,路由的编写通常也简单,在对应视图上进行装饰即可,

@app.route("/hi1")
@app.route("/hi2")
def hi():
    return "hi pa ge"

总结代码

# coding:utf-8

from flask import Flask,current_app,redirect,url_for


# 创建FLask的应用对象
# __name__ 表示当前模块的名字
# 模块名,Falsk这个模块所在的位置为总目录,默认这个目录中static为静态目录, 为模版目录。
app = Flask(__name__)

@app.route("/")
def index():
    '''定义视图函数'''
    return "hell falsk"

# 同样URL下和django一样,同名url不同访问方式。
@app.route("/hello",methods=["POST"])
def hello():
    return  "hello 1"

@app.route("/hello",methods=["GET "])
def hello2():
    return "hello 2"

@app.route("/hi1")
@app.route("/hi2")
def hi():
    return "hi pa ge"

@app.route("/login")
def login():
    # url = "/"
    # 使用url_for 的函数,通过视图的名字找到视图对应的url路径
    url = url_for("index")
    return redirect(url)






# 通过methods限定访问方式
@app.route("/post_only",methods=["POST","GET"])
def post_only():
    return "post_only"

if __name__ == '__main__':
    print app.url_map
    app.run(debug=True)