Flask Web开发入门

1、python  web框架对比

Django 

优点:

  • Model ORM 、 Session

  • ModelForm
  • amdin
  • 大而全

不足之处:

  • 开发小功能,会加载不需要的组件,浪费资源

Flask 

优点:

  • 小而精,三方组件全
  • 内置session

缺点:

  • 严重依赖第三方组件,稳定性相对较差


Tornado

优点:

  • 异步IO 非阻塞 原生websocket
  • 非常干净

缺点:

  • 不精不全

Sanic

优点:

  • 同时兼备tornado和flask的优势
  • 目前热度最高

 

2、Flask快速入门

2.1基本用法

入门仪式Hello  world

安装  pip  install  flask

from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello World!'


if __name__ == '__main__':
    app.run()

 

 

2.2Response三剑客

与django对比来学习,方便理解,左边django,右边flask

django方法                                                                        Flask方法

返回字符串

 

HttpResponse:                                   return "Hello World" 返回字符串至客户端

from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
    # 返回字符串 
    return '我喜欢你'


if __name__ == '__main__':
    app.run(debug=True)

 

返回模板由浏览器渲染
render                                                                                                                        : return render_template("login.html")

 app.py

from flask import Flask, render_template

app = Flask(__name__)


@app.route('/')
def hello_world():
    # 返回与Django中的 render 使用一致 返回模板由浏览器渲染
    return render_template('index.html')


if __name__ == '__main__':
    app.run(debug=True)

 

 

 

 

 

跳转,重定向URL
redirect:                                                     return redirect("/login") # 302

from flask import Flask, render_template, redirect

app = Flask(__name__)


@app.route('/')
def hello_world():
    # 重定向到login
    return redirect('/login')


@app.route('/login')
def login():
    # 返回html模板
    return render_template('login.html')


if __name__ == '__main__':
    app.run(debug=True)

 


2.3Flask中的小儿子

 

 



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
get post delete put

django
def django(req):
    return HttpResponse("hello")


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
{{}} 引用变量 执行函数
{%%} 逻辑代码
|safe Markup 安全标签字符串
@app.template_global()
@app.template_filter()
{% macro create_input(na,ty) %}
{{ na }} : <input type="{{ ty }}" name="{{ na }}">
{% endmacro %}
{{ create_input("username","text") }}


Flask 中的 Session

app.secret_key = "加密字符串" # 用于序列化和反序列化 session信息

由于Flask中默认Session 存放位置 - 客户端的Cookies中
所以Session需要加密 用到 secret_key
请求进入视图函数 带上cookie 将Session从cookie序列化出来 通过secret_key 反序列化成字典
Flask-Session
















posted @ 2019-04-12 15:24  Mr_Yun  阅读(242)  评论(0)    收藏  举报