python的flask框架

Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD 授权。

Flask也被称为 “microframework” ,因为它使用简单的核心,用 extension 增加其他功能。Flask没有默认使用的数据库、窗体验证工具


从Hello World开始

Flask程序运行过程

  • 当客户端想要获取资源时,一般会通过浏览器发起HTTP请求

  • 此时,Web服务器会把来自客户端的所有请求都交给Flask程序实例

  • 程序实例使用Werkzeug来做路由分发(URL请求和视图函数之间的对应关系)

  • 根据每个URL请求找到具体的视图函数并进行调用

    • 在flask程序中,路由的实现一般是通过程序实例的装饰器实现
  • Flask调用视图函数后,可以返回两种内容:

    • 字符串内容:将视图函数的返回值作为响应的内容,返回给客户端(浏览器)
    • HTML模板内容:获取到数据后,把数据传入HTML模板文件中,模板引擎负责渲染HTTP响应数据,然后返回响应数据给客户端(浏览器)

导入Flask类库

from flask import Flask

创建应用实例

app = Flask(__name__)

路由解析,通过用户访问的路径,匹配相应的函数

@app.route('/')
def hello_world():
    return 'Hello World!'

启动实施(只在当前模块运行)

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

可以自己定义函数

@app.route("/index")
def hello():
    return 'Hello World'

输入的网址为:http://127.0.0.1:5000/index


定义路由及视图函数,Flask中定义路由是通过装饰器实现的,路由默认只支持GET,如果需要增加,需要自行指定

@app.route('/', method=['GET', 'POST'])
def index():
	return "hello world"

通过访问路径,获取用户的字符串参数(默认情况下是 字符串类型)

@app.route("/user/<name>")
def welcome(name):
    return "Hello World, %s"%name

通过访问路径,也可以获取用户的整型参数(还有float类型float:id)
int:id:固定模式

@app.route("/user/<int:id>")
def welcome2(id):
    return "Hello World, %d号的会员"%id

路由路径不能重复,用户通过唯一路径访问特定的函数


render_template

返回给用户渲染后的网页文件

import render_template
import datetime	# 先导入时间包

@app.route("/")
def index2():
    return render_template("index.html")

普通变量(向页面传递一些变量)

@app.route('/index')
def index():
    url_str = "www.itcast.com"
    return render_template('index.html', url_str=url_str)

@app.route("/")
def index2():
    time = datetime.date.today() # 显示今天的日期
    return render_template("index.html", var=time)

在html代码用 { { var }}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    今天是{
   
   { var }},欢迎光临<br>
    {
   
   { url_str }}
</body>
</html>

就可以在页面上显示今天的日期


列表类型

@app.route("/")
def index2():
    time = datetime.date.today()
    name = ["小张", "小王", "小赵"]
    return render_template("index.html", var=time, list=name)

用大括号和百分号括起来的是控制结构,还有if

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    今天是{
   
   { var }},欢迎光临<br/>
    <br>今天值班的有:<br/>
    {% for data in list %}
        <li>{
   
   { data }}</li>
    {% endfor %}
</body>
</html>

输出的结果为:

今天是2021-06-23,欢迎光临

今天值班的有:
·小张
·小王
·小赵

字典类型

@app.route("/")
def index2():
    time = datetime.date.today()
    name = ["小张", "小王", "小赵"]
    task = {
    
    "任务": "打扫卫生", "时间": "3小时"}
    return render_template("index.html", var=time, list=name, task=task)

了解一下如何在页面打印表格,以及如何迭代

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    今天是{
   
   { var }},欢迎光临<br/>
    <br>今天值班的有:<br/>
    {% for data in list %}
        <li>{
   
   { data }}</li>
    {% endfor %}

    任务:<br/>
        <table border="1">
            {% for key, value in task.items() %}  <!--[(key,value),(key,value),(key,value)]-->
            <tr>
                <td>{
   
   { key }}</td>
                <td>{
   
   { value }}</td>
            </tr>
            {% endfor %}
        </table>
</body>
</html>

输出的结果为:
在这里插入图片描述


制作一个简易表格

 <table border="1"> <!--border是为表格添加边框-->
            <tr>
                <td>测试1</td>
                <td>测试2</td>
            </tr>
            <tr>
                <td>测试1</td>
                <td>测试2</td>
            </tr>
            <tr>
                <td>测试1</td>
                <td>测试2</td>
            </tr>
        </table>

输出结果为:

测试1	测试2
测试1	测试2
测试1	测试2

表单提交

接收表单提交的路由,需要指定method为post

@app.route('/result', methods=['POST', 'GET'])
def result():
    if request.method == 'POST':
        result = request.form
    return render_template("test/result.html", result=result)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
     <table border="1">
            {% for key, value in result.items() %}  <!--[(key,value),(key,value),(key,value)]-->
            <tr>
                <th>{
   
   { key }}</th>
                <td>{
   
   { value }}</td>
            </tr>
            {% endfor %}
        </table>
</body>
</html>

过滤器

过滤器的本质就是函数,有时候我们不仅仅只是需要输出变量的值,我们还需要修改变量的显示,甚至格式化、运算等等,而在模板中不能直接调用Python中的某些方法,那么这就用到了过滤器

使用方式:

  • 过滤器的使用方式:变量名 | 过滤器
    • { { variable | filter_name(*args) }}
  • 如果没有任何参数传给过滤器,则可以把括号省略掉
    • { { variable | filter_name }}
  • 如:",这个过滤器的作用:把变量variable的值的首字母转换为大写,其他字母转换为小写

链式调用

在 jinja2 中,过滤器是可以支持链式调用,示例如下:

{
    
    {
    
     "hello world" | reverse | upper }}

猜你喜欢

转载自blog.csdn.net/xuexiwd/article/details/118120753
今日推荐