Flask
Django:1个重武器,包含了web开发中常用的功能、组件的框架;(ORM、Session、Form、Admin、分页、中间件、信号、缓存、ContenType....); Tornado:2大特性就是异步非阻塞、原生支持WebSocket协议; Flask:封装功能不及Django完善,性能不及Tornado,但是Flask的第三方开源组件比丰富;http://flask.pocoo.org/extensions/ Bottle:比较简单; ? 小型web应用设计的功能点不多使用Flask; 大型web应用设计的功能点比较多使用的组件也会比较多,使用Django(自带功能多不用去找插件); 如果追求性能可以考虑Tornado; ? Flask的socket是基于Werkzeug 实现的,模板语言依赖jinja2模板 ? flask的大致框架 from flask import Flask app=Flask(__name__) #创建1个Flask实例 @app.route(‘/‘) #路由系统生成 视图对应url,1. decorator=app.route() 2. decorator(first_flask) def first_flask(): #视图函数 return ‘Hello World‘ #response if __name__ == ‘__main__‘: app.run() #启动socket ? ? 配置文件 app=Flask(__name__,template_folder=‘templates‘,static_url_path=‘/static/‘,static_path=‘/zhanggen‘)
? 路由系统 动态路由(url传参) from flask import Flask app=Flask(__name__) # 接收字符串类型参数 @app.route(‘/user/<name>‘) @app.route(‘/<name>‘) #设置url传参数 http://127.0.0.1:5000/zhanggen # 接收整型数字参数 @app.route(‘/post/<int:age>‘) @app.route(‘/<int:age>/‘) #设置url传参数 http://127.0.0.1:5000/18/ # 接收浮点型型数字参数 @app.route(‘/<float:salary>/‘) @app.route(‘/<float:salary>/‘) #设置url传参数http://127.0.0.1:5000/2345555.8889/ # 接收URL链接类型参数 @app.route(‘/<path:url>/‘) @app.route(‘/<path:url>/‘) #设置url传参数:http://127.0.0.1:5000/http://www.baiu.com/ def first_flask(name): #视图必须有对应接收参数 print(name) return ‘Hello World‘ #response if __name__ == ‘__main__‘: app.run() 指定允许的请求方法 app=Flask(__name__) # 指定允许的请求方法 @app.route(‘/login‘,methods=[‘GET‘,‘POST‘]) @app.route(‘/<path:url>/‘,methods=[‘get‘]) #只允许get请求 def first_flask(url): print(url) return ‘Hello World‘ #response if __name__ == ‘__main__‘: app.run() 通过别名反向生成url # url_for()反向生成url from flask import Flask,url_for app=Flask(__name__) @app.route(‘/<path:url>‘,endpoint=‘name1‘) def first_flask(url): print(url_for(‘name1‘,url=url)) #如果设置了url参数,url_for(别名,加参数) return ‘Hello World‘ if __name__ == ‘__main__‘: app.run() 通过app.add_url_rule()调用路由 # app.add_url_rule()方法调用路由 app=Flask(__name__) def first_flask(): return ‘Hello World‘ app.add_url_rule(rule=‘/index/‘,endpoint=‘name1‘,view_func=first_flask,methods=[‘GET‘]) #app.add_url_rule(rule=访问的url,endpoint=路由别名,view_func=视图名称,methods=[允许访问的方法]) if __name__ == ‘__main__‘: app.run() 扩展路由功能:正则匹配url # 自定义正则表达式匹配路由 from flask import Flask,views,url_for from werkzeug.routing import BaseConverter app = Flask(import_name=__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 # 添加到flask中 app.url_map.converters[‘regex‘] = RegexConverter @app.route(‘/index/<regex("d+"):nid>‘) def index(nid): print(url_for(‘index‘,nid=‘888‘)) return ‘Index‘ if __name__ == ‘__main__‘: app.run() ? ? 视图 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |