Flask入门【1】
flask简介
flask是使用python编写的web微框架,我这里使用的是pycharm直接新建的flask项目进行操作。
代码解析
1.注册路由
# 注册路由,参数为url,使url与函数建立关联
@app.route('/')
def hello_world():
return 'Hello, world!'
在一个web应用里,客户端和服务器上的Flask程序的交互可以简单概括为以下几步:
- 用户在浏览器中输入url访问某个资源
- Flask接受用户请求并分析请求的URL
- 为这个URL找到对应的处理函数
- 执行函数并生成响应,返回给浏览器
- 浏览器接收并解析响应,将信息显示在页面中。
Flask中,只需为函数附加app.route()装饰器,并传入URL规则作为参数,就可以让URL与函数建立关联。这个过程叫做注册路由,路由负责管理URL和函数之间的映射,而这个函数则被称为视图函数。
Tips:route装饰器的第一个参数是URL规则,必须以’/'开始,这里的url是相对url
2. 为视图绑定多个url
@app.route('/lol/')
@app.route('/lol/lol/')
def hello():
return '<h1>LOL!</h1>'
用户访问以上两个url均会触发hello函数,获得相同的相应。
3. 动态URL
# 动态url,defaults中为name参数设置默认值,相当于def greet(name=Programmer):
@app.route('/greet', defaults={'name': 'Programmer'})
@app.route('/greet/<name>')
def greet(name):
return f'<h1>Hello, {name}</h1>'
可以在url规则中添加变量成分,用<变量>的形式表示。Flask处理请求时会把变量传入视图函数,所以我们可以添加参数获取这个变量值。上述代码中,类似/greet/AAA,/greet/BBB等格式的请求都会触发这个视图函数。
除此之外,如果用户未添加变量,则会返回404错误。解决方法可以如上文,为greet视图新添加一个app.route()装饰器,为/greet设置默认值。该方法等效于在greet视图中设置name参数默认值
项目配置
点击这里前往Flask官方配置文档
Flask提供了许多方法来加载配置。
- 比如,可以像加载字典中的键值对一样加载配置:
app.config['ADMIN_NAME'] = 'PETER'
- 使用update方法可以一次加载多个值。
app.config.update{TESTING=TRUE,SECRET_KEY='114514'}
- 读取config配置的方法和字典类似,如
value = app.config['ADMIN_NAME']
`
URL与端点
Flask中提供url_for()函数获取URL。调用该函数时,第一个参数为端点值(endpoint)。在Flask中,端点用来标记一个视图函数以及对应的URL规则,端点的默认值为视图函数的名称。在app.route()装饰器中,可以使用endpoint参数自定义端点值,不过一般没必要。
@app.route('/lol/lol/')
def hello():
return '<h1>LOL!</h1>'
在这段代码中,使用url_for(‘hello’)即可获得对应的url,即’/lol/lol/’
如果URL中含有动态部分,则需要向url_for()函数中传入参数,如对应下列代码:
@app.route('/greet/<name>')
def greet(name):
return f'<h1>Hello, {name}</h1>'
这时使用url_for(‘greet’, name=‘Jack’)得到的URL为’/greet/Jack’
Tips:若要获取绝对URL,则可以将url_for()函数中的_external参数设置为True
flask命令
除了内置的flask run等命令,也可以用app.cli.command()装饰器注册一个flask命令,如:
@app.cli.command()
def hello():
click.echo('Hello,Man')
这时在终端输入 flask hello,就会打印出 Hello, Man的字样。
模板与静态文件
模板(template)
- 程序页面的HTML文件
静态文件(static file)
- css文件
- JavaScript文件
- 图片,字体文件等资源文件
MVC架构中,程序被分为三个组件
- 数据处理(Model)
- 用户界面(View)
- 交互逻辑(Controller)
但严格来说,flask不是MVC架构的框架