flask快速入门常用插件(草稿)

Flask快速入门,知识整理

扩展列表:http://flask.pocoo.org/extensions/

扩展名功能
Flask-SQLAlchemy操作数据库
Flask-Script插入脚本
Flask-Migrate管理迁移数据库
Flask-SessionSession 存储方式指定
Flask-WTF表单
Flask-Mail邮件
Flask-Babel提供国际化和本地化支持,翻译
Flask-Login认证用户状态
Flask-OpenID认证
Flask-RESTful开发 REST API 的工具
Flask-Bootstrap集成前端 Twitter Bootstrap 框架
Flask-Moment本地化日期和时间
Flask-Admin简单而可扩展的管理接口的框架

Flask:用Python语言基于Werkzeug工具箱编写的轻量级Web开发框架。

Flask和Django对比:
1.Django大而全,提供一站式解决方案,MVT模式,有ORM模式、后台站点管理等功能。
2.Flask轻巧,简洁,可扩展性强(Flask最重要特点),
其核心: WSGI 工具箱采用 Werkzeug(路由模块)
模板引擎则使用 Jinja2

#coding=utf-8
from flask import Flask, make_response, current_app, request
from settings import Config
# 导入werkzeug的路由模块, 转换器
from werkzeug.routing import BaseConverter

# Flask接受一个参数name,参数指向程序所在模块
# __name__参数作用,是为了确认程序所在的位置
# Flask默认创建静态路由
# 默认参数是默认字符串,不能是int整值,不能传入python模块名
app = Flask(__name__)

# 配置对象可以导入配置文件,config配置对象,方法from_object,引入配置文件
app.config.from_object(Config)

# 自定义转换器
# 正则url作用:限制访问(不符合条件的),优化访问

class Regex(BaseConverter):

    """Base class for all converters"""
    def __init__(self, map, *args):
        super(Regex, self).__init__(map)
        self.regex = args[0]

# 添加转换器映射
app.url_map.converters['re'] = Regex
# 优化访问路径,处理请求高效
# 使用访问对象,make_response,(响应对象)current_app,把指定的对象响应给浏览器
@app.route('/<re(".*"):filename>')
def demo5(filename):
    if not filename:
        filename == 'index.html'
    else:
        filename == 'html/' + filename
    resp = make_response(current_app.send_static_file(filename))
    return resp

@app.route('/re/<re("[a-z]{6}"):num>')
def demo4(num):
    return 'laowang11:%s' % num

# 自定义转换器   Regex继承BaseConverter类
class Regex(BaseConverter):
    regex = '[0-9]{4}'

# 添加转换器的映射
app.url_map.converters['re'] = Regex
@app.route('/<re:num>')
def demo3(num):
    return 'langwang:%s' % num


# 状态保持:因为http协议的无状态,http使用TCP/IP协议
# web应用保持某种状态,cookie的本质是字典

#1 设置cookie
@app.route('/setcookie')
def demo6():
    resp = make_response('set cookies success')
    resp.set_cookie('user', 'python', max_age=300)
    return resp

# 2获取cookie,request
@app.route('/getcookie')
def demo7():
    resp = request.cookies.get('user')
    return resp

# 定义视图
# route方法的实现是通过转换器,
# rule类存储的一条路由规则,
# Map存储所有路由规则,
# MapAdapter类负责匹配集体的url和视图

# 视图函数不能重名,路由可以从复,动态生成参数可以通过<>
# 动态生成参数,默认的数据类型str,兼容数值型,不包括浮点型
@app.route('/',methods=['POST','GET'])#请求方法post, get,
def demo():
    return 'hello world'


@app.route('/<float:name>', methods=['POST', 'GET'])
def demo2(name):
    return 'LAOWANG:%s' % name


# 启动服务器
# 当文件导入其他文件使用时,该表达式不成立, __name__==demo,
if __name__=='__main__':

    # app.run(debug=True)开发环境debug=Ture开发区环境,代码有变动会自动更新,其他情况下,会内存泄漏
    # 查看所有路由映射
    print app.url_map
    app.run()