python-web
文章平均质量分 80
胖虎是只mao
这个作者很懒,什么都没留下…
展开
-
在线聊天——WebSocket 简介与实际实现
在 HTML5 之前,浏览器和服务器的通信都是通过 HTTP 协议进行的,那么引入 WebSocket 有什么用呢?想像一下,有一个网页正在用文字直播某一场足球比赛的比分,在没有 WebSocket 时,客户端也就是浏览器实现比分的动态更新通常通过下面两种方式:AJAX 和长轮询。这两种技术有什么区别呢?看下面的例子(S 代表服务器,C 代表客户端):Ajax 方式:C:告诉我最新的比分S:比分还没更新C:(5 秒后)告诉我最新的比分S:比分还没更新C:(5 秒后)告诉我最新的比分S:比原创 2022-03-01 01:24:18 · 1063 阅读 · 0 评论 -
python 代码编写优化
1. 列表推导式只有if…版[item for item in data if condition]# 剔除data中的奇数data = [1, 2, 3, 4, 5, 6, 7, 8, 9]test = [item for item in data if item % 2 == 0]print(test)# 结果[2, 4, 6, 8]此处if主要起条件判断作用,data数据中只有满足if条件的才会被留下,最后统一生成为一个数据列表if…else… 版模板:[exp1原创 2022-03-01 01:23:49 · 260 阅读 · 0 评论 -
python百题大冲关(1-6)
参考答案仓库:https://github.com/Shallow22/python-1001. 实现一个算法来识别一个字符串的字符是否是唯一的。挑战内容本次挑战中,你需要在 unique_chars.py 文件中补充函数 has_unique_chars 的空缺部分。has_unique_chars 函数接受一个参数,string 用于指定传入的字符串;has_unique_chars 函数输出一个布尔值,即 True 或者 False。你需要补充 has_unique_chars 函数,使其原创 2022-03-01 01:23:33 · 431 阅读 · 0 评论 -
python 工具函数代码(二)
1. 实现一个判断redis 服务器时候存在的装饰器from functools import wrapsfrom flask import gfrom rmon.common.rest import RestExceptionclass ObjectMustBeExist: """该装饰器用于对某一个 Server 实例进行删改查操作,确保操作对象必须存在 """ def __init__(self, object_class): """原创 2022-03-01 01:23:05 · 345 阅读 · 0 评论 -
flask 登录功能流程源码分析
如下图所示,这是我们在之前的实验中编写的登录视图函数,它在 handlers/front.py 文件中:当我们点击登录提交按钮后,首先进行第 42 行的表单验证,通过后,根据邮箱查询 user 数据表中对应的用户信息,然后调用 Flask-Login 提供的 login_user 方法登录。接下来我们继续分析这个方法,它在 flask_login.utils 模块中:在上一节实验我们对这个方法的参数做了说明:user 就是 User 映射类的实例;remember 是布尔值,当用户在表单中选原创 2022-01-21 17:24:25 · 700 阅读 · 0 评论 -
直播技术原理分析
一、技术原理分析在介绍直播技术之前,首先大家需要理解流媒体的概念。所谓流媒体是指采用流式传输的方式在 Internet 播放的媒体格式。流式传输方式是将视频和音频等多媒体文件经过特殊的压缩方式分成一个个压缩包,由服务器向客户端连续、实时传送。客户端通过解压软件对这些数据进行解压后,多媒体就会像发送前那样显示出来。理解了流媒体,就不难直播原理了,因为直播也是一种流媒体。只不过相比视频、音乐网站这种传统的流媒体,直播流媒体的数据源是由客户端(主播)产生然后实时推送到服务器的,下面的图片显示了直播的大致流程:原创 2022-01-21 17:11:33 · 8766 阅读 · 0 评论 -
flask 请求处理流程及其源代码分析、session、cookie生成源码
浏览器首次访问网站的注册页面时,request.cookies 里没有 session ,val 的值就是 None 。这时候执行第 345 行返回 self.session_class 的调用,session_class 属性就是当前模块中定义的 SecureCookieSession 类,最后请求上下文对象的 session 属性值就是此类的实例。这个实例是类字典对象,现阶段我们正在处理请求,它里面没有键值对,是空的。下一步就是调用视图函数了:如上图所示,这里涉及到表单类的实例化。在创建表单类时.原创 2022-01-19 01:43:47 · 1035 阅读 · 0 评论 -
flask Flask-Login 插件及继承 UserMixin 类、login_user 源码分析、session源码分析
一、继承 UserMixin 类Flask 项目可以使用 Flask-Login 插件来实现登录功能,这是一个被广泛使用的优质第三方库。登录功能设计用户表,我们要使用 Flask-Login 就需要让 User 映射类继承 UserMixin 类。修改 models.py 如下:from flask_login import UserMixinclass User(Base, UserMixin): ...继承 UserMixin 是干嘛呢?我们看下源码,这个类定义在 flask_l原创 2022-01-19 00:47:54 · 3107 阅读 · 0 评论 -
Flask-SQLAlchemy 初始化源码和蓝图blueprint源码小分析
一. Flask-SQLAlchemy 初始化源码在文件中定义了工厂函数 create_app :def create_app(config): """ 可以根据传入的 config 名称,加载不同的配置 """ app = Flask(__name__) app.config.from_object(configs.get(config)) # SQLAlchemy 的初始化方式改为使用 init_app db.init_app(app)如上所示的原创 2022-01-06 15:23:19 · 1675 阅读 · 0 评论 -
使用JWT生成Token,并实现Token刷新API
一、背景传统的网站用户认证方式严重依赖于 Cookie 。但 很多 项目是一个前后端分离的项目,我们希望前端界面的实现不受 项目API 的影响,这就要求 用户认证没有 Cookie 时也能进行。其实仔细想想,用户的认证鉴权,无非就是在访问 API 时发送一个能够识别出用户的字符串给服务端,然后服务端基于字符串查找出用户,再判断用户是否有权限使用 API 。这串字符串,我们可以将其称之为 Token。由于 rmon 的所有 API 都是基于 HTTP 协议的,而在 HTTP 协议中有一个 Authoriz原创 2021-12-30 17:27:31 · 6132 阅读 · 0 评论 -
python 基于 Redis 实现缓存系统
Redis 服务器用途非常广泛,例如我们可以基于 Redis 服务器实现缓存系统。缓存系统可以缓解客户端访问压力,当缓存有效时只需直接将缓存结果返回给客户端而不用执行真正的后端逻辑。尝试在 Python 中实现一个简单的缓存系统。要求条件:假设缓存的结果都是 Python 字典,通过 json 进行序列化和反序列化确保实验环境的 Redis 服务器已经启动cache.py 文件中实现一个缓存系统类,类名称为 RedisCache ,可以通过 RedisCache.cache 方法装饰一个函数并缓原创 2021-12-28 18:18:27 · 2436 阅读 · 0 评论 -
python 工具函数代码(一)
1. utc 标准时间转换成本地时间def utc2local(utc_st): '''将utc 标准时间转换成本地时间''' now_stamp = datetime.now().timestamp() local_time = datetime.fromtimestamp(now_stamp) utc_time = datetime.utcfromtimestamp(now_stamp) offset = local_time - utc_time pr原创 2021-12-28 16:18:17 · 8900 阅读 · 0 评论 -
python- flask current_app详解,与 current_app._get_current_object()的区别以及异步发送邮件实例
核心知识AppContext手动、自动入栈LocalStack是线程隔离的栈结构current_app是线程、协程隔离对象LocalProxy是获取当前线程隔离的代理对象一、flask中经典错误 working outside application context错误:working outside application contex原因:在没有获取到应用上下文的情况下,进行了上下文操作。代码:from flask import Flask, current_appapp =原创 2021-12-22 16:05:57 · 4011 阅读 · 1 评论 -
python 函数方法大赏
isinstance(). 判断类型isoformat().它使用日期类对象,并以ISO 8601格式YYYY-MM-DD返回表示日期的字符串。 日期和时间表示的国际标准是ISO8601。该标准旨在提供日期和时间表示的格式>>> from datetime import date>>> p = date.today()>>> k = p.isoformat()>>> k'2021-12-09'>>>.原创 2021-12-15 16:59:41 · 957 阅读 · 0 评论 -
python函数的奇淫技巧——chain()函数
tertools.chain() 方法可以用来简化这个任务。 它接受一个可迭代对象列表作为输入,并返回一个迭代器,有效的屏蔽掉在多个容器中迭代细节。对多个对象执行相同的操作,且这几个对象在不同的容器中,这时候就用到了itertools.chain的函数,这个函数就用来干这件事的from itertools import chaina = ['x','r','v','b']b = [1,2,3,4,5]# b = (1,2,3,4,5).# 元祖也可,可迭代对象都可for i in chain原创 2021-11-25 15:59:37 · 2370 阅读 · 0 评论 -
python 操作redis数据类型
#!/usr/bin/python# -*- coding:utf-8 -*-# __author__ = 'Jack'import timeimport redispool = redis.ConnectionPool(host='127.0.0.1', port=6379,db=19, password='82325588')r = redis.Redis(connection_pool=pool)r.flushall() # 清空Redis'''一、字符串 strings原创 2021-09-18 10:39:56 · 600 阅读 · 0 评论 -
QPS高并发性能指标及其计算公式
QPS,每秒查询QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。互联网中,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。并发数并发数是指系统同时能处理的请求数量,这个也是反应了系统的负载能力。RT,响应时间响应时间:执行一个请求从开始到最后收到响应数据所花费的总体时间,即从客户端发起请求到收到服务器响应结果的时间。响应时间RT(Response-time),是一个系统最重原创 2021-09-08 15:05:31 · 14775 阅读 · 0 评论 -
flask-web 搜索系统项目实际应用、suggest查询实现、联想提示、自动补全的实现
一、项目全文检索实现elasticsearch python客户端使用https://elasticsearch-py.readthedocs.io/en/master/>pip install elasticsearch对于elasticsearch 5.x 版本 需要按以下方式导入from elasticsearch5 import Elasticsearch# elasticsearch集群服务器的地址ES = [ '127.0.0.1:9200']# 创建ela原创 2021-08-02 15:41:25 · 565 阅读 · 0 评论 -
flask-web—— 搜索系统、Elasticsearch分布式搜索引擎原理、分片与集群、IK中文分析器、索引与文档、Logstash导入数据与查询
一、Elasticsearch简介与原理You know, for search!文档 https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html原创 2021-08-02 15:21:08 · 496 阅读 · 0 评论 -
flask web——实时通讯、聊天服务项目、推送通知功能的实现
一、聊天服务实现在toutiao-backend/im目录中创建server.pyimport socketio# 创建sio对象sio = socketio.Server(async_mode='eventlet')app = socketio.Middleware(sio)在toutiao-backend/im目录中创建im服务启动程序main.py运行方式python main.py [端口],如python main.py 8000import eventleteventlet原创 2021-07-29 01:22:34 · 1945 阅读 · 0 评论 -
flask-web—— 即时通讯 IM、WebSocket、Socket.IO 实时推送消息
一、即时通讯简介即时通讯(Instant Messaging)是一种基于互联网的即时交流消息的业务。HTTP 和TCP之间的关系:原创 2021-07-28 15:40:55 · 2296 阅读 · 0 评论 -
flask-web ——RPC实际项目业务简析
一、需求背景在首页中 获取特定用户的推荐文章列表 需要web系统和推荐系统配合有web系统告知 推荐系统 用户id是谁推荐系统 根据用户id 决定 推荐的文章idweb系统 根据推荐的文章id 查询文章数据,返回给客户端RPC业务实现RPC接口分析调用请求channel_iduser_idarticle_num 推荐的文章数量 10timestamp 时间戳 明确 跟推荐系统索要历史推荐数据还是最新的推荐结果如果timestamp传递的是最新的当前时间,则表明索要新的原创 2021-07-26 16:12:50 · 381 阅读 · 0 评论 -
flask-web —— RPC定义、结构、gRPC、Protocol Buffers
一、RPC简介1. 什么是RPC远程过程调用(英语:Remote Procedure Call,缩写为 RPC,也叫远程程序调用)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。如果涉及的软件采用面向对象编程,那么远程过程调用亦可称作远程调用或远程方法调用2. 背景与用途在单台计算机中,我们可以通过程序调用来传递控制和数据;或者说通过程序调用,我们可以将多个程序组成一个整体来实现某个功能。如果将这种调用机制推广到多台彼此间可以原创 2021-07-26 15:31:49 · 2269 阅读 · 0 评论 -
flask-web APScheduler 定时任务以及实际应用
定时任务crontabLinux 本身自带的一个命令,由Linux操作系统维护定时任务APSchedulerPython实现的,定时不是由Linux操作系统维护,是单独开启进程的方式,在进程中管理定时定时任务有两种:定时任务进行页面静态化 在django运行起来之前,我们明确知道要有这个定任务不是动态添加的一般可以直接采用Linux crontabAPScheduler在django 程序已经运行的情况下用户1下单 判断在30分钟内必须支付,否则取消订单原创 2021-07-23 01:58:27 · 1294 阅读 · 2 评论 -
python-web 项目导包问题
查看启动文件的路径有些项目有多个启动文件,例如:主程序启动文件,中间件启动文件等结论:当启动文件在最外层,导入里层的子包, 是没有问题的。一旦子包被导入,初始化。那就可以在子包的各个文件中采用 from . import xxx 的导包方式但当某个启动文件在里层,想导入启动文件外部的文件,不能用上述的导包方式,因为启动文件所在的这层目录,没有被初始化过,不是python包。这种的话,可以做目录设置,比如:sys.append()添加解释器路径等方法同级目录导包 直接用 import原创 2021-07-23 01:39:09 · 225 阅读 · 1 评论 -
flask-web Redis缓存实际项目中的应用
头条项目缓存数据的设计一. 用户的基本信息数据多个用户的数据库记录是保存在redis中的一条还是多条?——>多条多条数据缓存放到多个redis记录中字符串 or 复合型 ? user_1 user_2 user_3都保存到redis中一条 X(不采用)users -> hash { 1: user_1_cache_data, 2: user_2_cache_data}users -> list [ user_1_cache_原创 2021-07-21 01:11:09 · 389 阅读 · 1 评论 -
flask-web 缓存Redis——架构、缓存模式、淘汰策略、雪崩、穿透
一、缓存的架构计算机体系结构中的缓存:多级缓存构建本地缓存方法: 使用全局变量,一般适用于保存非常非常高频的数据项目的方案SQLAlchemy起到一定的本地缓存作用在同一请求中多次相同的查询只查询数据库一次,SQLAlchemy做了本地缓存(类似Django中的Queryset查询结果集),queryset 查询集(查询结果集) 其中一个作用就是缓存 (起到了本地缓存的作用)使用Redis构建一层缓存,可以用redis cluster 作为一级外部分布式缓存二、缓存数据缓存数据的原创 2021-07-20 16:31:18 · 649 阅读 · 0 评论 -
flask-web ——对象存储——图片上传、存储、传输等 CDN的配置
1. 七牛云存储需求在项目中,如用户头像、文章图片等数据需要使用文件存储系统来保存方案自己搭建文件系统服务选用第三方对象存储服务我们在项目中使用七牛云对象存储服务 http://www.qiniu.com。...原创 2021-07-19 01:19:07 · 6821 阅读 · 2 评论 -
flask-web—— JWT认证方案
撒旦发射点原创 2021-07-13 01:04:26 · 937 阅读 · 2 评论 -
Redis复习——事务、持久化、主从、高可用、集群
一、数据类型字符串set get incr incrby incrby a -1hash {}hset hmset hget hgetalllist []lpush rpush lpop rpopset 集合sadd smembers sismemberzset (sorted set) 有序集合zadd zscore zrangeredis中的value,可以有多种数据类型,但是每种数据类型不允许嵌套,也就是不能多层使用。每种数据类型中,只能是原创 2021-07-09 00:25:12 · 246 阅读 · 0 评论 -
MySQL复习——项目基础使用(二)——事务、主从复制分库分表、分布式ID、雪花算法
一、 Flask事务Flask默认开启了事务应用场景: 多次数据库操作的时候,需要两种或者两种以上的操作,一起成功或者一起失败,可以用到事务例如: 以下两张表中的数据 需要同时插入,则用到事务,保证成功或者失败environ = {'wsgi.version':(1,0), 'wsgi.input': '', 'REQUEST_METHOD': 'GET', 'PATH_INFO': '/', 'SERVER_NAME': 'itcast server', 'wsgi.url_scheme': 'h原创 2021-07-06 03:03:42 · 673 阅读 · 0 评论 -
MySQL复习——项目基础使用(一)
主键一般不用业务数据原创 2021-07-04 23:45:15 · 115 阅读 · 0 评论 -
python 网络编程面试题
怎么实现强行关闭客户端和服务器之间的连接?在 socket 通信过程中不断循环检测一个全局变量(开关标记变量),一旦标记变量变为关闭,则 调 用 socket 的 close 方法,循环结束,从而达到关闭连接的目的。简述 TCP 和 UDP 的区别以及优缺点...原创 2021-06-09 00:32:29 · 1900 阅读 · 6 评论 -
python 复习—并发编程实战(八)——多线程和多进程的生产者消费者模型、线程、进程再总结
任务生产者负责生产数据(随机生成一个数字),消费者负责处理数据(判断生产出来的数据是不是质数)。现在假设有一个生产者和多个消费者。1. 多线程(Thread)的生产者消费者模型import randomimport timeimport mathimport threadingfrom queue import Queueclass Producer(threading.Thread): # 生产者线程 def __init__(self, data, num_sum):原创 2021-06-07 15:15:54 · 223 阅读 · 0 评论 -
python 复习—并发编程实战(七)——并发编程总结
Python并发编程学习并发编程加速程序的运行高薪程序员必备能力程序运行的5种并发粒度单线程单线程多协程多线程多进程多机器怎样选择并发技术如果单机无法搞定大数据计算IO密集型CPU经常在等待IO比如网络爬虫选择1:多协程 coroutine选择2:多线程 threadingCPU密集型计算密集型,CPU计算为主比如加密解密使用多进程multithreading线程池和进程池原理:提前创建好线程/进程放在池子里,新的task原创 2021-06-03 00:13:07 · 181 阅读 · 0 评论 -
python 复习—并发编程实战(六)——线程、多进程、多协程加速程序运行实例(多线程和多进程的对比)
一、多线程实例import threadingimport timelock = threading.Lock()class Account: def __init__(self, balance): self.balance = balancedef draw(account, amount): with lock: if account.balance >= amount: time.sleep(0.1)原创 2021-06-02 23:59:56 · 357 阅读 · 3 评论 -
python 复习—并发编程(四)——IO多路复用、协程
一、铺垫:基于socket发送http请求1、需求一:向百度发送请求搜索关键字“alex”,有如下两种方式: import requests ret = requests.get('https://www.baidu.com/s?wd=alex')方式二(socket方式,也是requests的原理): import socket sk = socket.socket() # 与百度创建连接: 阻塞 sk.connect(('www.baidu.com',8原创 2021-05-27 14:09:41 · 428 阅读 · 0 评论 -
python 复习—并发编程(三)——进程、数据共享、进程锁、进程池、requests模块和bs4(beautifulsoup)模块
一、进程1、进程间数据不共享,每个进程都有自己的一个列表,如下示例: import multiprocessing data_list = [] def task(arg): data_list.append(arg) print(data_list) # 每个进程都有自己的一个列表 def run(): for i in range(10): p = multiprocessing.Process(ta原创 2021-05-26 18:06:19 · 154 阅读 · 0 评论 -
python 复习—并发编程(二)——线程锁、threading.local线程池、生产者消费者模型、线程安全
一、线程锁线程安全,多线程操作时,内部会让所有线程排队处理。如:list/dict/Queue线程不安全 + 人(锁) => 排队处理1、RLock/Lock:一次放一个a、创建10个线程,在列表中追加自己,如下代码: import threading v = [] def func(arg): v.append(arg) print(v) for i in range(10): t = threading.Threa.原创 2021-05-26 17:13:30 · 251 阅读 · 1 评论 -
python 复习—并发编程(一)系统并发线程和进程、协程GIL锁、CPU/IO密集型计算
并发编程前言: 1、网络应用 1)爬虫 直接应用并发编程; 2)网络框架 django flask tornado 源码-并发编程 3)socketserver 源码-并发编程 2、运维领域 1)自动化开发-运维开发(机器的批量管理,任务的批量执行等)一、操作系统/应用程序a、硬件 - 硬盘 - CPU - 主板 - 显卡 - 内存 - 电源 . . . . . .b、装原创 2021-05-26 02:07:22 · 439 阅读 · 1 评论