Flask是一个基于Python开发而且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,而后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,若是要返回给用户复杂的内容时,须要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器。html
默认状况下,Flask 不包含数据库抽象层、表单验证,或是其它任何已有多种库能够胜任的功能。然而,Flask 支持用扩展来给应用添加这些功能,如同是 Flask 自己实现的同样。众多的扩展提供了数据库集成、表单验证、上传处理、各类各样的开放认证技术等功能。Flask 也许是“微小”的,但它已准备好在需求繁杂的生产环境中投入使用。数据库
#django与flask框架对比: ''' Django:无socket、中间件、路由系统、视图(CBV,FBV)、 模板、ORM、cookie、Session、Admin、Form、缓存、信号、序列化.... Flask:无socket、中间件(扩展)、路由系统、视图(CBV)、第三方模板(jinja2)、cookie和Session很弱 '''
1、创建虚拟环境django
具体步骤以下:flask
''' 一、pip3 install virtualenv 二、建立虚拟环境 virtualenv env1(虚拟环境名) :切换到任意路径执行 三、进入虚拟环境 Scripts/activate:切到Scripts文件下,执行activate 四、退出虚拟环境 Scripts/deactivate:切到Scripts文件下,执行deactivate '''
pycharm中建立和使用虚拟环境:浏览器
flask安装以下,建议使用pip3,不然可能会报诸如 Running setup.py install for MarkupSafe ... error的错:缓存
pip3 install flask
2、入门实例cookie
from flask import Flask app=Flask(__name__) #路由方式一(经常使用) @app.route("/index") def index(): return "hello world" #路由方式二 ''' def index(): return "thank you" app.add_url_rule("/index/","s1",index) (s1为url别名) ''' if __name__ == '__main__': app.run()
3、登陆实例session
代码以下:app
from flask import Flask,request,redirect,render_template,session app=Flask(__name__,template_folder="templates",static_url_path="/xxx") app.secret_key="aslsbjnasbdanksljkma" #设置session须要的密钥 @app.route("/login/",methods=["GET","POST"]) def login(): if request.method=="POST": # print(request.form) #获取form表单数据,为字典 username=request.form.get("user") userpswd=request.form.get("pswd") if username=="alex" and userpswd=="123": session["userifo"]=username return redirect("/index/") else: # return render_template("login.html",msg="用户名或者密码错误") #模板传值方式一 return render_template("login.html",**{"msg":"用户名或者密码错误"}) #模板传值方式二 else: return render_template("login.html") @app.route("/index/",methods=["GET"]) def index(): return "登陆成功" if __name__ == '__main__': app.run()
一、静态文件配置框架
二、session设置
三、模板传值方式
四、路由匹配参数
4、知识回顾
一、无参数装饰器
# 无参数的装饰器 def wapper(f): def inner(*args,**kwargs): return f(*args,**kwargs) return inner @wapper def func(arg): print(arg) func(123)
二、有参数装饰器
# 有参数的装饰 def outer(num): def wapper(f): def inner(*args,**kwargs): return f(*args,**kwargs) return inner return wapper @outer(666) # 先执行outer(666),获取返回值; @wapper,再执行wapper函数wapper(func); func=inner函数 def func(arg): print(arg) func(123)