加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Flask

发布时间:2020-12-20 10:58:28 所属栏目:Python 来源:网络整理
导读:Django:1个重武器,包含了web开发中常用的功能、组件的框架;(ORM、Session、Form、Admin、分页、中间件、信号、缓存、ContenType....); Tornado:2大特性就是异步非阻塞、原生支持WebSocket协议; Flask:封装功能不及Django完善,性能不及Tornado,但是F

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‘)

  • 模板路径:?template_folder=‘templates‘
  • 静态文件路径:static_url_path=‘/static/‘
  • 静态文件引入别名:static_path=‘/zhanggen‘
  • 设置为调试环境:app.debug=True (代码修改自动更新)
  • 设置json编码格式 如果为False 就不使用ascii编码:app.config[‘JSON_AS_ASCII‘]=False?
  • 设置响应头信息Content-Type? ?app.config[‘JSONIFY_MIMETYPE‘] ="application/json;charset=utf-8" ?(注意 ;charset=utf-8)

?

路由系统

动态路由(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()

?

?

视图

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读