flask基础
装饰器
概念
在不改变源码的前提下,对函数之前前后进行功能定制.
开放封闭原则:不改变函数内部代码,在函数外部进行修改.
基本写法
import functools def wrapper(func): @functools.wraps(func) def inner(*args, **kwargs): return func(*args, **kwargs) return inner @wrapper def index(xx): pass @wrapper def order(xx): pass print(index.__name__) # "inner" print(order.__name__) # "inner"
函数应用多个装饰器
import functools def wrapper1(func): @functools.wraps(func) def inner(*args, **kwargs): print('w1') return func(*args, **kwargs) return inner def wrapper2(func): @functools.wraps(func) def inner(*args, **kwargs): print('w2') return func(*args, **kwargs) return inner @wrapper1 @wrapper2 def index(): print('index') index()
flask与django的区别
flask,是一个轻量级的框架,内置了:路由/视图/模板(jinja2)/cookie/session/中间件. 可扩展强,第三方组件非常多,例如:wtforms/flask-session/flask-sqlalchemy.
django,是一个重武器,django内置了很多功能方便我们使用,例如:admin/orm/模板/form/modelform/session/cookie/中间件/路由/缓存/信号/数据库的读写分离/分页...
简单的来说就是
flask,短小精悍可扩展强.
django,大而全重武器.
django好还是flask好?
小程序,flask比较好.
中大型,django比较好.
pip3 install flask
werkzurg是一个wsgi,本质上提供了socket服务端,用于接收用户请求.
django和flask一样,它们内部都没有实现socket服务端,需要依赖wsgi.
- django, wsgiref
- flask, werkzurg
from wsgiref.simple_server import make_server class WSGIHandler(object): def __call__(self,environ, start_response): start_response('200 OK', [('Content-Type', 'text/html')]) return [bytes('<h1>Hello, web!</h1>', encoding='utf-8'), ] if __name__ == '__main__': obj = WSGIHandler() httpd = make_server('127.0.0.1', 8000, obj) httpd.serve_forever()
from werkzeug.wrappers import Response from werkzeug.serving import run_simple class Flask(object): def __call__(self,environ, start_response): return Response('Hello World!')(environ, start_response) if __name__ == '__main__': app = Flask() run_simple('127.0.0.1', 5000, app)
from flask import Flask # 实例化了一个Flask对象 app = Flask(__name__) # 添加路由关系 @app.route('/index') def index(): return '你好' if __name__ == '__main__': # 启动服务端 app.run()
- 关于返回值
from flask import Flask,render_template,request,redirect app = Flask(__name__) @app.route('/login',methods=['GET','POST']) def login(): return "xxx" return render_template('模板文件',参数) return redirect(...) return jsonify({"k1":123}) if __name__ == '__main__': app.run()
- 关于模板
默认放在根目录的tempaltes
- 关于用户请求
request.method request.form # POST request.args # GET
- session
加密的形式放在用户浏览器的cookie中.
设置session的话,需要在
app = Flask(_name_)
app.secret_key = 'ssssss' #suibi'ssssss'
- 在flask视图中添加装饰器
- 位置route的下面
- 记得加functools.wraps(...) , 保留函数的元信息.
- 特殊装饰器:before和after request装饰器
- flask请求的生命周期
- wsgi, werkzeug模块
- before request
- 视图(业务/模板处理)
- after request
- 连接MySQL数据库,自己写pymysql
- 装饰器的应用场景
- django和flask的区别?