Flask是一个和django类似的框架
不同之处在于:
django——完善完整高集成的框架
flask——不包含数据,框架,抽象库,等,需要自己去配置
安装
- 安装自己的虚拟环境
- 安装flask
pip install flask
写入
from flask import Flask
# 初始化,--name--代表主模块名或者包
app = Flask(__name__)
# 路由
@app.route('/')
def hello():
# 视图函数
return 'HELLO,world'
if __name__ == '__main__':
# 启动
app.run(debug=True)
大致分为初始化,视图和启动
运行(方法一)
右键直接run或者python xx.py
默认127.0.0.1:5000端口
run的参数
run里面有参数:
debug=True 这样可以将错误显示在浏览器中
port=’自己端口号’ 修改端口号
host = ‘0.0.0.0’ 都可以访问 ip
app.run(debug=True)
修改运行方式(方法二)
修改成类似django的用法 —— python manage runsever
1. 安装
pip install Flask-Server
2. 配置初始化
from flask_script import Manager
app = Flask(__name__)
manager = Manager(app=app)
3 修改启动参数
if __name__ == '__main__':
# 启动
# app.run(debug=True)
manager.run()
运行参数
与上面不一样的是不在run里面写参数,而是类似django一样
python xxx.py runserver -p(端口号) -h(IP) -d(debug模式)
同理,也可以开启debug模式,这样就可以打断点了
蓝图(类似用来管理urls)
将url、启动和方法从一个py文件分离开
pip install flask-blueprint
1. 初始化
单独创建一个文件夹写入,url和views方法的
创建APP文件夹,创建views.py,写入蓝图和方法
from flask import Blueprint
blue = Blueprint('first', __name__)
把@app改成@blue
@blue.route('/')
def hello():
# 视图函数
return 'HELLO,world'
2. 路由注册
在该文件下创建init文件
相当于将app重新定义
def xx():
app = Flask(__name__)
app.register_blueprint(blueprint=blue)
return app
然后启动页面——可以改成manage。py——这样启动的时候更类似与django
from APP import xx
blue = xx()
manager = Manager(app=blue)
if __name__ == '__main__':
manager.run()
指定路径
如果页面或者层叠样式加载不出来可以在init里面配置:
import os
# os.path.dirname表示上级路径
# os.path.abspath(__file__)表示当前路径
# join表示说明在哪个路径
# Flask里面是固定写法
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
templa = os.path.join(BASE_DIR, 'templates')
stat = os.path.join(BASE_DIR, 'static')
app = Flask(__name__, template_folder=templa, static_folder=stat)
等于告诉电脑你配置的地址具体在哪里,让它可以找到
动态传参
和django不一样,这个不需要配置url,然后views,再用正则(d+)传参的过程
app中传入<>,然后def中引用
默认string类型
可以用int,float等
# 动态传入url参数
@app.route('/he/<name>/')
def he(name):
# 传入的name为字符串
print(name)
return 'hello %s' % name
这样在浏览器中写入
127.0.0.1/he/xxx 就可以展示出xxx了
注意默认传入的为str类型
如果需要指定传入的参数为int类型
int类型
# 修改后只能传入数字,否则报错
@app.route('/hello/<int:name>/')
def hello_int(name):
# 传入的name为整数
print(name)
return 'hello %s' % name
path:‘’/‘’也是当做字符串返回
@blue.route('/getpath/<path:ff>')