Token和JWT的区别
服务端验证客户端发送的 token 信息要进行数据的查询操作 Jwt 验证客户端发来的 token 就不用,在服务端使用密钥校验就可以,不用数据库的查询。
Token需要查库验证 token 是否有效,而 JWT 不用查库或者少查库,直接在服务端进行校验,并且不用查库。因为用户的信息及加密信息在第二部分 payload 和第三部分签证中已经生成,只要在服务端进行校验就行,并且校验也是 JWT 自己实现的。
TOKEN令牌,是访问资源的凭证
认证流程:
用户输入用户名和密码,发送给服务器。
服务器验证用户名和密码,正确的话就返回一个签名过的token,浏览器客户端拿到这个token。
客户端自己保存token,后续每次请求中,浏览器会把token作为http header发送给服务器,服务器验证签名是否有效,如果有效那么认证就成功,可以返回客户端需要的数据。
JWT概念:JWT是json web token缩写。使用RESTFUL接口定义,使用在普通的web。将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。
...
fastapi文件上传下载
123456789101112131415161718192021222324252627282930import osimport timefrom fastapi import APIRouter, File, UploadFilefrom fastapi.responses import FileResponserouter = APIRouter(tags=['Upload'], prefix='/upload')@router.post("", summary='文件上传')def create(uploadfile: UploadFile = File(...)): filename = f"{str(time.time()).replace('.','')}-{uploadfile.filename}" path = os.path.join("upload", ...
scrapy
https://gitee.com/bitterteaer/scrapy-learn.git
在代码中运行scrapy的方法@https://www.cnblogs.com/kakashiS/p/7475742.html官方文档给出了两个scrapy工具:
scrapy.crawler.CrawlerRunner, runs crawlers inside an already setup Twisted reactor
scrapy.crawler.CrawlerProcess, 父类是CrawlerRunner
scrapy框架基于Twisted异步网络库,CrawlerRunner和CrawlerProcess帮助我们从Twisted reactor内部启动scrapy。
直接使用CrawlerRunner可以更精细的控制crawler进程,要手动指定Twisted reactor关闭后的回调函数。指定如果不打算在应用程序中运行更多的Twistedreactor,使用子类CrawlerProcess则更合适。
下面简单是文档中给的用法示例:
12345678910111213 ...
celery
https://gitee.com/bitterteaer/celery-learn.git
Celery的架构由三部分组成,消息中间件(message broker),任务执行单元(worker)和任务执行结果存储(task result store)组成。
基本使用celery_task
1234567891011import celeryimport timebackend='redis://127.0.0.1:6379/1'broker='redis://127.0.0.1:6379/2'cel=celery.Celery('test',backend=backend,broker=broker)@cel.taskdef send_email(name): print("向%s发送邮件..."%name) time.sleep(5) print("向%s发送邮件完成"%name) return "ok"
注意,异步任务文件命令执行: ...
appsmith使用第三方库进行http请求
安装
使用12345678910111213141516171819export default { debugMeter: async () => { let rID = Number(Select1.selectedOptionValue); let metricName = Input6.text; let meterAsset = Input7.text; let busAddr = Input8.text; let meterAddr = Number(Input9.text); let registerAddr = Number(Input10.text); let registerCount = Number(Input11.text); let ratio = Number(Input12.text); let result = await ky.post("http://172.16.0.181:9090/debug_meter",{json:{rID,metricName,meter ...
sqlalchemy created_at字段自动生成当前时间写法
1created_at = Column(Integer, nullable=False, default=lambda: int(time.time()))
使用lambda即可使其实时生成,如果不使用lambda,则无法实时获取时间,只会记录第一次的时间
使用fastapi background task踩的第一个坑
场景复原(这份代码可以和我之前的业务产生同样的效果)12345678910111213141516171819202122async def task(): print("1......") time.sleep(5) print("ok") @router.post("/1")async def crate(background_tasks: BackgroundTasks): s = time.time() background_tasks.add_task(task) # task() t = time.time() - s return {"success": True, "time": t}@router.post("/2")async def crate(background_tasks: BackgroundTasks): s = time.time() # task( ...
go国内代理
GOPROXY=https://goproxy.cn,direct
FastAPI提供了多种安全性机制,包括OAuth2、API密钥等。例如,我们可以使用API密钥保护我们的API
12345678910from fastapi.security import APIKeyHeaderapi_key_header = APIKeyHeader(name="api_key")@app.get("/items/{item_id}", response_model=Item)def read_item(item_id: int, api_key: str = Depends(api_key_header)): if api_key != "my_secret_key": raise HTTPException(status_code=403, detail="Invalid API key") return items[item_id]