首页
畅所欲言
友情链接
壁纸大全
数据统计
推荐
工具箱
在线白板
Search
1
职教云小助手重构更新,职教云助手最新版下载地址【已和谐】
13,307 阅读
2
职教云-智慧职教,网课观看分析(秒刷网课)
10,905 阅读
3
gradle-5.4.1-all.zip下载
8,831 阅读
4
职教云-智慧职教,签到补签分析(逆天改命系列)
7,816 阅读
5
一个优秀的程序员从写文档开始:免费领14个月语雀云笔记会员
6,866 阅读
学习笔记
Web
Python
转载文章
算法刷题
JS逆向
综合笔记
安卓
物联网
Java
C
资源收集
软件收藏
网络资源
影视专辑
TED英语角
随便写写
随手拍
登录
/
注册
Search
Lan
累计撰写
623
篇文章
累计收到
612
条评论
首页
栏目
学习笔记
Web
Python
转载文章
算法刷题
JS逆向
综合笔记
安卓
物联网
Java
C
资源收集
软件收藏
网络资源
影视专辑
TED英语角
随便写写
随手拍
页面
畅所欲言
友情链接
壁纸大全
数据统计
推荐
工具箱
在线白板
搜索到
51
篇与
的结果
2022-12-09
开源:匿名口令分享文本,文件-口令文件箱-文件快递柜
文件快递柜-轻量 FileCoxBox-Lite 匿名口令分享文本,文件,像拿快递一样取文件 视频介绍{bilibili bvid="BV1fD4y187Yk" page=""/}主要特色[x] 轻量简洁:Fastapi+Sqlite3+Vue2+ElementUI[x] 轻松上传:复制粘贴,拖拽选择[x] 多种类型:文本,文件[x] 防止爆破:错误次数限制[x] 防止滥用:IP限制上传次数[x] 口令分享:随机口令,存取文件,自定义次数以及有效期[x] 匿名分享:无需注册,无需登录[x] 管理面板:查看所有文件,删除文件[x] 一键部署:docker一键部署未来规划2022年12月14日这个项目主要是以轻量为主,主要是单用户,离线环境,因此也不需要加太多东西,所以其实这个项目到这基本功能已经完成了,剩下的就是维护和完善现有功能。也不会再加入新的大功能了,如果有新的功能的话,那就是我们的Pro版本了,当然也是继续开源的,能和@veoco一起开源挺荣幸的,在他的代码中我学到了许多,此前我基本上是使用Django那一套,对Fastapi仅限于使用,他的许多写法让我受益匪浅,也让我对Fastapi有了更深的了解,所以我也会在Pro版本中使用Fastapi。根据目前一些使用反馈来说,希望加入登录功能,还有多存储引擎等,欢迎各位继续提意见,加入我们共同开发。如果你有更好的想法和建议欢迎提issue。预览例站https://share.lanol.cn寄件 取件 管理部署方式Docker一键部署docker run -d --restart=always -p 12345:12345 -v /opt/FileCodeBox/:/app/data --name filecodebox lanol/filecodebox:latest其他方式仅供参考,历史版本->部署文档配置文件如果需要修改配置,可以将该文件放在/opt/FileCodeBox/目录下,并命名为.env,然后重启容器即可。如果不是Docker,则需要在项目同目录下新建一个data文件夹,然后在创建.env文件# 端口 PORT=12345 # Sqlite数据库文件 DATABASE_URL=sqlite+aiosqlite:///database.db # 静态文件夹 DATA_ROOT=./static # 静态文件夹URL STATIC_URL=/static # 是否开启上传 ENABLE_UPLOAD=true # 错误次数 ERROR_COUNT=5 # 错误限制分钟数 ERROR_MINUTE=10 # 上传次数 UPLOAD_COUNT=60 # 上传限制分钟数 UPLOAD_MINUTE=1 # 管理地址 ADMIN_ADDRESS=admin # 管理密码 ADMIN_PASSWORD=admin # 文件大小限制,默认10MB FILE_SIZE_LIMIT=10 # 网站标题 TITLE=文件快递柜 # 网站描述 DESCRIPTION=FileCodeBox,文件快递柜,口令传送箱,匿名口令分享文本,文件,图片,视频,音频,压缩包等文件 # 网站关键词 KEYWORDS=FileCodeBox,文件快递柜,口令传送箱,匿名口令分享文本,文件,图片,视频,音频,压缩包等文件 # 存储引擎 STORAGE_ENGINE=filesystem状态免责声明本项目开源仅供学习使用,不得用于任何违法用途,否则后果自负,与本人无关。使用请保留项目地址谢谢。
2022年12月09日
1,136 阅读
37 评论
0 点赞
2022-11-07
图床,通过Python调用api上传图片到Gitlab
用过一段时间的PicGo,但是感觉太重了,为了一个上传图片去装一个软件有点太麻烦。然后目前个人感觉也就Gitlab速度还可以一点,于是昨天翻了官方文档踩了很多坑,总算搞好了。现将关键代码放到这里。 file_path = datetime.datetime.now().strftime('zb_users/upload/%Y/%m/') headers = {'PRIVATE-TOKEN': '这里放你的项目token'} img = file.file.read() ext = file.content_type.split('/')[-1] file_path = urllib.parse.quote(file_path + uuid.uuid4().hex + '.' + ext).replace('/', '%2f') url = f'https://gitlab.com/api/v4/projects/这里放你的项目ID/repository/files/{file_path}' response = await requests.post(url, headers=headers, json={ 'branch': 'master', 'content': base64.b64encode(img).decode('utf-8'), 'author_email': 'blog@lanol.cn', 'author_name': 'Lan', 'encoding': 'base64', 'commit_message': 'www.lanol.cn' }) res = await response.json()然后花了点时间写了个小前端用来上传,支持选择,拖拽,粘贴文件进行上传。
2022年11月07日
307 阅读
1 评论
0 点赞
2022-06-20
Fastpi中使用Alembic实现对数据库热更新
一直用的Django,他的ORM非常的方便,强大,从数据库迁移到各种查询。但是最近想自己搞一个个人全聚合平台,准备用Fastapi框架,orm用sqlalchemy,在寻找增量更新数据库的时候,看见fastapi官方模板里面用到了alembic,然后在网上搜了一下,发现这个教程很不错,已经实现了。转载:https://zhuanlan.zhihu.com/p/455265421如果出现循环导入mportError: cannot import name '' from partially initialized module '' (most likely due to a circular import) 在db模块下的__init__.py使用这种导入就行了,不需要具体到模型import app.model
2022年06月20日
179 阅读
0 评论
0 点赞
2022-03-16
DRF利用JWT实现用户认证
根据上一篇文章可以知道JWT的原理和意义所以在这里分享一下jwt在drf中的应用auth.py将jwt写出来import datetime import jwt from django.conf import settings from jwt import exceptions from rest_framework.authentication import BaseAuthentication from rest_framework.exceptions import AuthenticationFailed def create_token(payload, exp=30): headers = {'typ': 'jwt', 'alg': 'HS256'} payload['exp'] = datetime.datetime.utcnow() + datetime.timedelta(days=exp) return jwt.encode(payload, settings.SECRET_KEY, "HS256", headers) class JwtAuthentication(BaseAuthentication): def authenticate(self, request): # 获取请求头中Token token = request.META.get('HTTP_TOKEN') try: payload = jwt.decode(token, settings.SECRET_KEY, "HS256") except exceptions.ExpiredSignatureError: raise AuthenticationFailed({'code': 204, 'msg': 'Token已失效'}) except jwt.DecodeError: raise AuthenticationFailed({'code': 204, 'msg': 'Token认证失败'}) except jwt.InvalidTokenError: raise AuthenticationFailed({'code': 204, 'msg': 'Token非法'}) return payload, tokensettings.py在drf的view中全局应用此认证方式REST_FRAMEWORK = { "DEFAULT_AUTHENTICATION_CLASSES": ['utils.auth.JwtAuthentication'] }views.py一个登录的view,将认证方式设为空,另外一个可以直接获取# Create your views here. from rest_framework.views import APIView from utils.auth import create_token from utils.commen import standard_response class LoginView(APIView): authentication_classes = [] @staticmethod def post(request, *args, **kwargs): username = request.data.get('username') password = request.data.get('password') if not username == 'lan' and password == 'password': return standard_response(None, msg='用户名或密码错误') token = create_token({'username': username}) return standard_response(data=token, msg='登陆成功') class IndexView(APIView): @staticmethod def post(request, *args, **kwargs): return standard_response(data='来源网站:www.lanol.cn', msg=f'欢迎您{request.user["username"]}') 登录获取Token验证Token成功Token超时失效这个auth.py不止在drf中可用,其他的web框架,fastapi啥的也是通用的,只要将返回改一下即可
2022年03月16日
521 阅读
8 评论
1 点赞
2022-03-16
JsonWebToken jwt实现过程和原理
jwt生成的Token组成eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c这是一串由jwt生成的token,它分为三部分字符串,由 . 隔开第一段字符串:HEADER:ALGORITHM & TOKEN TYPE{ "alg": "HS256", "typ": "JWT" }HEADER内包含算法和Token类型通过base64url加密而来第二段字符串:PAYLOAD:DATA{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 }json转化成字符串,然后做base64url加密第三端字符串:VERIFY SIGNATURE第一步 将第1,2部分密文拼接起来eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ第二步 对前两部分密文进行SHA256加密加盐第三步 对HS256加密后的密文再做base64url加密对Token进行校验先获取Token对Token进行切割对第二部分进行base64url解密,并获取payload信息,检测exp字段是否超时把第1,2端密文拼接,再次执行sha256加密,判断是否相等,如果相等则认证通过
2022年03月16日
262 阅读
0 评论
3 点赞
2022-03-01
django 软删除 默认查询为True 传任何非bool值查询出所有的
发现了一个Bug:外键的外键不会进行is_valid验证{dotted startColor="#ff6c6c" endColor="#1989fa"/}class ValidQueryset(models.QuerySet): def filter(self, *args, **kwargs): is_valid = kwargs.pop('is_valid', True) if isinstance(is_valid, bool): kwargs['is_valid'] = is_valid return super().filter(*args, **kwargs) class BaseManage(models.Manager): _queryset_class = ValidQueryset class BaseModel(models.Model): is_valid = models.BooleanField(default=True, verbose_name='数据有效/无效') objects = BaseManage() class Meta: abstract = True
2022年03月01日
210 阅读
0 评论
1 点赞
2021-08-28
vue页面内锚点跳转
这两天想用刚学的Vue做一个网址导航,刚好手里有一个域名v1.pw,于是唯一导航便诞生了。Element真的踩坑无数,不同组件嵌套起来有不同奇葩BUG。然后我想的是右边的菜单导航,点击之后页面就滑动到相应的地方,因为导航比较简单,所以基本上就在一个页面了。一开始想的是用a标签的跳转,然后把那些分类的id就弄为href属性。然后发现页面直接跳转了。在网上发现了Element.scrollIntoView()https://developer.mozilla.org/zh-CN/docs/Web/API/Element/scrollIntoView在methods里面定义一个跳转方法 skip(targetId) { let el = document.getElementById(targetId) if (el) { el.scrollIntoView({behavior: "smooth"}) } }在页面里面调用@click="skip('tab-'+item.category.id)"就可以达到想要的效果了
2021年08月28日
249 阅读
2 评论
0 点赞
1
2
3
...
8