Python轻量级Web框架Flask(10)——Flask进阶知识

news2024/12/25 9:06:30

1、Flask整体框架流程回顾:

在这里插入图片描述

  • 视图函数把数据返回给浏览器的方法有多种,其中一种就是通过模板Templates。

2、Flask插件介绍:

  • Flask插件可以去官网查看,有很多。
  • 插件安装流程:
    • 1、通过pip指令在对应环境中下载插件
    • 2、在项目的exts.py文件中初始化
    • 3、使用

3、Flask的caching插件介绍:

  • 这个插件是一个和缓存相关的插件,缓存经常用来保留那些经常被访问的临时数据。
    在这里插入图片描述

4、钩子函数:

  • 定义:钩子函数也叫做钩子或者中间件,是指在执行函数和目标函数之间挂载的函数,框架开发者给调用方提供了一个point-挂载点,是一种AOP切面编程思想。
  • 通俗理解:就是在程序执行的过程中,设置钩子函数,可以拦截错误的访问,同时可以检查执行的数据。
  • 常用的钩子函数:
    • before_first_request:处理第一次请求之前执行。
    • before_request:每次请求之前执行,通常用这个钩子函数预处理一些变量,实现反爬等。
    • after_request:注册一个函数,如果没有未处理的异常抛出,在每次请求之后运行。
    • teardown_appcontext:当APP上下文被移除之后执行的函数,可以进行数据库的提交或者回滚。

5、结合Flask的caching插件和钩子函数制作一个简单的爬虫反扒工具:

  • 项目预览
    在这里插入图片描述

注意:这里项目用到的还是之前的项目模板,可以看下Python轻量级Web框架Flask(8)

  • 需求:写一个简单爬虫,通过Flask模型中缓存插件和钩子函数制作一个反扒程序。
  • 首先下载安装flask-caching(在环境的对应终端pip install flask-caching)
  • 然后初始化(参考上面)
  • 代码展示(这部分只会展示和模板中被修改部分的代码,其余文件代码参考模板)

exts:

from flask_sqlalchemy import SQLAlchemy # ORM
from flask_migrate import Migrate   # 数据迁移
from flask_caching import Cache

db = SQLAlchemy()
migrate = Migrate()
cache = Cache(
    config={'CACHE_TYPE': 'simple'} # 缓存类型
)

def init_exts(app):
    db.init_app(app=app)
    migrate.init_app(app=app,db=db)
    cache.init_app(app=app)

views:

# 在views.py中放路由和视图函数
from flask import Blueprint, request
from .models import * #后面是用views来控制数据库的,所以要在views中导入models文件
from .exts import cache
import time

# 蓝图
blue = Blueprint('user', __name__)

@blue.route('/')
@cache.cached(timeout=10) # 缓存的有效时间是10秒
def index():
    print('index')
    time.sleep(3)   # 第一次访问会等待3秒,返回值也会给到缓存,之后再访问就直接在缓存中获取返回值(不会再执行index了)
    return 'index'

# 钩子函数
# defore_request:每次请求之前访问
@blue.before_request
def before():   # 钩子函数没有路由
    print('before_request')
    # request
    print(request.path) # /
    print(request.method)   # GET
    print(request.remote_addr)  # 127.0.0.1(客户端ip)

    # # 简单反爬(通过访问代理)
    # print(request.user_agent)
    # # 浏览器访问的user_agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36
    # # python爬虫访问的user_agent:python-requests/2.28.2  【运行spider文件之后的结果】
    # if 'python' in request.user_agent.string:
    #     return '请不要使用python爬虫!该访问已被拦截'

    # 通过ip的访问频率反爬:
    ip = request.remote_addr
    if cache.get(ip):
        return '你的ip正在实施爬虫行为'
    else:
        # 对每个ip设置一个缓存,1秒内不让重复访问
        cache.set(ip, 'value', timeout=1)

spider:

import requests

# res = requests.get('http://127.0.0.1:5000/')
# print(res.text) # index

# 频繁访问
for i in range(10):
    res = requests.get('http://127.0.0.1:5000/')
    print(res.text)  # index

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/445399.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python入门】NumPy 入门知识介绍,看这一篇足矣

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 什么是 NumPy? NumPy 是用于处理数组的 python 库。 它还拥有在线性代数、傅立叶变换和矩阵领域中工作的函数。 NumPy 由 Travis Oliphant 于 2005 年创建。它是一个开源项目,你可以自由使用它。 …

SAP 性能监控工具

SAP 体系结构可能很复杂,因为它由许多不同的元素和多层应用程序组成。每个元素都必须以最佳方式执行,以确保响应迅速且可靠的服务级别。管理如此复杂的系统可能非常艰巨,这就是为什么使用强大的SAP监控工具绝对必要的原因。 什么是 SAP 监控 …

安装autogpt中出现的问题及安装autogpt的小白教程

ImportError: DLL load failed while importing numpy_ops: The specified module could not be found 解决方案:Latest supported Visual C Redistributable downloads | Microsoft Learn 安装一下这个软件即可, 要安装 Auto-GPT,请按照下…

【Operating Systems:Three Easy Pieces 操作系统导论 】 4 ~ 6 章 (进程 | 进程 API | 受限直接执行)

【读书笔记】 Operating Systems:Three Easy Pieces 操作系统导论 第四章、 抽象 : 进程 4.1 什么是进程 ? 操作系统为正在运行的程序提供的抽象进程可以访问的内存(称为地址空间,address space) 是该进程的一部分。进程的机器…

python+nodejs+ssm+vue 基于协同过滤的旅游推荐系统

本文首先介绍了旅游推荐的发展背景与发展现状,然后遵循软件常规开发流程,首先针对系统选取适用的语言和开发平台,根据需求分析制定模块并设计数据库结构,再根据系统总体功能模块的设计绘制系统的功能模块图,流程图以及…

WPF教程(八)--数据绑定(1)

使用WPF可以很方便的设计出强大的用户界面,同时 WPF提供了数据绑定功能。WPF的数据绑定跟Winform与ASP.NET中的数据绑定功能类似,但也有所不同,在 WPF中以通过后台代码绑定、前台XAML中进行绑定,或者两者组合的方式进行数据绑定。…

VUE基本使用详解

目录 一、VUE框架原理 1. 了解VUE框架 2. VUE框架原理 3. MVC设计模式 4. MVVM设计模式 二、引入VUE框架 1. 本地引入 2. 网络引入 三、安装Vue插件 一、VUE框架原理 1. 了解VUE框架 vue 框架 是基于MVVM设计模式的前端框架,其中的Vue对象是MVVM设计模式中的VM视图…

JavaWeb——TCP协议的相关特性

目录 一、TCP 1、特性 2、确认应答 (1)、定义 (2)、原理 (3)、接收缓冲区 3、超时重传 (1)、丢包 (2)、定义 (3)、分类 二、…

idea在main分支上新建其他分支并同步过去

前言:首先得知道以上(idea 版本为2021.1.3 ,右下角git分支部分)是什么含义。 local Branches 本地分支,代表当前项目路径下所存在的本地分支,以上是有三个,都存在与本地仓库 Remote Branches 远程分支&…

腾讯云服务器:轻量应用服务器、云服务器CVM和GPU云服务器配置表

目前腾讯云服务器分为轻量应用服务器、云服务器云服务器云服务器CVM和GPU云服务器,首先介绍一下这三种服务器。 1、腾讯云云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源&#x…

进程虚拟地址空间划分

任何编程语言->产生指令和数据 我们以x86 32位linux 作为知识介绍的背景 编译后生成exe文件在磁盘上,需要加载到内存才能运行 但不能直接加载到物理内存 linux给当前进程分配一个2^32大小的一块空间,4G 虚拟地址空间解释 它存在,你看得…

背包问题——01背包|完全背包

目录 前言&背包问题的历史 01背包 1、题目 2、暴力解01背包 Ⅰ、代码 3、动态规划解01背包 Ⅰ、二维dp数组解01背包 1)dp数组的含义 2)递推公式 3)dp数组的初始化 4)遍历顺序的讨论 5、代码 Ⅱ、一维数组解01背包 1&…

HCLE----atd以及备份方式

atd是一种基于时间的任务调度器,可以在指定时间执行一次性任务。atd启动时会读取/etc/at.allow和/etc/at.deny两个文件,来决定哪些用户有权限使用at命令提交任务。crond是一种周期性任务调度器,可以按照指定的时间间隔执行重复性任务。crond启…

5.3、web服务器简介HTTP协议

5.3、web服务器简介HTTP协议 1.Web-Server(网页服务器)2.HTTP协议(应用层的协议)①简介②概述③工作原理④HTTP请求报文格式⑤HTTP响应报文格式⑥HTTP请求方法⑦HTTP状态码 1.Web-Server(网页服务器) 一个 Web Server 就是一个服…

【arduino】超声波垃圾桶

🎊专栏【Arduino】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【勋章】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 目录 ⭐效果 ⭐所需器材 ⭐连线图片 ⭐程序代码 ⭐代码分析 …

MySQL常见七种通用的Join查询练习题

准备数据库表 t_dept 和 t_emp CREATE TABLE t_dept (id int NOT NULL AUTO_INCREMENT,deptName varchar(30) DEFAULT NULL,address varchar(40) DEFAULT NULL,CEO int DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT7 DEFAULT CHARSETutf8mb3 CREATE TABLE t…

面包多面包多面包多面包多面包多面包多

1.背景 1.摘要 本文是针对智慧政务中的文本数据挖掘应用的研究。通过建立基于三层网络结构的fastText文本分类模型,聚类量化模型,熵权评估模型解决了群众留言分类,热点问题挖掘,答复意见评价等问题。 针对群众留言分类问题&#…

《学习循环》---C语言

目录 前言: 1.while循环 1.1while循环的结构 1.2while语句中的break和continue 2.getchar配合循环清空缓冲区 3.for循环 3.1for循环的结构 3.2for循环中的break和continue 3.3for循环的注意事项 3.4使用多个循环变量控制for循环 4.do while循环 4.1do …

chrome 浏览器在 112 正式版本以及 114 canary 版本从 devtools 控制台复制文本不会复制高亮显示的文本?

问题 我的 chrome 浏览器版本如下:版本 112.0.5615.138(正式版本) (64 位) 今天我在写代码的时候报错了,看了一下控制台浏览器,是某个属性没有定义,然后我双击这个属性名称 ctrl c…

asp.net+C#大学生高校运动会比赛综合管理系统

目录 1 绪论 3 1.1 课题背景 3 1.2 课题目标 3 1.3 研究现状 3 1.4 论文工作内容以及结构安排 4 1.4.1 论文工作内容 4 1.4.2 论文结构安排 4 2 系统开发技术介绍 6 2.1 ASP.NET简介 6 2.2 Microsoft Visual Studio 2010平台 7 2.3 SQL Serve…