版权声明:共同努力,有不足的地方欢迎大家点出 https://blog.csdn.net/qq_42897012/article/details/84428504
flask入门
封装:tcp、ip http,socket,web开发框架
安装
pip install flask
(了解) flask 框架组成
在安装flask包时,flask依赖的相关包也会安装。
- flask 核心代码、方法封装
- jinja2 前段渲染值得语法
- MarkupSafe 前端特殊字符转义,防止后端渲染时出现问题。
- itsdangerous 加密和安全工具
- Werkzeug 德语。http协议封装。
flask约定俗成架构
├─ model.py 类、数据库表结构 模型层
├── app.py 路由、方法、业务逻辑、渲染模板方法 控制层
├── static .css .js .jpg 静态资源文件
└── templates .html 网页静态文件 控制层
基本框架
from flask import Flask, render_template
app = Flask(__name__) # 生成应用实例
# 路由route
@app.route('/') # 匹配请求地址
def index():
name = '小黑'
age = 10
return render_template('index.html', name = name, age=age)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8888)
"""
# render_template() 先获取HTML模板信息,插入后端变量,最终才返回给浏览器。
本质:
# return """
# <html>
# <body>
# <h1> hello {}
# </body>
# </html>
# """.format(name)
"""
完成上面的步骤一个简单的路由就创建完成了,输入点击运行栏中的网址就能直接访问了。
注意&小知识点
路由:
- 匹配固定的地址。
‘/’ → ‘//127.0.0.1:5000’ //127.0.0.1:5000 匹配根目录
flask命令行工具:
flask run --port=5001 --host=‘0.0.0.0’
app.run方法
app.run()方法:有几个参数
- hots 并不是服务器的运行地址,服务器运行在本地,而是控制允许访问的客户端的地址段。默认是127.0。0.1只运行自己浏览器访问,不允许局域网其他人访问, 如果配置成’0.0.0.0’,表示接受任何ip地址的客户端,包括局域网其他人访问。
其他人有的可以访问,包括局域网其他人访问,原因是我们现在运行的flask服务 - port 端口,整数
- (了解)threaded=True 开启多线程,局域网内接受多用户访问,实测也不够稳定。
- debug=True, 开启debug模式,修改代码服务器自动重启。也可以app.config[‘DEBUG’] = True。看到日志Debug mode:on 目前是1.0.2版本。
之前有一个版本刚才的设置并不会生效,原因是flask app运行时读取环境变量里的配置值,解决 set_FLASK_DEBUG=True。
flask1.0.2版本,开启debug模式,终端输入。:
set FLASK_APP = app.py
set FLASK_ENV = development
flask run
优点:敏感变量存入系统环境变量,flask命令启动时会去环境变量中读配置。flask命令除了包含python命令的解释功能
之前版本会在命令行看到服务自动重启。而1.0.2版本看不到重启信息,但是生效。
可能出现的错误
- not found 检查路由规则浏览器请求的url是否匹配
- Unicode decode error: postion 0 。flask 1.0。1源代码gethostaddr方法,如果windows主机名是中文就会报错。
- 修改代码,重启服务器,刷新浏览器后结果没有改变。原因ctrl+C后并没有真正结束之前的服务。cmd中运行相关命令可以看到5000端口运行多个服务。这样请求就到了之前的代码上。解决方法结束掉端口上的进程或重启。
- aap.py同级目录下新建了index.html, app.py文件中 return render_template(“index.html”),结果404。原因flask是一个完整的框架,有自己的规定,render_template
函数会补全域名和template目录,所以这个函数里的参数并不是一个普通的相对路径。
5.修改代码没有生效。原因是pycharm启动了多个程序实例。解决方法
“”"