一、基础准备
在开始学习前,我们需要完成虚拟环境的创建和并在虚拟环境中Flask的安装
虚拟环境
建议在开发环境和生产环境下都使用虚拟环境来管理项目的依赖。
为什么要使用虚拟环境?随着你的 Python 项目越来越多,你会发现不同的项目会需要 不同的版本的 Python 库。同一个 Python 库的不同版本可能不兼容。
虚拟环境可以为每一个项目安装独立的 Python 库,这样就可以隔离不同项目之间的 Python 库,也可以隔离项目与操作系统之间的 Python 库。
Python 3 内置了用于创建虚拟环境的 venv 模块。如果你使用的是较新的 Python 版本,那么请接着阅读本文下面的内容。
如果你使用 Python 2 ,请首先参阅 安装 virtualenv 。
创建一个虚拟环境
创建一个项目文件夹,然后创建一个虚拟环境。创建完成后项目文件夹中会有一个 venv 文件夹:
$ mkdir myproject
$ cd myproject
$ python3 -m venv venv
在 Windows 下:
$ py -3 -m venv venv
在老版本的 Python 中要使用下面的命令创建虚拟环境:
$ python2 -m virtualenv venv
在 Windows 下:
\Python27\Scripts\virtualenv.exe venv
激活虚拟环境
在开始工作前,先要激活相应的虚拟环境:
$ . venv/bin/activate
在 Windows 下:
venv\Scripts\activate
激活后,你的终端提示符会显示虚拟环境的名称。
安装 Flask
在已激活的虚拟环境中可以使用如下命令安装 Flask:
$ pip install Flask
Flask 现在已经安装完毕。请阅读 快速上手 或者 文档目录 。
与时俱进
如果想要在正式发行之前使用最新的 Flask 开发版本,可以使用如下命令从主分支 安装或者更新代码:
$ pip install -U https://github.com/pallets/flask/archive/master.tar.gz
安装 virtualenv
如果你使用的是 Python 2 ,那么 venv 模块无法使用。相应的,必须安装 virtualenv.
在 Linux 下, virtualenv 通过操作系统的包管理器安装:
Debian, Ubuntu
$ sudo apt-get install python-virtualenv
CentOS, Fedora
$ sudo yum install python-virtualenv
Arch
$ sudo pacman -S python-virtualenv
如果是 Mac OS X 或者 Windows ,下载 get-pip.py ,然后:
$ sudo python2 Downloads/get-pip.py
$ sudo python2 -m pip install virtualenv
在 Windows 下,需要要 administrator 权限:
\Python27\python.exe Downloads\get-pip.py
\Python27\python.exe -m pip install virtualenv
现在可以返回上面, 创建一个虚拟环境 。
接下来试着写出我们的第一个Flask应用
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run()
那么,这些代码是什么意思呢?
-
首先我们导入了 Flask 类。 该类的实例将会成为我们的 WSGI 应用。
-
接着我们创建一个该类的实例。第一个参数是应用模块或者包的名称。如果你使用 一个单一模块(就像本例),那么应当使用 name ,因为名称会根据这个 模块是按应用方式使用还是作为一个模块导入而发生变化(可能是 ‘main’ , 也可能是实际导入的名称)。这个参数是必需的,这样 Flask 才能知道在哪里可以 找到模板和静态文件等东西。更多内容详见 Flask 文档。
-
然后我们使用 route() 装饰器来告诉 Flask 触发函数的 URL 。
-
函数名称被用于生成相关联的 URL 。函数最后返回需要在用户浏览器中显示的信息。
把它保存为 hello.py 或其他类似名称。请不要使用 flask.py 作为应用名称,这会与 Flask 本身发生冲突。
了解了Flask基础后,在完成基础准备后我们就可以开始学习基础交互内容了
二、基础交互
GET
通过get,用户就能得到我们传输的数据
路径传参 (params)
通过用户访问的路径传递参数
@app.route("/get1")
def test1():
name = request.args.get("name")
print(name)
return "得到了" + name
通过在路径后添加"?name=xxx"
用户就得到了参数"xxx"
路径传参 (path)
与前一种方法类似
@app.route("/get2/<int:id>")
def test2(id):
print(type(id))
return f"得到了{id}"
POST
得到用户发送的数据
form-data
@app.route("/post1", methods=["POST"])
def test3():
username = request.form.get("username")
password = request.form.get("password")
data = {
"username": username,
"password": password
}
print(username,password)
return data
这里我使用了Postman来进行测试
这样我们便得到了用户上传的用户名和密码
body json
传输json格式的数据
json,轻量级的数据交换格式
class Student():
def __init__(self, id, name, age):
self.id = id
self.name = name
self.age = age
def __repr__(self):
return f"Student[id={self.id},name={self.name},age={self.age}"
@app.route("/post2", methods=["POST"])
def test4():
id = request.json.get("id")
name = request.json.get("name")
age = request.json.get("age")
stu = Student(id, name, age)
print(stu)
return "stu"
PUT
方法一
从客户端向服务器传送的数据取代指定的文档的内容。
与前文方法类似
@app.route("/put1", methods=["PUT"])
def test5():
name = request.args.get("name")
print(name)
return "得到了" + name
方法二
@app.route("/put2/<int:id>", methods=["PUT"])
def test6(id):
print(type(id))
return f"得到了{id}"
其他的方法也类似,在这里就不列出来了
DELETE
@app.route("/delete", methods=["DELETE"])
def test7():
name = request.args.get("name")
print(name)
return "得到了" + name
三、其他
Flask重定向
from flask import Flask, request
from werkzeug.utils import redirect
app = Flask(__name__)
@app.route("/bili")
def bili():
return redirect("https://www.bilibili.com")
app.run(debug=True)
输入
敲回车后