flask之路由

flask依赖wsgi,实现wsgi的模块:wsgiref,werkzeug,uwsgi

实例化Flask的对象,里面有参数

app = Flask(__name__,template_folder='templates',static_url_path='/xxxxxx')

添加路由的两种方式

 1.程序第一次启动起来,是将url和视图一一对应起来

   服务器启动,是将url和视图的关系找出来

   在flask中添加路由有两种方式,根据装饰器的源码发现的,一般我们用第一种 

路由方式一:

  @app.route('/index',methods=['GET','POST'])

   def index():
      return "Index"
路由方式二:
  def order():
     return 'Order'

app.add_url_rule('/order',view_func=order)  

2.有关endpoint,相当于Django中起别名

from flask import Flask,render_template,redirect,url_for

app = Flask(__name__)   #实例化一个对象

'''
执行流程
1.执行[email protected]('/index',methods=['GET','POST'])
2.@decorator
  新  index = decorator(index)
    本质是执行了 add_url_rule
    self.add_url_rule(rule, endpoint, f, **options)
'''
# 所以创建路由就有两种方式
# endpoint='n1' 相当于我们django中的路由中起的别名,
@app.route('/index',methods=['GET','POST'],endpoint='n1') #调用route方法,返回一个值
 # 这里可以看route的源码,route返回一个函数
def index():
    v1=url_for('n1')
    v2=url_for('n2')
    v3=url_for('n3')
    print(v1,v2,v3)
    return "index"

@app.route('/login',methods=['GET','POST'],endpoint='n2')
def login():
    return "login"

@app.route('/logout',methods=['GET','POST'],endpoint='n3')
def logout():
    return "logout"

#这是第二种添加路由的方式,一般我们用第一种
def  order():
    return 'Order'
app.add_url_rule('/order',view_func=order)

if __name__ == '__main__':
    app.run()

3.有关转换器

 
from flask import Flask
from werkzeug.routing import BaseConverter

app = Flask(__name__)


class RegexConverter(BaseConverter):
    '''
    自定义URL匹配正则表达式
    '''
    def __init__(self,map,regex):
        super(RegexConverter,self).__init__(map)
        self.regex = regex
    def to_python(self, value):
        """
        路由匹配时,匹配成功后传递给视图函数中参数得值
        :param value:
        :return:
        """
        return int(value)
    def to_url(self, value):
        """
        使用url_for反向生成URL时,传递的参数经过该方法处理,返回的值用于生成URL中的参数
        :param value:
        :return:
        """
        val = super(RegexConverter, self).to_url(value)    #继承父类
        return val
app.url_map.converters['xxx'] = RegexConverter
@app.route('/index/<xxx("\d+"):nid>',methods=['GET','POST'])

def index(nid): #这个参数的意思是index后面支持填写一个数字,这个数字会自动填写给nid这个参数
    print(nid,type(nid))
    return "index"

if __name__ == '__main__':
    app.run()
 

4.由老功能的路径直接调到新功能 (redirect_to = '/index')

from flask import Flask

app = Flask(__name__)

@app.route('/index',methods=['GET','POST'],redirect_to='/index')
def index():
    return "老功能"

@app.route('/new',methods=['GET','POST'])
def new():
    return "新功能"

if __name__ == '__main__':
    app.run()
5.装饰器作业
from flask import Flask,render_template,redirect
import functools
app = Flask(__name__)


def wapper(func):
    @functools.wraps(func)
    def inner(*args,**kwargs):
        print('before')
        return func(*args,**kwargs)
    return inner

@app.route('/xxx',methods=['GET','POST'])
@wapper
def  index():
    return "index"

@app.route('/order',methods=['GET','POST'])
@wapper
def order():
    return "order"

if __name__ == '__main__':
    app.run()
 
 
 

猜你喜欢

转载自www.cnblogs.com/1996-11-01-614lb/p/8975262.html