flask入门

一 Python现阶段三大主流框架Django Tornado  Flask之间的区别

1 Django主要的特点是大而全,集成了 很多的组件,例如:Models Admin Form等,缺点是浪费资源

2 Torado 主要的特点是原生异步非阻塞,在IO密集型应用和多任务处理上占绝对性的优势

3 Flask主要的特点是小而精,第三方组件特别全,就是稳定性相对而言较差

而他们的应用也是大有不同的

Django通常用于大型WEB应用 由于内置组件足够强大 所以使用Django开大可以一气呵成

Torado通常用于API后端的应用,游戏服务后台,其内部实现的异步非阻塞很稳

Flask通常应用于小型的应用和快速构建应用,其强大的第三方库,能够支撑一个大型的web应用

二 Flask的安装

pip install Flask

 实现一个简单的flask页面

第一个页面
from flask import Flask app = Flask(__name__) app.run()

第二个页面
from flask import Flask
app=FlasK(__name__)
def index():
return 'Hello World'
app.run()

三 Flask的三剑客

1 Response
相当于Django当中的HttpResponse


from flask import Flask
app = Flask(__name__)


@app.route("/index")
def index():
    return "123"   #返回字符串至客户端


2 render_template(相当于django中的render)

from flask import render_template
app = Flask(__name__)

@app.route('/index')
def index():
      return render_template("login.html")  #templates中的模板页面


3  redirect  #重定向
from flask import redirect

app = Flask(__name__)

@app.route('/index')
def index():
   return redirect("/login") # 302

 四 Flask中的两个小儿子

1.from flask import jsonify
retrun jsonify({name:111}) # 返回json标准的字符串 
原理是:Content-Type:application/json

2.from flask import send_file
return send_file(path)
# 打开文件并返回文件内容(自动识别文件格式)

 五 falsk中的request

flask中的request是一个全局的

from flask import request
request.method # 请求方式
request.form # 存放FormData中的数据 to_dict 序列化成字典
request.args # 获取URL中的数据 to_dict 序列化成字典
request.url # 访问的完整路径
request.path # 路由地址
request.host # 主机地址
request.values # 获取 FormData and URL中的数据 不要用to_dict
request.json  # 如果提交时请求头中的Content-Type:application/json 字典操作
request.data  # 如果提交时请求头中的Content-Type 无法被识别 将请求体中的原始数据存放 byte
request.cookies # 获取Cookie中的数据
request.headers # 获取请求头
request.files # 序列化文件存储 save()

 六 Jinja2中的比较重要的几个

1 注意:
{{}}引用变量 执行函数
{%%} 逻辑代码

2 Markup 安全标签的字符串  相当于django当中的safe
from flask import Flask,Markup

tag = "<input type='text' name='username'>"   #在Markup中会熏染成真正的input标签
tag = Markup(tag)

把tag传到html中熏染  {{tag}}




3 template_global(全局都可以使用)与template_filter(过滤器)
from flask import Flask

app = Flask(__name__)
@app.template_global()
def func(a,b):
    return a+b

@app.template_filter()
def fil(a,b,c):
    print(a)
    return a+b+c
app.run(debug=True)   #当加入debug=True时,代码修改后会自动执行 不用主动执行



前端中使用  
 {{ func(5,5) }}
  {{ 10 | fil(2,3) }}

 八 Flask中的session

注意 session与request一样 都是全局的 都需要从flask 中导入
from flask import Flask,session
app = Flask(__name__)
app.secret_key = "DragonFire"  # "加密字符串" 这个加密字符串可自行定义 # 用于序列化和反序列化 session信息  

@app.route("/")
def index():
    if not session.get("user"):
        return redirect("/login")
    return render_template("index.html")


@app.route("/login", methods=["POST", "GET"])
def login():
    if request.method == "GET":
        return render_template("login.html")

    if request.form.get("username") == "alex" and request.form.get("password") == "DSB":
        session["user"] = request.form.get("username") + "先帝创业未半而中道崩殂"
        return redirect("/")

# Flask-Session
app.run(debug=True)






#注意
由于Flask中默认Session 存放位置 - 客户端的Cookies中
所以Session需要加密 用到 secret_key
请求进入视图函数 带上cookie 将Session从cookie序列化出来 通过secret_key 反序列化成字典
Flask-Session
原文地址:https://www.cnblogs.com/mlhz/p/10252432.html