Flask入门一

news2025/1/31 11:21:22

文章目录

  • 一、Flask介绍
  • 二、Flask创建和运行
    • 1.安装
    • 2.快速使用
    • 3.Flask小知识
    • 4.flask的运行方式
  • 三、Werkzeug介绍
  • 四、Jinja2介绍
  • 五、Click CLI 介绍
  • 六、Flask安装
    • 介绍
    • watchdog使用
    • python--dotenv使用(操作环境变量)
  • 七、虚拟环境
    • 介绍
    • Mac/linux创建虚拟环境
    • Win创建虚拟环境
  • 八、Flask的debug模式(调试)
  • 九、fastapi小案例(快速了解)
  • 十、显示用户小案例

一、Flask介绍

Flask是一个基于Python开发并且依赖jinja2模板Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器

“微”(micro) 并不表示你需要把整个 Web 应用塞进单个 Python 文件(虽然确实可以),也不意味着 Flask 在功能上有所欠缺。微框架中的“微”意味着 Flask 旨在保持核心简单而易于扩展。Flask 不会替你做出太多决策——比如使用何种数据库。而那些 Flask 所选择的——比如使用何种模板引擎——则很容易替换。除此之外的一切都由可由你掌握

默认情况下,Flask 不包含数据库抽象层、表单验证,或是其它任何已有多种库可以胜任的功能。然而,Flask 支持用扩展来给应用添加这些功能,如同是 Flask 本身实现的一样。众多的扩展提供了数据库集成、表单验证、上传处理、各种各样的开放认证技术等功能。Flask 也许是“微小”的,但它已准备好在需求繁杂的生产环境中投入使用

Flask depends on the Werkzeug WSGI toolkit, the Jinja template engine, and the Click CLI toolkit

	-Werkzeug WSGI:接收请求   django 中得 wsgiref
    -jinja2模板     :渲染模板的  django中得dtl
    -Click CLI      :命令定制工具   django 的 manage.py runserver/migrate...

常用Python Web框架区别

	'Python Web框架,本质都是一样的'
	1.Django:大而全,内置的app多,第三方app也多,django3.x也支持异步操作了
		-自带的应用:admin后台管理、auth身份鉴权、sessions会话管理....
		-第三方app:Django Rest Framework、Django CORS Headers 、Django Bootstrap....
		
	2.Flask:小而精,没有过多的内置组件,只有完整的web框架最基本的功能,需要借助于第三方完成更丰富的功能
		-众多第三方:比如orm咱们会用sqlalchemy,peewee....
	
	3.fastapi:python的异步web框架,跟flask相似,也只保留了web开发的核心功能,其他需要借助第三方实现
		-异步框架
		-更方便的使用ppython asyncawait关键字来实现异步操作
	
	4.sanic:python的异步web框架,供支持异步高并发请求的 web 服务

同步框架和异步框架的区别

	   1.djagno是同步框架还是异步框架,djagno 3.x以后支持异步
	   2.同步框架:一个线程只处理一个请求
	   3.异步框架:一个线程可以处理多个请求
	   4.异步框架可以很显著的提高并发量
	   
	   django的并发量是指usgi的线程数,线程的并发量就是协程,同步框架和异步框架对于用户来说,
	   消耗的时间是一个样的。但异步框架的效率提高了。

二、Flask创建和运行

1.安装

	pip install flask
	'安装完成后,会在script目录下多flask.exe 命令,后期运行flask需要使用它'

2.快速使用

	from flask import Flask
	
	1.实例化得到对象
	app = Flask(__name__)
	
	2.注册路由,写视图函数
	@app.route('/')  # 根路径
	def index():
	    return 'hello world'
	
	
	if __name__ == '__main__':
	    # 运行app,默认运行在5000
	    # 默认是host='127.0.0.1', port=5000端口
	    app.run()

	'运行后http://127.0.0.1:5000访问这个地址,即可看到hello,world了'

在这里插入图片描述

3.Flask小知识

	1.注册路由
    	app.route(路径,method=[请求方式get,post])
	2.新手四件套:
	    -render_template   渲染模板  跟django有区别
	    -redirect    重定向
	    -return  字符串 返回字符串---jsonify格式字符串
	3.请求的request对象,是全局的request对象,直接导入使用即可,在不同的视图函数不会混乱
	    request.method   请求方式
	    request.form     post请求的body体的内容转换成了字典
	4.session  全局的直接导入使用即可,一定要指定秘钥app.secret_key='shashoashofisj'
	     放值:session['name']='kimi'
	     取值: session.get('name')
	5.模板的渲染
	    -兼容django的dtl
	    -更强大,可以加括号,字典取值多样(dict.get('')/dict['']/dict./dict.items()),而django只能dict.
	    -{% for %}
	6.转换器@app.route('/detail/<int:pk>')

4.flask的运行方式

	'运行项目方式'
	-方式一(pycharm配置):
    	-新建一个flask-server---》配置选中 script---》有app的文件
        
   	-方式二:命令(推荐这种)
    	flask --app py文件名字  run
        flask --app 5-flask再体验.py run
        
     -方式三:命令
    	python38 -m flask --app py文件名字 run
        python38 -m flask --app 5-flask再体验.py run
    	
     -方式四,右键运行
         if __name__ == '__main__':
            app.run()
        
     -方式五:命令运行(跟右键运行一样)
    	python38 5-app.py
        
	 - 方式六:少用(pip install python-dotenv)
    	flask app run

三、Werkzeug介绍

Werkzeug是一个WSGI工具包,他可以作为一个Web框架的底层库。这里稍微说一下, werkzeug 不是一个web服务器,也不是一个web框架,而是一个工具包,官方的介绍说是一个 WSGI 工具包,它可以作为一个 Web 框架的底层库,因为它封装好了很多 Web 框架的东西,例如 Request,Response 等等

Werkzeug is a comprehensive WSGI web application library. It began as a simple collection of various utilities for WSGI applications and has become one of the most advanced WSGI utility libraries.
Werkzeug 是一个综合性 WSGI Web 应用程序库。它最初是 WSGI 应用程序的各种实用程序的简单集合,现已成为最先进的 WSGI 实用程序库之一。

Werkzeug doesn’t enforce any dependencies. It is up to the developer to choose a template engine, database adapter, and even how to handle requests
Werkzeug 不强制执行任何依赖关系。由开发人员选择模板引擎、数据库适配器,甚至如何处理请求

官方网址:https://werkzeug.palletsprojects.com/en/3.0.x/

	django--->wsgiref ,uwsgi
	flask---->Werkzeug
	django或flask--》都需要有web服务器---》web服务器需要符合 wsgi协议
		-规定了,框架是一个可调用对象,请求来了,wsgi服务器调用这个对象的时候,会传入 两个参数environ,start_response
	    -flask中能找到这两个参数,django中也能找到这两个参数

	后期:
		测试django项目,使用wsgiref,上线djagno项目,使用uwsgi,gunicorn
	    测试flask项目,使用werkzeug,上线flask项目,使用uwsgi,gunicorn
	1 写了一个可调用对象,可以使用符合wsig协议的web服务器来调用,执行它
	def application(environ, start_response):
	    start_response('200 OK', [('Content-Type', 'text/plain')])
	    return ['Hello World!'.encode('utf-8')]
	
	
	2 使用符合wsgi协议的web服务器调用它
	from wsgiref.simple_server import make_server
	# 咱们这个application 函数,它就是 django框架或flask框架
	def application(environ,start_response):
	    print(environ)
	    start_response('200 OK', [('Content-Type', 'text/html')])
	    # 只有是html的才会把代码渲染,否则就是当成字符串展示到页面
	    if environ.get('PATH_INFO') == '/index':
	        with open('index.html', 'rb') as f:
	            data = f.read()
	
	    elif environ.get('PATH_INFO') == '/login':
	        with open('login.html', 'rb') as f:
	            data = f.read()
	    else:
	        data = b'<h1>Hello, web!</h1>'
	    return [data]
	
	
	
	if __name__ == '__main__':
	    myserver = make_server('',8011,application)
	    print('监听8011端口')
	    myserver.serve_forever()
	    
	    
	    
	3 使用werkzeug 运行 application
	# 有了 Request和Response,路由分发,可以获取静态文件,可以返回html页面
	from werkzeug.wrappers import Request, Response
	from werkzeug.serving import run_simple
	def application(environ, start_response):
	    request = Request(environ)
	    text = f"Hello {request.args.get('name', 'World')}!"
	    response = Response(text, mimetype='text/plain')
	    return response(environ, start_response)
	
	
	if __name__ == '__main__':
	    run_simple('localhost', 4000, application)

四、Jinja2介绍

Jinja is a fast, expressive, extensible templating engine. Special placeholders in the template allow writing code similar to Python syntax. Then the template is passed data to render the final document
Jinja
是一个快速、富有表现力、可扩展的模板引擎。模板中的特殊占位符允许编写类似于 Python 语法的代码。然后向模板传递数据以渲染最终文档

语法完全支持 dtl,但比dtl更强大

官方网址:https://jinja.palletsprojects.com/en/3.1.x/

五、Click CLI 介绍

Click is a Python package for creating beautiful command line interfaces in a composable way with as little code as necessary. It’s the “Command Line Interface Creation Kit”. It’s highly configurable but comes with sensible defaults out of the box
Click 是一个 Python 包,用于以可组合的方式使用尽可能少的代码创建漂亮的【命令行界面】。它是“命令行界面创建工具包”。它具有高度可配置性,但具有开箱即用的合理默认值

It aims to make the process of writing command line tools quick and fun while also preventing any frustration caused by the inability to implement an intended CLI API
它的目的是使编写命令行工具的过程变得快速而有趣,同时也防止因无法实现预期的 CLI API 而造成的任何挫败感

	Click in three points:
	  arbitrary nesting of commands	
	  automatic help page generation
	  supports lazy loading of subcommands at runtime 
	  
	Click三点:
	  命令的任意嵌套
	  自动生成帮助页面
	  支持运行时延迟加载子命令

官方网址:https://click.palletsprojects.com/en/8.1.x/

	# pip3 install click
	import click
	@click.command()
	@click.option('--count', default=1, help='Number of greetings.')
	@click.option('--name', prompt='Your name',help='The person to greet.')
	def hello(count, name):
	    for x in range(count):
	        click.echo(f"Hello {name}!")
	
	if __name__ == '__main__':
	    hello()
	
	1  python app.py --count=3  # app.py是当前运行页py的名称
	# count=3循环三次
	2  python app.py --help
	3  python app.py --count=3 --name=jack

在这里插入图片描述

六、Flask安装

介绍

	'最新版本,最低支持 python3.8'
	1 安装flask时,会自动安装一些其他模块
	    1.Werkzeug implements WSGI, the standard Python interface between applications and servers. 运行服务
	    2.Jinja is a template language that renders the pages your application serves. 模板
	    MarkupSafe comes with Jinja. It escapes untrusted input when rendering templates to avoid injection attacks. 防止xss攻击
	    3.ItsDangerous securely signs data to ensure its integrity. This is used to protect Flask’s session cookie. cookie加密
	    4.Click is a framework for writing command line applications. It provides the flask command and allows adding custom management commands. 制定命令
	    5.Blinker provides support for Signals.  信号

	2 这些依赖不会自动安装。如果您安装它们,Flask 将检测并使用它们
		# python-dotenv enables support for Environment Variables From dotenv when running flask commands.
		可以把key和value放到环境变量---》使用这个模块可以操作
		
		# Watchdog provides a faster, more efficient reloader for the development server
		flask修改了代码,他会检测到并重新运行---》最新代码

watchdog使用

	# pip install watchdog
	'当前目录下文件修改会被监控到,打印日志'
	'例如创建新文件,删除,修改等都会记录日志'
	
	import sys
	import time
	import logging
	from watchdog.observers import Observer
	from watchdog.events import LoggingEventHandler
	
	if __name__ == '__main__':
	    logging.basicConfig(level=logging.INFO,
	                        format='%(asctime)s - %(message)s',
	                        datefmt='%Y-%m-%d %H:%M:%S')
	
	    path = sys.argv[1] if len(sys.argv) > 1 else '.'
	    event_handler = LoggingEventHandler()
	    observer = Observer()
	    observer.schedule(event_handler, path, recursive=True)
	    observer.start()
	
	    try:
	        while True:
	            time.sleep(1)
	    except KeyboardInterrupt:
	        observer.stop()
	    observer.join()

python–dotenv使用(操作环境变量)

官方网址:https://saurabh-kumar.com/python-dotenv/

	# pip install python-dotenv
	import os
	from dotenv import load_dotenv
	from dotenv import dotenv_values
	
	1 加载配置文件
	# 必须在根路径下新建一个 .env 的文件,并写入配置才能返回True,会把.env下的配置文件设置进环境变量
	# 配置按照key:value的形式  USERNAME=JACK
	res=load_dotenv()  # take environment variables from .env
	print(res)
	print(os.environ.get('DOMAIN'))
	print(os.environ.get('USERNAME'))
	print(os.environ.get('AGE'))
	# You will probably want to add .env to your .gitignore, especially if it contains secrets like a password.
	
	
	2 获取环境变量字典
	config = dotenv_values(".env")
	print(config)
	print(config.get('DOMAIN'))

在这里插入图片描述

七、虚拟环境

介绍

之前咱们学过适应第三方模块创建虚拟环境,python内置(venv)可以直接创建虚拟环境

Use a virtual environment to manage the dependencies for your project, both in development and in production.
在开发和生产中,使用虚拟环境来管理项目的依赖关系

What problem does a virtual environment solve? The more Python projects you have, the more likely it is that you need to work with different versions of Python libraries, or even Python itself. Newer versions of libraries for one project can break compatibility in another project.
虚拟环境解决什么问题?您拥有的 Python 项目越多,您就越有可能需要使用不同版本的 Python 库,甚至是 Python 本身。一个项目的较新版本的库可能会破坏另一项目的兼容性。

Virtual environments are independent groups of Python libraries, one for each project. Packages installed for one project will not affect other projects or the operating system’s packages.
虚拟环境是一组独立的 Python 库,每个项目对应一个。为一个项目安装的软件包不会影响其他项目或操作系统的软件包

Python comes bundled with the venv module to create virtual environments.
Python 使用 venv 模块来创建虚拟环境

Mac/linux创建虚拟环境

	'创建虚拟环境'
	mkdir myproject
	cd myproject
	python3 -m venv .venv
	# 激活虚拟环境
	. .venv/bin/activate

Win创建虚拟环境

	'创建虚拟环境'
	mkdir myproject
	cd myproject
	py -3 -m venv .venv
	# 激活虚拟环境
	.venv\Scripts\activate

八、Flask的debug模式(调试)

	flask --app xxxx.py run --debug
	1 浏览器显示错误信息
	2 改了代码自动重启

在这里插入图片描述

九、fastapi小案例(快速了解)

官方网址:https://fastapi.tiangolo.com/zh/

	安装:
		pip install fastapi
		pip install uvicorn
	'具体查看官方文档即可'
	
	# from typing import Union  # python 的内置--》数据校验
	import time
	
	from fastapi import FastAPI
	import asyncio
	app = FastAPI()
	
	@app.get("/")
	async def read_root():
	    # 如果有io
	    await asyncio.sleep(2)
	    # time.sleep(10)
	    return {"Hello": "World"}
	
	
	@app.get("/items/{item_id}")
	def read_item(item_id, q=None):
	    return {"item_id": item_id, "q": q}
	
	# 天生自带接口文档----》方便我们快速写前后端分离的接口
	
	'运行:uvicorn fastapi快速了解.py:app'
	# 针对于io多的web后端,使用 异步框架,会提高性能
	# 咱们项目,基本都是io多,查询数据库,redis 都是io操作
	# 使用fastapi能提高并发量

十、显示用户小案例

	from flask import Flask, render_template, request, redirect
	app = Flask(__name__)
	
	
	@app.route('/login',methods=['GET','POST'])
	def login():
	    if request.method == 'GET':
	        # 返回模板
	        return render_template('login.html')
	    else:
	        # 取出用户名密码,判断
	        # flask的request 没有POST,GET
	        # request.form  就是 post
	        # request.args  就是 GET
	        username = request.form.get('username')
	        password = request.form.get('password')
	        if username == 'lqz' and password == '123':
	            # 重定向到百度
	            return redirect('https://www.baidu.com')
	        else:
	            return render_template('login.html', error='用户名密码错误')
	
	
	if __name__ == '__main__':
	    app.run(debug=True)

login.html

	<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css">
    <title>登录</title>
</head>
<body>
<div class="container col-xl-10 col-xxl-8 px-4 py-5">
    <div class="row align-items-center g-lg-5 py-5">
        <div class="col-lg-7 text-center text-lg-start">
            <h1 class="display-4 fw-bold lh-1 mb-3">亚洲最大交友平台</h1>
            <p class="col-lg-10 fs-4">Bootstrap是Twitter推出的一个用于前端开发的开源工具包。它由Twitter的设计师Mark
                Otto和Jacob Thornton合作开发,是一个CSS/HTML框架。目前,Bootstrap最新版本为5.0</p>
        </div>
        <div class="col-md-10 mx-auto col-lg-5">
            <form class="p-4 p-md-5 border rounded-3 bg-light" method="post">
                <div class="form-floating mb-3">
                    <input type="text" class="form-control" id="floatingInput" placeholder="name@example.com" name="username">
                    <label for="floatingInput">用户名</label>
                </div>
                <div class="form-floating mb-3">
                    <input type="password" class="form-control" id="floatingPassword" placeholder="Password" name="password">
                    <label for="floatingPassword">密码</label>
                </div>
                <div class="checkbox mb-3">
                    <label>
                        <input type="checkbox" value="remember-me"> 记住密码
                    </label>
                </div>
                <button class="w-100 btn btn-lg btn-primary" type="submit">登录</button>
                <hr class="my-4">
                <small class="text-muted">{{error}}</small>
            </form>
        </div>
    </div>
</div>
</body>
</html>

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

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

相关文章

Provider 与 Riverpod 的区别与选择

在 Flutter 应用开发中&#xff0c;选择合适的状态管理工具是至关重要的一环。在众多状态管理工具中&#xff0c;Provider 和 Riverpod 是备受关注的两个选择。本文将深入探讨 Provider 和 Riverpod 之间的区别&#xff0c;并帮助开发者更好地选择适合自己项目需求的状态管理工…

掌握微信小程序开发的核心要点:从基础到进阶

文章目录 掌握微信小程序开发的核心要点&#xff1a;从基础到进阶一、数据绑定和事件处理1.1 理解小程序的数据绑定机制&#xff0c;实现数据和视图的同步更新1.2 学习如何处理用户交互事件和触发相应的响应逻辑 二、网络请求和数据交互2.1 使用小程序的网络请求API与后端服务器…

【Python笔记-设计模式】迭代器模式

一、说明 迭代器模式是一种行为设计模式&#xff0c;让你能在不暴露集合底层表现形式&#xff08;列表、栈和树等&#xff09;的情况下遍历集合中所有的元素。 (一) 解决问题 遍历聚合对象中的元素&#xff0c;而不需要暴露该对象的内部表示 (二) 使用场景 需要对聚合对象…

ConvNeXt V2:用MAE训练CNN

论文名称&#xff1a;ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders 发表时间&#xff1a;CVPR2023 code链接&#xff1a;代码 作者及组织: Sanghyun Woo&#xff0c;Shoubhik Debnath来自KAIST和Meta AI。 前言 ConvNextV2是借助MAE的思想来训练…

信息安全计划

任何管理人员或人力资源专业人士都知道&#xff0c;除非彻底记录标准和实践&#xff0c;否则永远无法真正实施和执行标准和实践。正如您可能想象的那样&#xff0c;在保护您的网络、技术和数据系统免受网络威胁以及在发生这些事件时规划最及时、高效和有效的响应时&#xff0c;…

关于 REST API 六大指导原则,你了解多少?

背景 在前一篇文章中 关于 REST API&#xff0c;你了解多少&#xff1f; &#xff0c;我们聊到了 REST 六大指导原则&#xff0c;有些原则不太容易理解&#xff0c;这次我们详细说明一下。 1. 统一接口&#xff08;Uniform Interface&#xff09;&#xff1a;定义了一组通用的…

Error relaunching VirtualBox VM process:5

打靶场用virtualBox开靶机的时候会出现这种问题 并且报错代码是0x0 我出现这个问题与我的另一个软件有关 卸载之后靶机就可以正常启动了 但是又有问题了&#xff0c;我怎么打cs呢&#xff0c;求助大佬帮助

LeetCode--134

134. 加油站 在一条环路上有 n 个加油站&#xff0c;其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车&#xff0c;从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发&#xff0c;开始时油箱为空。 给定两个整数数组 …

关于纯前端想要变成全栈编写接口的学习推荐

推荐学习uniappuniclouduniadmin 学习成本低,不到一个月就能开发出自己的接口,上传到服务空间,并且能够实现后端的功能,能够调用接口 当然这里使用的不是mysql数据库,而是unicloud推荐的存储方式 操作起来也很方便

在TMP中计算书名号《》高度的问题

1&#xff09;在TMP中计算书名号《》高度的问题 2&#xff09;FMOD设置中关于Virtual Channel Count&Real Channel Count的参数疑问 3&#xff09;Unity 2021.3.18f1 ParticleSystemTrailGeometryJob粒子拖尾系统崩溃 4&#xff09;XLua打包Lua文件粒度问题 这是第375篇UWA…

2023 re:Invent 用 Amazon Q 打造你的知识库

前言 随着 ChatGPT 的问世&#xff0c;我们迎来了许多创新和变革的机会。一年一度的亚马逊云科技大会 re:Invent 也带来了许多前言的技术&#xff0c;其中 Amazon CEO Adam Selipsky 在 2023 re:Invent 大会中介绍 Amazon Q 让我印象深刻&#xff0c;这预示着生成式 AI 的又一…

Kafka 面试八股题整理

前言&#xff1a;本文是博主自行收集的Kafka相关的八股文问题&#xff0c;博主还在准备暑期实习中&#xff0c;应该会持续更新.... 参考&#xff1a; 32 道常见的 Kafka 面试题你都会吗&#xff1f;附答案 【Kafka】10道不得不会的 Kafka 面试题 掌握这10个常见的Kafka经典面试…

热闹元宵进行中,如何利用VR全景展示民宿品牌形象?

错峰出游闹元宵&#xff0c;元宵节恰逢周末&#xff0c;而且还是春节假期返工之后的首个休息日&#xff0c;不少人都想通过短途度假来缓解“节后综合征”。两位数的特价机票、打折的各种酒店让你实现“旅行自由”&#xff0c;那么如何知道特价酒店服务好不好呢&#xff1f;先别…

UI自动化测试:playwright工具(一):python环境下安装、UI录制使用(需要些代码能力)

一、python环境下安装playwright工具 1. 安装playwright库 pip install playwright -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com#至于镜像源,可以选,也可不选:#阿里云 http://mirrors.aliyun.com/pypi/simple/ #中国科技大学 https://py…

阿里云服务器最新收费标准及优惠价格参考(2024更新)

2024阿里云服务器优惠活动政策整理&#xff0c;轻量2核2G3M服务器61元一年、2核4G4M带宽165元1年&#xff0c;云服务器4核16G10M带宽26元1个月、149元半年&#xff0c;阿里云ECS云服务器2核2G3M新老用户均可99元一年续费不涨价&#xff0c;企业用户2核4G5M带宽199元一年&#x…

高性能 Kafka 及常见面试题

Kafka 是一种分布式的&#xff0c;基于发布/订阅的消息系统&#xff0c;原本开发自 LinkedIn&#xff0c;用作 LinkedIn 的事件流&#xff08;Event Stream&#xff09;和运营数据处理管道&#xff08;Pipeline&#xff09;的基础。 基础原理详解可见 Kafka 基本架构及原理 基础…

Redis 16种妙用

1、缓存 2、数据共享分布式 3、分布式锁 4、全局ID 5、计数器 6、限流 7、位统计 8、购物车 9、用户消息时间线timeline 10、消息队列 11、抽奖 12、点赞、签到、打卡 13、商品标签 14、商品筛选 15、用户关注、推荐模型 16、排行榜 1、缓存 String类型 例如&#xff1a;热点…

算法【线性表的查找-顺序查找】

线性表的查找-顺序查找 顺序查找基本思想应用范围顺序表的表示数据元素类型定义查找算法示例分析 时间效率分析顺序查找的特点如何提高查找效率 顺序查找 基本思想 在表的多种结构定义方式中&#xff0c;线性表是最简单的一种。而顺序查找是线性表查找中最简单的一种。 顺序查…

Netty NIO 非阻塞模式

1.概要 1.1 说明 使用非阻塞的模式&#xff0c;就可以用一个现场&#xff0c;处理多个客户端的请求了 1.2 要点 ssc.configureBlocking(false);if(sc!null){ sc.configureBlocking(false); channels.add(sc); }if(len>0){ byteBuffer.flip(); 2.代码 2.1 服务端代码 …

YOLOv8改进 | Conv篇 | 利用YOLOv9的GELAN模块替换C2f结构(附轻量化版本 + 高效涨点版本 + 结构图)

一、本文介绍 本文给大家带来的改进机制是利用2024/02/21号最新发布的YOLOv9其中提出的GELAN模块来改进YOLOv8中的C2f,GELAN融合了CSPNet和ELAN机制同时其中利用到了RepConv在获取更多有效特征的同时在推理时专用单分支结构从而不影响推理速度,同时本文的内容提供了两种版本…