假设你已经安装了Flask,如果没有安装请参考 Flask开发环境配置
小程序
Flask小程序
“`
from flask import Flask
app = Flask(name)
@app.route(‘/’)
def hello_world():
return “Hello World!”
if name == ‘main‘:
app.run()
``
http://127.0.0.1:5000
保存为hello.py,但是最好不要保存为flask.py,这样会和Flask本身有冲突
然后就可以再浏览器中输入,就可以看到
Hello World!`
分析一下上面这段代码:
- 引入Flask类
- 创建了一个Flask的实例
- 使用了一个装饰器,使得访问URL时,触发对应的方法
- 访问方法返回相关的内容
- 运行run方法
停止 Server,使用Ctrl-C
调试模式
上面的run()
方法会启动一个本地的开发服务器,但是你每次修改代码之后,就需要重新启动这个服务器
这样的开发体验不是很好,Flask提供一个更好的方式,在开发时,我们可以使用调试模式,这样每次如果
有代码修改服务器就会自动重新加载,有两种方式打开调试模式
1. 设置对应的flag值为true
app.debug = True
app.run()
2. 在执行run方法时,传入相应的参数
app.run(debug=True)
这两种方式的效果是一样的
但是在部署的环境中,不建议使用开发者模式,这样看会有潜在的风险,可能会执行一些恶意代码
URL路由
现在的web应用都有很简洁漂亮的URL,这样的URL更便于人们记忆,尤其是在现在移动设备比较流行
的时代,这样更方便在移动端访问
在上面的代码中我们可以看到,使用了route()
的装饰器,来绑定一个方法和对应的URL
“`
@app.route(‘/’)
def index():
return “Index page”
@app.route(‘/hello’)
def hello():
return “Hello World!!”
“`
但是还可以根据不同的规则生成一些动态的URL
变量规则
可以在URL中添加变量,需要用到 <variable_name>
这种方式,对应的方法需要接受这个参数
也可以在变量中加入不同的规则,具体的写法是 <converter:variable_name>
“`
@app.route(‘/user/’)
def show_user_profile(username):
return ‘User %s’ % username
@app.route(‘/post/’)
def show_post(post_id):
return ‘Post %d’ % post_id
“`
转换器包括:
类型 | 描述 |
---|---|
string | (默认) 文本不接受斜线 |
int | int型数字 |
float | 浮点型数字 |
path | 文本可以包含斜线 |
any | |
uuid | uuid文本 |
URL唯一/重定向行为
Flask的URL的规则是基于Werkzeug的路由规则,受到Apache和早期HTTP Server的影响
“`
@app.route(‘/projects/’)
def projects():
return ‘The project page’
@app.route(‘/about’)
def about():
return ‘about page’
“`
中两个路由看起来没有太大区别,第一个路由结尾有/,第二个路由结尾没有/,在访问时会有什么影响呢
第一种情况,如果访问时没有结尾的/,Flask会重定向到对应的有/的方法
第二种情况,如果访问时结尾带/,那么就会报404 ‘Not Fount’的错误
HTTP方法
HTTP协议有不同的方法供URL访问,默认提供是GET方法,但是可以在路由中通过参数来改变
@app.route('/login',methods=['GET','POST'])
def login():
if request.method == 'POST':
do_the_login()
else :
show_the_login_form()
这个login方法,两种方式都可以访问
- GET
- POST
- HEAD
- PUT
- DELETE
- OPTIONS
静态文件
在动态网页中也需要静态文件,通常是CSS和JavaScript文件,在Flask中只需创建一个 static
的文件夹,然后将文件放进去即可,可以使用下面的方法生成静态文件的路由
url_for('static',filename='style.css')
渲染模板
开发人员是不希望通过python来写HTML文件的,这样太繁琐了,在Flask中提供了Jinja2的引擎来
渲染HTML模板
渲染模板只需要 render_template()
方法即可,你只需要将需要渲染的文件名传入即可
“`
from flask import render_template
@app.route(‘/hello/’)
@app.route(‘/hello/’)
def hello(name=None):
return render_template(‘hello.html’,name=name)
“`
Flask会在templates文件夹中对应的文件,两种情况的文件的分布如下:
1. moudle
2.package