首页
畅所欲言
友情链接
壁纸大全
数据统计
Search
1
职教云小助手重构更新,职教云助手最新版下载地址【已和谐】
10,282 阅读
2
职教云-智慧职教,网课观看分析(秒刷网课)
8,688 阅读
3
gradle-5.4.1-all.zip下载
7,374 阅读
4
一个优秀的程序员从写文档开始:免费领14个月语雀云笔记会员
6,150 阅读
5
职教云-智慧职教,签到补签分析(逆天改命系列)
6,138 阅读
学习笔记
Web
Python
转载文章
算法刷题
JS逆向
综合笔记
安卓
物联网
Java
C
资源收集
软件收藏
网络资源
影视专辑
随便写写
随手拍
登录
/
注册
Search
标签搜索
弹性布局
Lan
累计撰写
507
篇文章
累计收到
400
条评论
首页
栏目
学习笔记
Web
Python
转载文章
算法刷题
JS逆向
综合笔记
安卓
物联网
Java
C
资源收集
软件收藏
网络资源
影视专辑
随便写写
随手拍
页面
畅所欲言
友情链接
壁纸大全
数据统计
搜索到
41
篇与
Web
的结果
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日
86 阅读
2 评论
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日
64 阅读
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日
36 阅读
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"}) }
[email protected]
="skip('tab-'+item.category.id)"就可以达到想要的效果了
2021年08月28日
40 阅读
2 评论
0 点赞
2021-08-27
vite2+vue3配置axios跨域
在根目录下有一个vite.config.jsimport {defineConfig} from 'vite' import vue from
[email protected]
/plugin-vue' // https://vitejs.dev/config/ export default defineConfig({ plugins: [vue()], server: { proxy: { '/api': { target: 'https://sing.lanol.cn/', changeOrigin: true, rewrite: path => path.replace(/^\/api/, '') } } } })
2021年08月27日
125 阅读
0 评论
0 点赞
2021-08-23
ES6数组根据对象的某个属性去重
前言:es6的数组根据他其中某一个对象的key值来去重的封装方法封装方法如下: unique(arr, val) { const res = new Map() return arr.filter(item => !res.has(item[val]) && res.set(item[val], 1)) },调用使用方法:第一个参数是数组,第二个参数是你要根据哪个字段来去重 this.unique(DataList, 'GoodsId')来源:https://blog.csdn.net/qq_41619796/article/details/106259333
2021年08月23日
43 阅读
0 评论
0 点赞
2021-08-18
Vue3将数据导出为Excel—公司偷学技术的第1天
有一个任务要求是这样的,将抓取到的数据展示在页面之后,可以点击按钮导出问Excel文件。然后我翻项目原先的代码,也有类似的功能,并且导出之后网络图片也能够保存下来。用到了js-table2excel第一步安装 npm install js-table2excel第二步引入 import table2excel from 'js-table2excel'第三步使用 table2excel([列集合], [数据集合], '导出文件名')第三步生成表格需要传入三个参数列集合,数据集合和文件名。列集合格式如下:const column = [ { 'title':'表格中显示的标题', 'key':'数据集合中的键', 'type':'数据类型,text,image', 'width':'如果type为image可以设置宽度', 'height':'如果type为image可以设置高度', },{ 'title':'表格中显示的标题', 'key':'数据集合中的键', 'type':'数据类型,text,image', 'width':'如果type为image可以设置宽度', 'height':'如果type为image可以设置高度', }, ]至于数据集合这块要求不能套娃,就是数据必须全部在第一层,我就是因为这个然后踩坑了,不得不重新将数据清洗才传入,我的大概就是这样的。const exportData = [ { 'first':{ 'name':'张三', 'age':'18', }, 'second':{ 'money':1000, 'data':1 } },{ 'first':{ 'name':'A', 'age':'18', }, 'second':{ 'money':1000, 'data':1 } }, ]然后就报错了,被迫改成这样const exportData = [ { 'name':'张三', 'age':'18', 'money':1000, 'data':1 },{ 'name':'李四', 'age':'18', 'money':1000, 'data':1 }, ]图片源于网络,差不多这样
2021年08月18日
111 阅读
1 评论
0 点赞
1
2
...
6