本篇介绍flask的路由、视图、模板、使用session保存用户会话信息以及特殊的装饰器
Flask是什么?
Flask是一个基于Werkzeug和Jinja2的微框架。
Flask和Django的区别?
1 | flask是一个轻量级的框架,内置了:路由 / 视图 / 模板(jinja2)/ cookie / session / 中间件, 可扩展强(第三方组件非常多),例如:wtforms / flask-session / flask-sqlalchemy |
1 | flask 短小精悍可扩展强 |
django好还是flask好?
1
2小程序,flask比较好
中大型,django比较好
快速入门
1 | pip install flask |
werkzurg
werkzurg是一个wsgi,本质上提供了socket服务端,用于接受用户请求。
django和flask一样,它们内部都没有实现socket服务端,需要依赖wsgi
- django:wsgiref(python内置的)
- flask:werkzeug
uwsgi:性能最好,flask和django都可以用
ps:这三个就像一个瓶盖~
wsgiref实现一个网站
本质上是入口!
1 | from wsgiref.simple_server import make_server |
补充:对象加括号执行call方法
werkzeug实现一个网站
1 | from werkzeug.wrappers import Response |
flask程序
1 | from flask import Flask |
程序很简单,但在背后我们用到了werkzeug
,它是整个程序的入口
1 | from werkzeug.serving import run_simple |
flask用户登录示例
1 | from flask import Flask,render_template,request,redirect |
关于返回值
1 | return 'xxx' # HttpResponse |
关于模板
1 | 默认放在根目录的templates文件夹下 |
关于用户请求
django和flask对于请求的处理是不同的:
- django会将用户请求封装成request对象,然后再不断的传递。
- flask会将用户请求放在一个地方,谁用谁去拿。
1 | request.method # request.method |
关于模板语法
1 | jinja2 语法上更像python,比django的模板语法有更多的写法。 |
关于反向解析
1 | 不写endpoint的话,默认是函数名 |
关于session
1 | 默认:将用户名与secret_key进行加密后,存放在了用户浏览器的cookie中 |
关于权限认证(在flask视图中添加装饰器)
- 位置route的下面
- 记得加functools.wraps(…) 保留函数的元信息
1 | from flask import Flask, render_template, request, redirect, url_for, session |
特殊的装饰器
1 | before_request 是按注册顺序,顺序执行 |
代码示例:
1 | from flask import Flask, render_template, request, redirect, url_for, session |
总结
- flask请求的声明周期
- wsgi:werkzeug模块
- before_request
- 视图(业务/模板的处理)
- after_request
- 连接MySQL数据库,自己写pymysql
- 装饰器的应用场景
- django与flask的区别? **