Flask初识,Response三剑客,jsonify以及send_file、Request,模板语言 Jinja2,用户登录例子,内置Sessio

首先,要看你学没学过Django 如果学过Django 的同学,请从头看到尾,如果没有学过Django的同学,并且不想学习Django的同学,轻饶过第一部分

三大主流Web框架对比

1、Django:

  优点:大而全,集成了很多组件,Models Admin Form 等等, 不管你用得到用不到,反正它全都有,属于全能型框架;django通常用于大型Web引用,由于内置组件足够强大,所以使用Django开发可以一气呵成

  缺点:这么多资源一次性加载会造成一部分资源浪费

2、Flask:

  优点: 小而轻,原生组件几乎为0,三方提供的组建请参开Django非常全面,属于短小精悍型框架;通常应用于小型应用和快速构建应用,其强大的三方库,足以支撑一个大型的Web应用

  缺点:稳定性相对较差

3、Tornado

  优点:原生异步非阻塞,在IO密集型应用型和多任务处理上占据绝对性的优势,属于专注型框架;通常用于API后端应用,游戏服务后台,其内部四线的异步非阻塞老稳了。

  缺点:干净,三方及原生组件几乎为0,连个session都不支持 

Flask 的安装与HelloWorld

Flask的安装特别难,但是鄙人很懒,肯定会找出一个最简单的方法教你们,具体操作如下:

pip install Flask

别问我还有没有复杂的方法,没有!

Flask安装完成了,下面使用Flask走一遍仪式:

三行Flask

from flask import Flask
app=Flask(__name__)
app.run()

执行输出:

 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

默认端口是5000,访问页面:

Flask&&人工智能AI --1

因为没有定义路由,所以报404。但是服务是起来了!

六行Flask

from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
    return "HelloWord!"
app.run()

重启程序,刷新页面

Flask&&人工智能AI --1

 实现了Flask的第一个HelloWord程序

解读一下代码:

from flask import Flask    #导入flask类
app = Flask(__name__)  #实例化Flask对象app
@app.route("/")    #app中的route装饰器
def index():    #视图函数
    return "HelloWord!"   #返回响应体

# 监听地址为0.0.0.0,表示服务器的所有网卡
# 5000是监听端口
# debug=True表示启动debug模式。当代码有改动时,Flask会自动加载,无序重启!
app.run("0.0.0.0",5000,debug=True)  # 启动Flask服务

注意:!!!  默认的debug模式是关闭的。如有代码改动,需要重启flask才能生效!但是开启的debug模式,代码一定有改动,会立刻加载,无需重启!!!

 

还有一点,app = Flask(__name__)  这里面的__name__  表示 标识模块的名字的一个系统变量还可以是app=Flask(”dsds“),这样运行也没有问题。那么为什么要用__name__呢?后面学习到蓝图会用到!

启动了Flask,得到了返回值,打印在页面上

本文参考:

https://www.cnblogs.com/DragonFire/p/9254637.html

二、Response三剑客 -- render、redirect、HttpResponse

HttpResponse

在Flask中的HttpResponse,其实就是返回字符串至客户端

@app.route("/")  # app中的route装饰器
def index():  # 视图函数
    return "HelloWorld!!"  # HttpResponse

Redirect

from flask import Flask  # 导入Flask类
from flask import redirect  # 导入flask中的redirect

app = Flask(__name__)


# app中的route装饰器,用来指定视图函数的URL地址
@app.route("/redi")
def redi():  # 视图函数
    return redirect("/")  # redirect跳转至"/"


@app.route("/")
def index():  # 视图函数
    return "hello"


if __name__ == '__main__':
    app.run("0.0.0.0", 5000, debug=True)

每当访问"/redi"这个地址的时候,视图函数redi会触发redirect("/") 跳转到url地址:  "/" 并会触发"/"对应的视图函数index()

 

访问url:  http://127.0.0.1:5000/redi

Flask&&人工智能AI --1

查看网页工具,查看网络。它经历了2次请求!

Flask&&人工智能AI --1

render (render_template)

编辑文件demo.py,代码如下

from flask import Flask  # 导入Flask类
from flask import render_template  # 导入flask中的render_template

app = Flask(__name__)


@app.route("/home")
def home():  # 视图函数
    # 渲染html模板,返回html页面
    return render_template("home.html")


if __name__ == '__main__':
    app.run("0.0.0.0", 5000, debug=True)

在当前py文件目录中创建templates,在此目录下创建文件home.hml

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>Flask</h1>
</body>
</html>

重启flask,访问home页面,效果如下:

Flask&&人工智能AI --1

 

目录结果如下:

./
├── demo.py
└── templates
    └── home.html——

HTML模板渲染是每个Web框架中都必须有的,至于render_template的具体用法,留个悬念,往后看

注意: 如果要使用render_template返回渲染的模板,请在项目得主目录中加入一个目录remplates

否则可能会有一个jinja2的异常

Flask&&人工智能AI --1

 

遇到上述的问题,基本上就是你的template的路径问题

 

为什么要一定要创建templates文件夹呢?叫abc,行不行呢?不行!

看这一行代码

app = Flask(__name__)

使用Ctrl+鼠标左键,点击Falsk,查看源码

def __init__(
    self,
    import_name,
    static_url_path=None,
    static_folder='static',
    static_host=None,
    host_matching=False,
    subdomain_matching=False,
    template_folder='templates',
    instance_path=None,
    instance_relative_config=False,
    root_path=None
):
View Code

相关文章: