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

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)

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




常见的状态码

posted @ 2019-03-14 09:59  P_PlusUltra  阅读(239)  评论(0编辑  收藏  举报