后端开发
文章平均质量分 52
真·skysys
萌即正义 ^ω^ ヾ(o◕∀◕)ノヾ ヽ(≧□≦)ノ ヾ(・ω・`。)
展开
-
接入 AWS SES 服务详细教程:Python/Golang 代码示例
接入 AWS SES 服务原创 2024-03-05 13:34:07 · 706 阅读 · 0 评论 -
Python 轻量级定时任务调度:APScheduler
APscheduler (Advanced Python Scheduler),作用为按指定的时间规则执行指定的作业。提供了基于日期date、固定时间间隔interval 、以及类似于Linux上的定时任务crontab类型的定时任务。该框架不仅可以添加、删除定时任务,还可以将任务存储到数据库中,实现任务的持久化。原创 2024-02-04 00:00:56 · 1602 阅读 · 0 评论 -
安全开发:身份认证方案之 Google 身份验证器和基于时间的一次性密码 TOTP 算法
目前很多应用都逐步采用了双因子认证或者说MFA认证方案,因此本文介绍一下背后的机制和原理。使用TOTP算法,只要满足两个条件:1)基于相同的密钥;2)时钟同步;只需要事先约定好密钥,TOTP算法就可以保证校验段和被校验端具有相同的输出。原创 2023-12-11 13:49:51 · 2987 阅读 · 0 评论 -
win10 go多版本管理
针对 Windows 须要 将原有的 C:/Go/bin 从 PATH 中移除,新增 %USERPROFILE%.g\go\bin。直接将解压后的 g.exe 放入环境变量 PATH 目录下便可(如 d:\bin目录)下载地址:https://github.com/voidint/g/releases。这里须要调整为 C:\Users\Administrator.g\go 目录。切换到另外一个已安装的go版本。查询可供安装的全部go版本。卸载一个已安装的go版本。查看本地安装了哪些版本。转载 2022-10-31 16:13:04 · 777 阅读 · 0 评论 -
Scrapy Spider源码分析
scrapy spider源码原创 2022-07-28 00:08:32 · 415 阅读 · 0 评论 -
企业级分布式爬虫框架入门
在master服务器上搭建一个redis数据库,并将要抓取的url存放到redis数据库中,所有的slave爬虫服务器在抓取的时候从redis数据库中去链接,由于scrapy_redis自身的队列机制,slave获取的url不会相互冲突,然后抓取的结果最后都存储到数据库中。答对于IO密集型代码(文件处理,网络爬虫),多线程能够有效提升效率(单线程下有IO操作会进行IO等待,会造成不必要的时间等待,而开启多线程后,A线程等待时,会自动切换到线程B,可以不浪费CPU的资源,从而提升程序执行效率)。.......原创 2022-07-26 02:44:08 · 891 阅读 · 0 评论 -
Gin框架教程 # 会话控制:Cookie、Session、Token
HTTP是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分两次请求是否由同一个客户端发出,解决方法有cookie、session、token。Cookie r.GET("/test_cookie", func(c *gin.Context) { // 获取客户端是否携带cookie cookie, err := c.Cookie("key_cookie") if err != nil { cookie = "NotSet"原创 2022-03-01 00:15:41 · 1822 阅读 · 0 评论 -
Gin框架教程 # 中间件
全局中间件所有请求都经过此中间件func MiddleWare() gin.HandlerFunc { return func(c *gin.Context) { t := time.Now() fmt.Println("中间件开始执行了") c.Set("request", "中间件") // 设置变量到Context的key中,可以通过Get()取 status := c.Writer.Status() fm原创 2022-02-28 01:12:35 · 434 阅读 · 0 评论 -
Gin框架教程 # 路由与API
Gin 中的路由基于 httprouter;Gin 支持 RESTful 风格 API路由原理httprouter 将所有路由规则构造一颗前缀树,根据前缀树判断路由命中。参数解析Path参数: Param()获取 Path 参数:Param() r.GET("/user/:name/*action", func(c *gin.Context) { name := c.Param("name") action := c.Param("action") .原创 2022-02-28 00:29:20 · 797 阅读 · 0 评论 -
Go 包管理
吐槽一下:好多Go教程讲了很多go语法各种框架,居然不讲包管理?在 1.5 版本之前,所有的依赖包都是存放在 GOPATH 下,没有版本控制。(弊端就是无法实现包的多版本控制)1.5 版本推出了 vendor 机制。所谓 vendor 机制,就是每个项目的根目录下可以有一个 vendor 目录,里面存放了该项目的依赖的 package。go build 的时候会先去 vendor 目录查找依赖,如果没有找到会再去 GOPATH 目录下查找。1.9 版本推出了实验性质的 dep,后续没有继续使用.转载 2022-02-27 23:18:02 · 746 阅读 · 0 评论 -
Go 国内下载Gin报错:fatal: unable to access ‘https://github.com/gin-gonic/gin/‘:
启用GOPROXY.IO代理:添加环境变量:GO111MODULE onGOPROXY https://goproxy.io,directGOROOT Go安装路径(定位到bin目录)然后再go get -u github.com/gin-gonic/gin原创 2022-02-27 16:24:02 · 2251 阅读 · 0 评论 -
Python # 检查多个参数非空
if not arg1 or not arg2 or not arg3: return jsonify(errno=RET.PARAMERR, errmsg=u"参数不完整!")if not all([arg1, arg2, arg3]): # 当 arg1, arg2, arg3都不为空时all函数返回true return jsonify(errno=RET.PARAMERR, errmsg=u"参数不完整!")...原创 2021-12-29 06:14:41 · 1171 阅读 · 0 评论 -
Flask # SQLAlchemy级联删除
class Parent(db.Model): __tablename__ = 'parent' id = Column(Integer, primary_key=True) name = Column(String(20)) class Child(db.Model): __tablename__ = 'child' id = Column(Integer, primary_key=True) name = Column(String(20)) .转载 2021-12-28 06:03:05 · 800 阅读 · 1 评论 -
Flask # SQLAlchemy动态查询条件
转载 2021-12-28 04:18:50 · 1422 阅读 · 0 评论 -
error: invalid command ‘bdist_wheel‘
error: invalid command 'bdist_wheel’的错解决方法:使用命令行pip3 install wheel,再去安装pyinstaller模块就行了pip install pyinstaller转载 2021-12-21 02:20:20 · 1167 阅读 · 0 评论 -
Flask # 部署与生产环境
Flask自带的开发服务器不适合用作生产环境。部署流程不论哪种托管方案,应用安装到生产服务器上之后都要执行一系列的任务,其中包括创建和更新数据库表。如果每次都手动操作会很麻烦,因此编写py程序来做这些工作。from flask_migrate import upgradefrom app.models import User, Follow, Role, Permission, Post, Commentfrom app import create_app, dbapp = create.原创 2021-12-19 01:11:21 · 1884 阅读 · 0 评论 -
SQL语句、存储过程、ORM框架概念辨析
存储过程:stored procedure, 简写为spORM框架:对象-关系映射框架,比如Hibernate、flask_sqlalchemy最初只有SQL语句,用交互模式一句一句执行, 也可以用批模式执行,多行sql语句一次提交执行。用批模式执行的一堆sql语言可以用过程的形式,事先存放到数据库里面,这就变成了存储过程。 随着面向对象技术的成熟,从程序中可以自动生成sql语句,这就是ORM。Reference谈谈如何从本质上理解sql语句, 存储过程,ORM之间的联系和取舍...原创 2021-12-18 21:39:38 · 818 阅读 · 0 评论 -
Flask # 蓝图(Blueprint)的嵌套
from flask import Flaskapp = Flask(__name__)from flask import Blueprint# 二级蓝图myapp = Blueprint('v1/myapp', __name__)@myapp.route("/test", methods=["GET"])def test(): passfrom flask import Blueprintclass NestableBlueprint(Blueprint): def转载 2021-12-16 03:18:40 · 826 阅读 · 0 评论 -
Flask # Flask-Login登陆组件使用介绍
pip install flask-loginflask-login使用需要有user对象。user对象必须实现下面的几个属性和方法。属性/方法说明is_authenticated如果用户提供的登陆凭据有效,返回True,否则Falseis_active如果允许用户登陆,必须返回True,否则返回Falseis_anonymous对普通用户必须返回False,如果是表示匿名登陆的特殊用户对象必须返回Trueget_id()返回用户的唯一标识符,unicod原创 2021-12-16 02:18:28 · 841 阅读 · 0 评论 -
Flask # SQLAlchemy使用详解
Flask-SQLAlchemy是Flask最常用的ORM框架,支持SQL和NoSQL数据库(key-value、图、文档)。SQLAlchemyFlask基础参考:ref数据库基础参考:refflask app的config需要配置:SQLALCHEMY_DATABASE_URI表示数据库文件地址。比如:SQLALCHEMY_DATABASE_URI='sqlite:///' + os.path.join(app.instance_path, 'flaskr.sqlite')SQLAlchemy原创 2021-12-05 21:21:27 · 606 阅读 · 0 评论 -
Flask:请求-响应循环与上下文
flask中view函数需要处理请求数据,一种处理方式是函数参数传递request对象。但是这样每个函数都会增加该参数,不如把他放在全局。因此利用上下文把request放到全局:from flask import request。但实际上request不可能是全局变量。在多线程环境中每个线程同时处理不同客户端请求时,每个线程看到的request对象必然不同。Flask使用上下文让特定变量可以全局访问但不会影响不同线程。进程是操作系统分配资源的基本单位,线程是CPU调度的基本单位。多线程Web服务器会创建线原创 2021-12-05 02:50:52 · 260 阅读 · 0 评论 -
pytest print函数无法输出
pytest直接执行的话print的中间结果无法看到解决方案如下:pytest -s xxx.py原创 2021-12-04 06:02:59 · 2865 阅读 · 0 评论 -
数据库系统概论复习笔记
Ch1 绪论1.1 基本概念数据Data、数据库DB、数据库管理系统DBMS、数据库系统DBS数据是数据库中存储的基本对象,是用来描述事物的符号。数据库是长期储存在计算机内的、有组织的、可共享的、大量数据的集合。数据库管理系统位于用户与操作系统之间的一层数据管理软件,用于科学地组织和存储数据、高效地获取和维护数据。数据库系统:计算机系统中引入数据库后的系统(基于数据库的系统=APP+DB+DBMS+DBA,即下图)数据库发展历史人工管理阶段:无磁盘、无操作系统、无数据管理软件,数据无原创 2021-11-17 04:11:39 · 539 阅读 · 0 评论 -
SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED]
在使用urllib.request.Request(url)前,添加代码:import ssl # 导入证书模块ssl._create_default_https_context = ssl._create_unverified_context # 在加上这段即可解决原创 2021-11-06 10:00:46 · 712 阅读 · 0 评论 -
MYSQL:Access denied for user...
grant all privileges on *.* to dev@localhost;flush privileges;权限不够,grant一下权限原创 2021-08-06 16:54:51 · 230 阅读 · 0 评论 -
mysql workbench无法登录的bug
由于mysql的加密方式改变,而与workbench没有统一而引起的ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your password'; FLUSH PRIVILEGES;前一句是更改加密方式为旧式的:mysql_native_password,然后刷新配置。...原创 2021-08-06 13:55:34 · 953 阅读 · 5 评论 -
linux cpp操作mysql
编译额外参数:-l mysqlclientg++ -Wall test.cpp -o test -l mysqlclientdemo#include <mysql/mysql.h>#include <stdio.h>#include <stdlib.h>int main() { MYSQL *conn; MYSQL_RES *res; MYSQL_ROW row; char server[] = "localhost";原创 2021-08-05 22:00:02 · 241 阅读 · 0 评论 -
Django 接收并解析POST请求参数
使用Django框架搭建一个简单的web服务,java程序去调用Django提供的接口:1. Django接收GET请求并解析参数# 直接使用request.GET.get就可以获取参数request.GET.get('id','0')2. Django接收POST请求并解析参数使用postman模拟POST请求,需要关闭csrftoken的验证:将settings.py中的csrf规则注释(1)使用表单传递参数设置Header中的Content-Type为application/x-ww转载 2021-04-10 12:06:56 · 4118 阅读 · 0 评论 -
python发送post请求
发送post请求分为表单类(x-www-form-urlencoded)和json(application/json)格式data参数支持字典格式和字符串格式,建议使用字典格式,在使用json.dumps()方法把data转换为合法的json格式字符串,或者将data参数赋值给post方法的json参数data以字符串格式传输需要注意的事项:1、必须是json格式字符串,必须用双引号,k-v之家必须有逗号,布尔值必须是小写的true/false2、不能有中文,直接传字符串不会自动编码1、传统表单p转载 2021-04-10 02:00:54 · 425 阅读 · 0 评论 -
Django框架
Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。Django 是一个开放源代码的 Web 应用框架,由 Python 写成。Django 遵守 BSD 版权,初次发布于 2005 年 7 月, 并于 2008 年 9 月发布了第一个正式版本 1.0 。Django 采用了 MVT 的软件设计模式,即模型(Model),视图(View)和模板(Template)。学习资源官方文档 https://docs.djang原创 2020-12-16 21:16:32 · 212 阅读 · 0 评论 -
吞吐量(TPS)、QPS、并发数、响应时间(RT)概念
1. 响应时间(RT)响应时间是指系统对请求作出响应的时间。直观上看,这个指标与人对软件性能的主观感受是非常一致的,因为它完整地记录了整个计算机系统处理请求的时间。由于一个系统通常会提供许多功能,而不同功能的处理逻辑也千差万别,因而不同功能的响应时间也不尽相同,甚至同一功能在不同输入数据的情况下响应时间也不相同。所以,在讨论一个系统的响应时间时,人们通常是指该系统所有功能的平均时间或者所有功能的最大响应时间。当然,往往也需要对每个或每组功能讨论其平均响应时间和最大响应时间。对于单机的没有并发操作的应用系转载 2021-02-07 19:48:07 · 2808 阅读 · 0 评论 -
Python Web开发 # Flask框架教程
基础Flask基于Werkzeug WSGI工具包和Jinja2模板引擎Flask被称为“microframework” ,使用简单的核心,用extension增加其他功能。Flask没有默认使用的数据库、窗体验证工具。WSGI:Web Server Gateway Interface(Web服务器网关接口,WSGI)已被用作Python Web应用程序开发的标准。 WSGI是Web服务器和Web应用程序之间通用接口的规范。Werkzeug它是一个WSGI工具包,它实现了请求,响应对象和实用函原创 2021-02-01 02:31:26 · 674 阅读 · 0 评论