持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情
文件上传
index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body >
<form action="/login" method="post">
用户名:<input type="text" name="username" value="">
密码:<input type="password" name="password">
<input type="submit" value="提交">
</form>
<p style="color: red">{{error}}</p>
实现最小应用
使用 pycharm 创建一个项目project01,设置Python虚拟环境
路由
Flask 根据 HTTP 请求的url在路由表中匹配定义好的路由规则,找到对应的函数处理请求。
在这个过程中需要保存一个url到行数的映射关系,我们把处理url到函数之间的关系成为路由
flask中的路由是使用装饰器的形式定义的,并且必须是/开头,否则报错
视图函数
视图函数是处理用户的请求,返回响应的函数代码块
在Flask中视图函数的名字不能重复
路径变量
如果希望获取/article/1这样的路径参数,就需要使用路径变量。路径变量的语法是/path/converter:varname。在路径变量前还可以使用可选的转换器,有以下几种转换器。
模板继承
一般我们的网站虽然页面多,但是很多部分是重用的,比如页首,页脚,导航栏之类的。对于每个页面,都要写这些代码,很麻烦。Flask的Jinja2模板支持模板继承功能,省去了这些重复代码。让我们基于上面的例子,在”templates”目录下,创建一个名为”layout.html”的模板:
<!doctype html>
<title>Hello Sample</title>
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='style.css') }}">
<div class="page">
{% block body %}
{% endblock %}
</div>
虽然”render_template()”加载了”hello.html”模板,但是”layout.html”的内容也一起被加载了。而且”hello.html”中的内容被放置在”layout.html”中”{% block body %}”的位置上。形象的说,就是”hello.html”继承了”layout.html”。
在 HTML 文件里,引入这些静态文件需要给出资源所在的 URL,这些文件的 URL 可以通过 Flask 提供的 url_for() 函数来生成。
url_for() 函数的用法,传入端点值(视图函数的名称)和参数,它会返回对应的 URL。对于静态文件,需要传入的端点值是static ,同时使用 filename 参数来传入相对于 static 文件夹的文件路径。
假如我们在 static 文件夹的根目录下面放了一个 tangwutong.jpg 文件,下面的调用可以获取它的 URL: