flask 学习 笔记,day01(基于python 2)

来源:互联网 发布:手机数据还可以找回吗 编辑:程序博客网 时间:2024/06/07 02:25
# coding=utf-8
from flask import Flask,abort,make_response,request
# 导入werkzeug的routing模块
from werkzeug.routing import BaseConverter
# 扩展命令行
from flask_script import Manager
# 导入flask
# 创建应用程序实例
# 创建路由和视图函数
# 启动服务器

# 创建应用程序实例
# __name__参数的主要作用是为了确定程序所在的目录
# 任意字符串作为参数,都可以访问static目录下的文件,但是,不可以使用python内置的模块名,必须传入参数,只接收字符串
# app = Flask(__name__)
app = Flask('abcdefg')

# 把Manager类和应用程序实例进行关联
manager = Manager(app)     在最下面运行时起作用

路由可以重复,但是会匹配到上面的内容,不是下面的把上面的重写,因为url在django内
是以列表的形式存在的故一旦先匹配到了便不会再往下走。
# 装饰器路由可以重复,视图函数不允许重名,但匹配过程是从上到下依次匹配
@app.route('/',methods=['GET'])
def hello_2017():
    return '<h1>hello 2017</h1>'
# 创建路由,methods关键字的主要作用是指定请求方法
@app.route('/',methods=['GET'])
def hello():
    return '<h1>hello world</h1>'
# 动态路由参数,语法格式是以<>进行定义
# <>中默认的数据格式string类型,可以兼容数值类型
# int或float,整形和浮点型互不兼容
@app.route('/hello/<id>')
def index(id):
    return 'hello %s' % id

动态路由设置
# 动态路由参数本身只可以限制参数的数据类型,不能限制参数的长度
# 正则URL,通过自定义正则类来实现
# 在web开发中,正则url主要应用在静态文件的访问
# 正则url,限制访问,优化访问
class Regex(BaseConverter):
    def __init__(self,url,*args):
        super(Regex, self).__init__(url)       super 方法继承父类
        self.regex = args[0]

# 自定义的正则类,需要和flask应用程序实例进行关联
app.url_map.converters['re'] = Regex


# @app.route('/regex/<int:id>') 
@app.route('/regex/<re("[a-z]{3}"):id>')               re("[a-z]{3}"):id      前面的re 表示匹配规则   后面的id  才是真正的url内容
def regex_url(id):
    return 'hello %s' % id


# 返回状态码,flask中有两种实现:return,abort
# return可以自定义返回状态码,可以实现不符合http协议的状态码,errno=666,errmsg='查询数据库异常'
# 自定义状态码的作用是为了实现前后端数据交互的方便
@app.route('/status')
def response_code():
    return 'hello python',666

# abort类似于raise,
# abort语句只会抛出符合http协议的状态码
# abort语句执行后,下面的语句不会被执行
@app.route('/aborts')
def response_codes():
    abort(404)
    return 'hello python',666

# 自定义错误页面,errorhandler会接收abort函数抛出的异常状态码,
@app.errorhandler(404)
def errors(e):
    return 'error2017: %s' %e

# 状态保持
# http协议是无状态,实现状态保持cookie,session
# 设置cookie
@app.route('/cookie')
def set_cookie():
    resp = make_response('set cookie success')                   set cookie success   返回到页面显示的内容
    resp.set_cookie('name','python9')
    return resp

# 获取cookie,request对象来获取客户端发送的请求参数
@app.route('/cookies')
def get_cookie():
    req = request.cookies('name')
    return req

if __name__ == '__main__':
    # 查看当前应用程序所有的路由映射
    print app.url_map
    app.run(debug=True)
    # manager.run()
原创粉丝点击