使用flask开启一个简单的应用

Flask是非常流行的 Python Web框架,它能如此流行,原因主要有如下几点:

。有非常齐全的官方文档,上手非常方便。

。有非常好的扩展机制和第三方扩展环境,.工作中常见的软件都会有对应的扩展。自己动手实现扩展也很容易。

。社区活跃度非常高。

。微框架的形式给开发者更大的选择空间。

.Pocoo团队出品,Flask和相关依赖(Jinja2、Werkzeug )的设计很优秀。比如使用装饰器配置路由、用Blueprint实现模块化、请求/应用上下文等。

我们可以从Flask框架入手,之后再学习Django框架

1、开启一个简单的应用

1、安装Flask

bash 复制代码
pip install Flask

2、开始一个简单的应用,创建一个文件web.py

python 复制代码
#--coding:utf-8
from flask import Flask

app = Flask(__name__)

@app.route('/show/index')
def func():
    return "我爱我的祖国"

if __name__ == '__main__':
    app.run()

运行web.py

在浏览器打开,输入http://127.0.0.1:5000/show/index 看到如下效果:

下面我们来解释下上面几行代码

第1行 ,#--coding:utf-8 :是声明Python源文件编码的语法。该编码信息后续会被Python解析器用于解析源文件。如果没有特殊的原因,应该统一地使用utf-8,而不要使用gb18030,gb2312等类型。

第2行,引入Flask类,Flask类实现了一个wSGI应用。

第4行,app是 Flask的实例,它接收包或者模块的名字作为参数,但-般都是传递__name__。让flask.helpers.get_root_path函数通过传入这个名字确定程序的根目录,以便获得静态文件和模板文件的目录。

第6~8行,使用app.route装饰器会将URL和执行的视图函数的关系保存到app.url_map属性上。处理URL和视图函数的关系的程序就是路由,这里的视图函数就是func。装饰器里面的url就是我们访问的路径。

第11行,执行app.run就可以启动服务了。默认Flask只监听虚拟机的本地127.0.0.1这个地址,端口为5000。如果要修改端口就需要加参数 app.run(host='0.0.0.0',port=8080)。0.0.0.0表示监听所有地址,这样就可以在本机访问了。指定了8080端口后,浏览器要访问 http://127.0.0.1:8080/show/index

注意,默认的app.run的启动方式只适合调试,不要在生产环境中使用,生产环境应该使用Gunicorn或者uwSGI

2、配置管理

项目中的一些全局的配置我们应该存放到一个文件中,app.config支持多种更新配置的方式。假如现在有个config.py的配置文件,其中的内容如下:

A=1

方式一:

python 复制代码
app.config.from_object('config')   #通过字符串的模块名字
#或者引用之后直接传入模块对象
import comfig
app.config.from_object(config)

方式二:

通过文件名字加载。直接传入文件名字,但是不限于只使用.py后缀的文件名。

python 复制代码
app.config.from_pyfile('config.py', silent=True) #默认当配置文件不存在时会抛出异常,使用silent=True的时候只是返回False,但不会抛出异常

动态url 规则

URL 规则可以添加变量部分,也就是将符合同种规则的URL抽象成一个URL模式,如/item/1/ 、/litem/2/、/item/3....我们就得这样写:

python 复制代码
#--coding:utf-8
from flask import Flask

app = Flask(__name__)

@app.route('/item/<id>/')
def item(id):
    return 'Item:{}'.format(id)

if __name__ == '__main__':
    app.run()

运行后:

尖括号中的内容是动态的,凡是匹配到/item/前缀的URL都会被映射到这个路由上,在内部把id作为参数而获得。

它使用了特殊的字段标记<variable_name>,默认类型是字符串。如果需要指定参数类型需要标记成converter:variable_name这样的格式,converter有下面几种:

  • string:接受任何没有斜杠"/"的文本(默认)。
  • int:接受整数。
  • float:同 int,但是接受浮点数。
  • path:和默认的相似,但也接受斜杠。
  • uuid:只接受uuid字符串。
  • any:可以指定多种路径,但是需要传入参数。

调试模式

虽然app.run这样的方式适用于启动本地的开发服务器,但是每次修改代码后都要手动重启的话,比较麻烦。如果启用了调试模式,服务器会在代码修改后自动重新载入,并在发生错误时提供一个能获得错误上下文及可执行代码的调试页面

有两种途径来启动调试模式:

1、直接在应用对象上设置:

python 复制代码
 app.debug = True
    app.run()

2、作为run的参数传入

python 复制代码
 app.run(debug=True)

启动后

python 复制代码
F:\myfile\python\code\webproject\venv\Scripts\python.exe F:/myfile/python/code/webproject/web.py
 * Serving Flask app 'web'
 * Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on http://127.0.0.1:5000
Press CTRL+C to quit
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 343-485-244

当程序有异常而进入错误堆栈模式,第一次点击某个堆栈想查看对应变量的值的时候,浏览器会弹出一个要求你输入这个PIN值的输入框。这个时候需要在输人框中输入343-485-244,然后确认,Werkzeug会把这个PIN作为cookie的一部分存起来(失效时间默认是8小时),失效之前不需要重复输入。而这个PIN码攻击者是无法知道的。

相关推荐
尚学教辅学习资料3 分钟前
基于SpringBoot的医药管理系统+LW示例参考
java·spring boot·后端·java毕业设计·医药管理
南宫理的日知录26 分钟前
99、Python并发编程:多线程的问题、临界资源以及同步机制
开发语言·python·学习·编程学习
coberup35 分钟前
django Forbidden (403)错误解决方法
python·django·403错误
龙哥说跨境1 小时前
如何利用指纹浏览器爬虫绕过Cloudflare的防护?
服务器·网络·python·网络爬虫
monkey_meng1 小时前
【Rust中的迭代器】
开发语言·后端·rust
余衫马1 小时前
Rust-Trait 特征编程
开发语言·后端·rust
monkey_meng1 小时前
【Rust中多线程同步机制】
开发语言·redis·后端·rust
小白学大数据1 小时前
正则表达式在Kotlin中的应用:提取图片链接
开发语言·python·selenium·正则表达式·kotlin
flashman9111 小时前
python在word中插入图片
python·microsoft·自动化·word
菜鸟的人工智能之路1 小时前
桑基图在医学数据分析中的更复杂应用示例
python·数据分析·健康医疗