zoukankan      html  css  js  c++  java
  • Flask

    基本概念

    1. wsgi
    Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。
    两个实现该协议的模块:
    - wsgiref
    
    wsgiref示例:
    			from wsgiref.simple_server import make_server
     
    			def run_server(environ, start_response):
    				start_response('200 OK', [('Content-Type', 'text/html')])
    				return [bytes('<h1>Hello, web!</h1>', encoding='utf-8'), ]
    			 
    			 
    			if __name__ == '__main__':
    				httpd = make_server('127.0.0.1', 8000, run_server)
    				httpd.serve_forever()
    
    - werkzeug
    
    werkzeug示例:
    			from werkzeug.wrappers import Response
    			from werkzeug.serving import run_simple
    
    			def run_server(environ, start_response):
    				response = Response('hello')
    				return response(environ, start_response)
    
    			if __name__ == '__main__':
    				run_simple('127.0.0.1', 8000, run_server)
    
    Flask源码入口:
    			from werkzeug.wrappers import Response
    			from werkzeug.serving import run_simple
    
    			class Flask(object):
    				def __call__(self,environ, start_response):
    					response = Response('hello')
    					return response(environ, start_response)
    
    				def run(self):
    					run_simple('127.0.0.1', 8000, self)
    
    
    
    			app = Flask()
    
    			if __name__ == '__main__':
    				app.run()
    

    设置监听的HTTP方法

        我们可以在app.route()装饰器中使用methods参数传入一个包含监听的HTTP方法的可迭代对象,比如
    



    通过定义方法列表,可以为同一个URL规则定义多个视图函数,分别处理不同HTTP方法的请求。

    Flask内置变量转换器

    修改配置文件

    app.config.from_object("python类或类的路径")

    配置SECRET_KEY

        因为flask的session是通过加密之后放到了cookie中。所以有加密就有密钥用于解密,所以,只要用到了flask的session模块就一定要配置“SECRET_KEY”这个全局宏。一般设置为24位的字符。
    

    Session在Flask中的运行机制

        当请求到来时,flask读取cookie中session对应的值,并将该值解密并反序列化成字典,存入内存中以便视图函数使用。
        当请求结束时,flask会读取内存中session字典的值,进行序列化和加密,写入到用户cookie中。
    

    Flash

        在session中存储一个数据,读取时通过pop将数据取出。
    
    from flask import Flask,flash,get_flashed_messages
    @app.route('/page1')
    def page1():
        print('page1')
        flash('零时数据','error')
        flash('data','info')
        return 'session'
    
    @app.route('/page2')
    def page2():
        print(get_flashed_messages(category_filter=['error']))
        return 'session'
    

    MiddleWare

        __call__方法在用户发起请求时才执行,
        我们要做的时在call执行前做一个操作,执行后做一个操作。
    
            Class MiddleWare:
            def __init__(self,old):
                self.old=old
            def __call__(self,*args,**kwargs):
                print('前')
                ret=self.old(*args,**kwargs)
                print('后')
                return ret
            if __name__ == "__main__":
                app.wsgi_app = MiddleWare(app.wsgi_app)
                app.run()
    

    特殊装饰器

    1. @app.before_request
    2. @app.after_request
    • 如果在执行x1的时候return,那么执行顺序为绿色箭头。
    1. @app.first_request

    只有第一次请求的时候运行,之后不在运行。

    1. @app.errorhandler

    当用户请求的页面错误时可以使用这个装饰器为用户跳转到你指定的错误显示页面上。

    1. @template_global

    函数的调用一般有两种方式。
    1. 定义的函数func可以作为参数传到html页面上,然后再调用。(func)
    2.使用@template_global装饰器装饰的函数,不用传参就可以直接在页面上调用。(func1)
    {{func(2)}}
    {{func2(3)}}

    Flask中endpoint的理解

    https://www.cnblogs.com/eric-nirnava/p/endpoint.html

    Blueprint(蓝图)

        目标:给开发者提供目录结构
        1. 项目结构
    


    2. from flask import Blueprint
    蓝图名=Blueprint('蓝图名',name)

    3.app与蓝图注册连接
    app.register_blueprint(ac)

    五种请求钩子(也就是特殊装饰器)




    常见的状态码

  • 相关阅读:
    LeetCode 230. Kth Smallest Element in a BST
    LeetCode 114. Flatten Binary Tree to Linked List
    LeetCode 222. Count Complete Tree Nodes
    LeetCode 129. Sum Root to Leaf Numbers
    LeetCode 113. Path Sum II
    LeetCode 257. Binary Tree Paths
    Java Convert String & Int
    Java Annotations
    LeetCode 236. Lowest Common Ancestor of a Binary Tree
    LeetCode 235. Lowest Common Ancestor of a Binary Search Tree
  • 原文地址:https://www.cnblogs.com/plusUltra/p/10528387.html
Copyright © 2011-2022 走看看