Python编程:Flask入门到精通(2)

简介: Python编程:Flask入门到精通(2)

请求钩子hook

类似Django中的中间件


1、处理第一个请求前执行
@app.before_first_request  
def handle():
    pass
2、处理每个请求前执行
@app.before_request  
def handle():
    pass
3、处理每个请求后执行,视图函数没有出现异常执行
@app.after_request  
def handle(response):
    return response
4、处理每个请求后执行,视图函数是否出现异常都执行, 非调试模式debug=False
@app.teardown_request 
def handle(response):
    return response

使用

python app.py runserver -h 0.0.0.0 -p 8000

python app.py shell


jinja2模板

1、渲染


from flask import render_template
data = {
    "name": "python",
    "age": 18,
    "my_dict": {"city": "beijing"},
    "my_list": [1, 2, 3, 4, 5],
}
render_template("index.html", **data)

变量 {{ name }}

字典 {{ my_dict.city }} {{ my_dict[“city”] }}

列表 {{ my_list[0] }}

数字相加 {{ 1 + 2 }}

字符串拼接 {{ “hello” + “world” }}


2、 字符串过滤器(支持链式调用 )

safe 禁用转义 xss攻击

capitalize 首字母大写,其他小写

lower 转小写

upper 转大写

title 每个单词首字母大写

trim 首尾空格去掉

reverse 反转字符串

format 格式化输出(类似%格式化)

striptags 删除html标签


3、列表过滤器

first 取第一个元素

last 取最后一个元素

length 获取列表长度

sum 列表求和

sort 列表排序


4、自定义过滤器

方式一:


(1)定义过滤器
def list_step_2(lst):
    return lst[::2]
(2)注册过滤器
app.add_template_filter(list_step_2, "list_step_2")
(3)使用过滤器
{{ lst | list_step_2 }}

方式二:


@app.template_filter("list_step_2") 
def list_step_2(lst):
    return lst[::2]

模板宏macro

1、不带参数宏


{% macro input() %}
<input type="text" >
{% endmacro %}
{{ input() }}

2、带参数宏


{% macro input(type) %}
<input type="{{type}}" >
{% endmacro %}

3、带默认参数宏


{% macro input(type="text") %}
<input type="{{type}}" >
{% endmacro %}

4、导入宏


{% import "macro.html" as my_macro%}
{{ my_macro.input() }}

模板继承

bash.html

{% block top%}
父模板的内容
{% endblock %}

child.html

{% extends "bash.html" %}
{% block top%}
子模板的内容
{% endblock %}

模板包含

{% inclued "hello.html" %}

Flask中的特殊变量

可以直接在模板中使用

config

request

url_for

get_flashed_messages基于session


from flask import flash
flash("hello1")
flash("hello2")
{% for msg in get_flashed_messages() %}
    {{msg}}
{% endfor %}

Flask-Script扩展

pip install Flask-Script


Manager 启动命令管理类


from flask import Flask
from flask_script import Manager
app = Flask(__name__)
#创建app管理类
manager = Manager(app)
@app.route("/")
def index():
    pass
if __name__ == "__main__":
    # app.run()
    manager.run()

表单扩展

pip install Flask-WTF

可以进行csrf验证 表单生成 和 验证


Flask数据库扩展

pip install Flask-SQLAlchemy


Flask数据库迁移扩展

pip install Flask-Script (依赖)
pip install Flask-Migrate

Flask发送邮件

pip install Flask-Mail


循环导入-死锁

解决:一方让步,延迟导入


路由设置的方式


1、装饰器
@app.route("/")
def view():
    pass
2、装饰器原始方式
def view():
    pass
app.route("/")(view)

蓝图Blueprint

一个小模块的抽象概念, 延迟加载


1、定义蓝图


# __init__.py
from flask import Blueprint
 # 工程目录的优先级大于应用目录
app_user = Blueprint("app_user", __name__, template_folder="templates")
 # init执行的时候把视图加载进来
 from .views import view

2、定义视图


# views.py
from . import app_user
@app_user.route("/")
def view():
    pass

3、注册蓝图


# main.py
from flask import Flask
app = Flask(__name__)
app.register_blueprint(app_user, url_prefix="/user")

4、查看路由

app.url_map


单元测试

web开发阶段:

需求分析,设计阶段,实现阶段,测试阶段


测试阶段

单元测试,集成测试,系统测试


断言assert

-真 继续执行

-假 抛出异常 AssertionError


Flask单元测试

app.test_client()


测试数据库

开启->测试->断开


Flask部署


pip install gunicorn

gunicorn 
-w 4  // 进程数
-b 127.0.0.1:5000  // 开启端口
--access-logfile ./logs  //日志文件
-D // 守护进程方式运行
main:app  // 要运行的程序入口

ps aux|grep gunicorn


Nginx

负载均衡

静态文件


cp nginx.conf nginx.conf.bak


upstream flask{
    server 10.0.0.1:5000;
    server 10.0.0.1:5001;
}
server{
    listion 80;
    server_name localhost;
    location / {
        proxy_pass http://flask;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr
    }

平滑重启 nginx -s reload


mysql异常

@@tx_isolation


修改报错文件base.py

# cursor.execute("SELECT @@tx_isolation")
if self.server_version_info < (5, 7, 20):
    cursor.execute("SELECT @@tx_isolation")
else:
    cursor.execute("SELECT @@transaction_isolation")
相关文章
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
1253 7
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
744 1
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
1890 102
|
Cloud Native 算法 API
Python API接口实战指南:从入门到精通
🌟蒋星熠Jaxonic,技术宇宙的星际旅人。深耕API开发,以Python为舟,探索RESTful、GraphQL等接口奥秘。擅长requests、aiohttp实战,专注性能优化与架构设计,用代码连接万物,谱写极客诗篇。
2152 1
Python API接口实战指南:从入门到精通
|
Python
Python编程:运算符详解
本文全面详解Python各类运算符,涵盖算术、比较、逻辑、赋值、位、身份、成员运算符及优先级规则,结合实例代码与运行结果,助你深入掌握Python运算符的使用方法与应用场景。
660 3
|
数据处理 Python
Python编程:类型转换与输入输出
本教程介绍Python中输入输出与类型转换的基础知识,涵盖input()和print()的使用,int()、float()等类型转换方法,并通过综合示例演示数据处理、错误处理及格式化输出,助你掌握核心编程技能。
877 3
|
并行计算 安全 计算机视觉
Python多进程编程:用multiprocessing突破GIL限制
Python中GIL限制多线程性能,尤其在CPU密集型任务中。`multiprocessing`模块通过创建独立进程,绕过GIL,实现真正的并行计算。它支持进程池、队列、管道、共享内存和同步机制,适用于科学计算、图像处理等场景。相比多线程,多进程更适合利用多核优势,虽有较高内存开销,但能显著提升性能。合理使用进程池与通信机制,可最大化效率。
721 3
|
存储 Java 调度
Python定时任务实战:APScheduler从入门到精通
APScheduler是Python强大的定时任务框架,通过触发器、执行器、任务存储和调度器四大组件,灵活实现各类周期性任务。支持内存、数据库、Redis等持久化存储,适用于Web集成、数据抓取、邮件发送等场景,解决传统sleep循环的诸多缺陷,助力构建稳定可靠的自动化系统。(238字)
1868 1
|
调度 数据库 Python
Python异步编程入门:asyncio让并发变得更简单
Python异步编程入门:asyncio让并发变得更简单
580 5
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
1026 0

推荐镜像

更多