Flask后端学习笔记

您所在的位置:网站首页 今天瓯江潮水时刻表 Flask后端学习笔记

Flask后端学习笔记

2023-12-27 21:20| 来源: 网络整理| 查看: 265

以学习代码为主,笔记在代码块的注释部分。

1 基础语法 # 从flask这个包中导入Flask类 from flask import Flask # 使用Flask类创建一个app对象 # __name__: 代表当前app.py这个模块 app = Flask(__name__) # 创建一个路由和视图函数的映射 # '/'是根路由 @app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__main__': app.run() 2 URL与视图的映射 2.1 无参的url # route是一个函数 一个装饰器 后面可以用来定义url里的path # 这种是无参的url @app.route('/') def hello_world(): return 'Hello World!' 2.2 含参的url 2.2.1 路径传参 # 带参数的url:将参数固定到了url中, 方式是路径传参 # 可以定义参数的类型 格式: @app.route("/blog/") def blog_detail(blog_id): return "您访问的博客是: %s" % blog_id 2.2.2 以查询字符串的方式传参 # 以查询字符串的方式传参,就不用在route那里写参数 # /book/list:返回第一页的数据 # /book/list?page=2:返回第二页的数据(用的是英文的?) @app.route('/book/list') def book_list(): # arguments: 参数 # request.args:类字典类型,可通过get取值,request是一个全局对象 # get参数:key表示要查找的键,default表示默认值,type用来指定类型 page = request.args.get("page", default=1, type=int) # 用f字符串,变量用花括号括住{} return f"您获取的是第{page}页图书列表" 3 Jinja2 3.1 模板渲染 # render_template是flask的一个函数,用于渲染模板 from flask import Flask, render_template app = Flask(__name__) @app.route('/') def hello_world(): # render_template里的参数就是你所要渲染的模板文件, # 默认从当前项目的template文件夹下寻找所写入的文件,然后读取并进行解析,再渲染成html代码,返回给浏览器。 return render_template("index.html") 3.2 渲染变量

后端代码:

@app.route('/') def hello_world(): user = User(username="abc", email="[email protected]") # 此处person字典类型 person = { "username": "abc", "email": "[email protected]" } return render_template("index.html", person=person)

前端代码:

Title {{ person['username'] }} / {{ person.email }} 3.3 过滤器 3.3.1 Jinja内置过滤器

后端代码:

# 类对象,有多个属性 class User: def __init__(self, username, email): self.username = username self.email = email # 通过过滤器对某个变量(需要被过滤的值)进行处理 @app.route('/filter') def filter_demo(): user = User(username="abc", email="[email protected]") return render_template("filter.html", user=user)

前端代码:

过滤器使用demo {{ user.username }}--{{ user.username|length }} 3.3.2 自定义过滤器

后端代码:

from flask import Flask, render_template from datetime import datetime app = Flask(__name__) # 自定义过滤器 # 首先定义一个函数,参数包括被过滤的值value和设定的格式format # 然后调用该函数,则会返回格式化的时间 #(time.strftime是一个python函数,用于格式化时间,格式取决于参数format) def datetime_format(value, format="%Y-%m-%d %H:%M"): return value.strftime(format) # 利用函数add_template_filter()将函数定义为过滤器并命名 app.add_template_filter(datetime_format, "dformat") @app.route('/filter') def filter_demo(): mytime = datetime.now() return render_template("filter.html", mytime=mytime) if __name__ == '__main__': app.run()

前端代码:

过滤器使用demo {{ mytime|dformat }} 3.4 模板继承

网站中,会有许多网页的模块是重复的,比如顶部的导航栏。通过模板继承,可以把一些重复性的代码写在父模板中,子模板继承父模板后,再分别实现对应页面的代码。

父模板:

{% block title %}{% endblock %} 父模板 首页 新闻 {% block body %} {% endblock %} 这是底部的标签

子模版:

{% extends "base.html" %} {% block title %} 我是子模版的标题 {% endblock %} {% block body %} 我是子模版的body {% endblock %} 3.5 控制语句

模板中的控制语句与python中的控制语句类似,注意Jinja2的格式要求。

后端代码:

@app.route('/control') def control_statement(): age = 18 books = [{ "name": "沉默的大多数", "author": "王小波" }, { "name": "动物园", "author": "乙一" }, ] return render_template("control.html", age=age, books=books)

前端代码:

控制语句Demo {% if age>18 %} 您已满18岁! {% elif age==18 %} 您刚满18岁! {% else %} 您未满18岁! {% endif %} {% for book in books %} 图书名称:{{ book.name }}, 作者:{{ book.author }} {% endfor %} 3.6 加载静态文件 Title


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3