视频学习网站防作弊方法
为了防止用户多点登录,同时开多个视频课程,对课程进度进行作弊,需要在每次登录时验证是否存在其他登录的session,并将使用其他session观看的课程视频记录停掉。
从网上找到两种思路:
1、查session表中存的userid,由于userid是编码后存储在session表的data字段中,因此每次调用userid都需要解码和遍历整个数据集
https://blog.csdn.net/weixin_34126215/article/details/88007060
2、将每个用户上次登录的sessionid存储在user扩展表中,这样就能快速查找用户对应的session。
https://blog.csdn.net/weixin_44834666/article/details/106017407
建议使用第二种思路,但我的实现方法有些区别。
参考手册:
读取除本次请求外的session的方法:
https://docs.djangoproject.com/zh-hans/3.1/topics/http/sessions/#using-sessions-out-of-views
扩展预定义User模型的方法:
一对一关联:
https://docs.djangoproject.com/zh-hans/3.1/topics/db/examples/one_to_one/
关于python装饰器:https://www.runoob.com/w3cnote/python-func-decorators.html
带参数的装饰器
装饰器还有更大的灵活性,例如带参数的装饰器,在上面的装饰器调用中,该装饰器接收唯一的参数就是执行业务的函数 foo 。装饰器的语法允许我们在调用时,提供其它参数,比如@decorator(a)。这样,就为装饰器的编写和使用提供了更大的灵活性。比如,我们可以在装饰器中指定日志的等级,因为不同业务函数可能需要的日志级别是不一样的。
def use_logging(level): def decorator(func): def wrapper(*args, **kwargs): if level == "warn": logging.warn("%s is running" % func.__name__) elif level == "info": logging.info("%s is running" % func.__name__) return func(*args) return wrapper return decorator @use_logging(level="warn") def foo(name='foo'): print("i am %s" % name) foo()
上面的 use_logging 是允许带参数的装饰器。它实际上是对原有装饰器的一个函数封装,并返回一个装饰器。我们可以将它理解为一个含有参数的闭包。当我 们使用@use_logging(level="warn")调用的时候,Python 能够发现这一层的封装,并把参数传递到装饰器的环境中。
@use_logging(level="warn") 等价于 @decorator
本文地址:https://blog.csdn.net/qq_27361945/article/details/110917180
推荐阅读
-
视频学习网站防作弊方法
-
谷歌打不开解决办法,优酷等视频网站屏蔽广告方法
-
ASP.NET学习笔记(五)-全球化部署,网站发布方法,AJAX使用,水晶报表使用,DropDownList,CheckBox全选
-
photoshop学习网站 php学习笔记 面向对象的构造与析构方法
-
屏蔽优酷、土豆等多个视频网站的15秒广告的方法(通过hosts)
-
怎么下载网页中的视频?网站视频下载方法技术分享
-
ASP.NET学习笔记(五)-全球化部署,网站发布方法,AJAX使用,水晶报表使用,DropDownList,CheckBox全选
-
土豆视频在线网站观看影片无法播放的解决方法
-
怎么下载网页中的视频?网站视频下载方法技术分享
-
禁止视频网站利用Flash插件P2P上传的方法