Flask框架
我遇到的bug:
无论在怎样修改return值,网页内容都是千年不变。
非常非常恶心:端口被占用的问题
解决方法1:重启电脑
解决方法2:查看那些端口被占用:干掉他
Netstat -ano|find “5000”
进入资源监视器,找到相应的pid,将其终止
# 但是有一个问题 治标不治本 再次运行程序 端口依旧被占用
最终解决方法:修改端口
app.run(
host='0.0.0.0',
port=5002,
debug=True
)
可完美解决端口被占用的问题
安装虚拟环境
思考:为什么要用虚拟环境呢?
虚拟环境可以为每一个项目安装独立的 Python 库 隔离不同项目之间的 Python 库
版本更新会冲突 二虚拟环境互不影响 (解决维护不同应用程序对应不同版本的问题)
创建一个项目文件夹,然后创建一个虚拟环境。创建完成后项目文件夹中会有一个 venv 文件夹:
创建虚拟环境的 venv 模块
# 创建目录
mkdir myproject
# 切换到目录
cd myproject
# 创建虚拟环境
python -m venv venv
激活虚拟环境
基于window:venv\Scripts\activate
安装框架
pip install flask
新建一个应用
mkdir app
# 创建__init__.py文件
# 导入类
from flask import Flask
# 新建一个程序对象
app = Flask(__name__) # __name__ 变量是一个Python预定义的变量,它表示当前调用它的模块的名
字
方法2:
virtualenv的优点:
是不同应用的开发环境独立
环境升级不影响其他应用,也不会影响全局的python环境
它可以防止系统中出现包管理混乱和版本的冲突
pip install virtualenv
virtualenv Mytest
在scripts 目录下
activate.bat 进入虚拟环境
deactivate 退出虚拟环境
为了避免每次输入相对路径
pip install virtualenvwrapper-win
mkvirtualenv MyTest2 创建虚拟环境
workon 查看当前虚拟环境
workon 虚拟环境 进入虚拟环境
deactivate 退出虚拟环境
实例
from flask import Flask
# 表示给对象取一个名
app = Flask(__name__)
# 表示让这个函数与这个url创建个对应关
# 使用 route() 装饰器来告诉 Flask 触发函数的 URL
@app.route('/')
def hello_word():
"""函数最后返回需要在用户浏览器中显示的信息"""
return 'Hello Word'
if __name__ == '__main__':
app.run()
# 终端里导出 FLASK_APP 环境变量:
可能遇到错误
**出错重启** @app.route('/') @app.route('/index')
参数描述
app = Flask(__name__) __name__ -------传入的是当前的模块 寻找工程目录
配置说明
config 实际上继承于字典,并且可以像修改字典一样修改它:
app = Flask(__name__)
app.config['DEBUG'] = True
可以使用 dict.update() 方法来一次性更新多个键:
app.config.update(
DEBUG=True,
SECRET_KEY='...'
)
调试模式
有两种途径来启用调试模式。一种是直接在应用对象上设置:
app.debug = True
app.run()
另一种是作为 run 方法的一个参数传入:
app.run(debug=True)
注意:和前面的配置是没有区别的
flask获取参数方式:
request.form.get("key", type=str, default=None) 获取表单数据
request.args.get("key") 获取get请求参数
request.values.get("key") 获取所有参数
Flask路由
Flask中的route()装饰器用于将URL绑定到函数。例如:
@app.route(‘/hello’)
def hello_world():
return ‘hello world’
解释说明:
URL '/ hello' 规则绑定到hello_world()函数
如果用户访问http:// localhost:5000 / hello URL hello_world()函数的输出将在浏览器中呈现。
Flask 变量规则
向规则参数添加变量部分,可以动态构建URL。此变量部分标记为<variable-name>
作为关键字参数传递给与规则相关联的函数。
@app.route('/hello/<name>')
def hello_name(name):
# return 'Hello %s!' % name
return f'Hello {name}'
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2PBGVbsc-1640509942157)(C:\Users\51593\AppData\Roaming\Typora\typora-user-images\image-20210616091009079.png)]
Flask HTTP方法
可以通过为route()装饰器提供方法参数来更改此首选项
先让我们创建一个HTML表单,并使用POST方法将表单数据发送到URL。
模板
# render_template方法 :渲染模板
# 参数1: 模板名称 参数n: 传到模板里的数据
PBGVbsc-1640509942157)]
Flask HTTP方法
可以通过为route()装饰器提供方法参数来更改此首选项
先让我们创建一个HTML表单,并使用POST方法将表单数据发送到URL。
模板
# render_template方法 :渲染模板
# 参数1: 模板名称 参数n: 传到模板里的数据