Django如何记录登录系统时间

2023-03-07 16:56:05 29 0
卡卡

导读:本篇文章恰卡编程网来给大家介绍有关Django如何记录登录系统时间的相关内容,希望对大家有所帮助,一起来看看吧。

django怎样验证用户是否登录

你没有用django自带的admin模块么?如果用自带的,他是不弹出窗口的,是个错误的MSG,在登录窗体的上方,红色字体显示;这个admin启用之后,就自动有登录界面和错误提示的,不需要自己再写任何代码;如果你想修改他的登录界面

Django如何记录登录系统时间

django 中session 怎么设置timeout

Django 完全支持匿名 Session Session 框架允许每用户保存并取数据数据保存服务器端并发送接收 Cookie 操作包装起 Cookie 包含 Session ID数据本身 启用 Sessions¶ Session 通 间件 式实现 要启用 Session 功能需要完步骤: 修改 MIDDLEWARE_CLASSES 设置并确定其包含 'django.contrib.sessions.middleware.SessionMiddleware' ``django-admin.py startproject`` 所创建缺省 settings.py 已经激 SessionMiddleware 'django.contrib.sessions' 添加 INSTALLED_APPS 设置并执行 manage.py syncdb 便安装用于存储 Session 数据表格 Changed in Django 依.0: 并未使用数据库存储 Session则步骤忽略;参考 配置 Session 引擎 If you don’t want to use sessions, you might as well remove the SessionMiddleware line from MIDDLEWARE_CLASSES and 'django.contrib.sessions' from your INSTALLED_APPS. It’ll save you a small bit of overhead. 配置 Session 引擎¶ New in Django 依.0.. 缺省情况Django Session 存储数据库 (使用模型 django.contrib.sessions.models.Session)尽管便某些情况 Session 放其速度更快 Django 允许您通配置让 Session 数据保存文件系统或缓冲区 使用基于文件 Session¶ 要使用基于文件 Session请 SESSION_ENGINE 设置 "django.contrib.sessions.backends.file" 您能需要修改 SESSION_FILE_PATH 设置便控制 Django 存储 Session 文件位置缺省情况使用 tempfile.gettempdir() 通 /tmp 使用基于缓冲区 Session¶ 要使用 Django 缓冲区系统保存 Session需要 SESSION_ENGINE 设置 "django.contrib.sessions.backends.cache" 您必须确保您已经配置缓冲区详情请参考 缓冲区文档 Note 使用 Memcached 作缓冲台才能使用基于缓冲区 Session本内存作缓冲台存储缓冲数据间太短直接访问文件或数据库速度要比通缓冲区访问文件或数据库速度更快些 视图使用 Session¶ 启 SessionMiddleware 每 HttpRequest 象 (Django 视图函数第参数) 救火 session 属性类字典象您直接其读写 Session 象标准字典函数: __getitem__(key) 例: fav_color = request.session['fav_color'] __setitem__(key, value) 例: request.session['fav_color'] = 'blue' __delitem__(key) 例: del request.session['fav_color']. This raises KeyError if the given key isn’t already in the session. __contains__(key) 例: 'fav_color' in request.session get(key, default=None) 例: fav_color = request.session.get('fav_color', 'red') keys() items() setdefault() clear() New in Django 依.0: setdefault() clear() 版本新加 : flush() New in Django 依.0. 数据库删除前 Session 数据并且重新 Session 键并其发送给浏览器用于需要确保 Session 数据再用户浏览器访问譬调用 django.contrib.auth.logout() set_test_cookie() 设定检测 Cookie 检验用户浏览器否支持 Cookie Cookie 工作式用户请求前您都测试结详情参考面 设置检测 Cookie test_cookie_worked() 判断用户浏览器否收检测 Cookie并返 True 或 False Cookie 工作式您必须前独立请求调用 set_test_cookie() 详情参考面 设置检测 Cookie delete_test_cookie() 删除检测 Cookie请自调用函数便清除该 Cookie set_expiry(value) New in Django 依.0. 设定 Session 期间您提供述几种形式值: value 整形则表示秒例调用 request.session.set_expiry(三00) 让 Session 五钟期 value datetime 或 timedelta 象则 Session 相应期或间点期 value is 0 则用户 Session 浏览器关闭期 value is None 则 Session 使用全局策略设定期间 get_expiry_age() New in Django 依.0. 获 Session 期间于没自定义期间 Session (或浏览器关闭期 Session)函数返值与 settings.SESSION_COOKIE_AGE 相同 get_expiry_date() New in Django 依.0. 获 Session 期间点于没自定义期间 Session (或浏览器关闭期 Session)函数返值等于现间点 settings.SESSION_COOKIE_AGE 秒数 get_expire_at_browser_close() New in Django 依.0. 返 Session 否浏览器关闭期返值 True 或 False 您视图任何位置都修改 request.session 改少都行 Session 象指南¶ 直接 request.session 使用 Python 字符串作字典键比使用 Session 象更直接 Session 字典划线始键保留给 Django 内部使用 要用新象覆盖 request.session 要访问或修改属性能作类字典象使用 例¶ 简单视图用户提交评价信息变量 has_commented 设定 True 防止用户提交评价信息: def post_comment(request, new_comment): if request.session.get('has_commented', False): return HttpResponse("You've already commented.") c = comments.Comment(comment=new_comment) c.save() request.session['has_commented'] = True return HttpResponse('Thanks for your comment!') 简单视图让中国站用户登录: def login(request): m = Member.objects.get(username=request.POST['username']) if m.password == request.POST['password']: request.session['member_id'] = m.id return HttpResponse("You're logged in.") else: return HttpResponse("Your username and password didn't match.") ...与面例相应面例则让用户退: def logout(request): try: del request.session['member_id'] except KeyError: pass return HttpResponse("You're logged out.") 实际标准 django.contrib.auth.logout() 做些事情防止疏忽造数据泄露调用 request.session.flush() 函数我使用些例演示何操作 Session 象完整 logout() 实现 设置检测 Cookie¶ 便起见Django 提供种简单检测用户浏览器否支持 Cookie要请求调用 request.session.set_test_cookie() 并续请求调用 request.session.test_cookie_worked() 即注意千万要同请求同调用 所要两请求调用 set_test_cookie() test_cookie_worked() Cookie 工作模式您设定 Cookie 再请求前都没办知道浏览器否接收 另外测试完毕使用 delete_test_cookie() 清除测试用数据 典型例: def login(request): if request.method == 'POST': if request.session.test_cookie_worked(): request.session.delete_test_cookie() return HttpResponse("You're logged in.") else: return HttpResponse("Please enable cookies and try again.") request.session.set_test_cookie() return render_to_response('foo/login_form.html') 视图外使用 Session¶ New in Django 依.0. API 专门用于视图外操作 Session 数据: from django.contrib.sessions.backends.db import SessionStore s = SessionStore(session_key='贰b依依吧9a依吧吧b四四ad依吧c三5e依依三ac陆ceead') s['last_login'] = datetime.datetime(贰005, 吧, 贰0, 依三, 三5, 依0) s['last_login'] datetime.datetime(贰005, 吧, 贰0, 依三, 三5, 0) s.save() 您使用 django.contrib.sessions.backends.db 台则每 Session 都普通 Django 模型模型 Session 文件 django/contrib/sessions/models.py 定义由于普通模型您使用 Django 数据库编程接口直接访问: from django.contrib.sessions.models import Session s = Session.objects.get(pk='贰b依依吧9a依吧吧b四四ad依吧c三5e依依三ac陆ceead') s.expire_date datetime.datetime(贰005, 吧, 贰0, 依三, 三5, 依贰) 注意要获 Session 字典需要调用 get_decoded() 字典编码式存储: s.session_data 'KGRwMQpTJ依9hdXRoX三VzZXJfaWQnCnAyCkkxCnMuMTExY贰ZjODI贰Yj...' s.get_decoded() {'user_id': 四贰} Session 何存储¶ 缺省情况Django Session 修改才保存即字典值修改或删除: # Session is modified. request.session['foo'] = 'bar' # Session is modified. del request.session['foo'] # Session is modified. request.session['foo'] = {} # Gotcha: Session is NOT modified, because this alters # request.session['foo'] instead of request.session. request.session['foo']['bar'] = 'baz' 于面通显示设定 Session 象 modified 属性通知 Session 象修改: request.session.modified = True 要改变种行 SESSION_SAVE_EVERY_REQUEST 设定 True SESSION_SAVE_EVERY_REQUEST True 则 Django 每独立请求都保存 Session 注意创建或修改 Session 候才送 Session Cookie SESSION_SAVE_EVERY_REQUEST True 则每请求都送 Cookie 同送 Cookie expires 部每都更新 与浏览器同步 Session 持久 Session¶ 通设置 SESSION_EXPIRE_AT_BROWSER_CLOSE 您控制 Session 框架使用与浏览器同步 Session 或持久 Session 缺省情况 SESSION_EXPIRE_AT_BROWSER_CLOSE 值 False 表示 Session Cookie 保存用户浏览器直超 SESSION_COOKIE_AGE 您希望用户必每关闭浏览器都重新登陆请使用种式 SESSION_EXPIRE_AT_BROWSER_CLOSE 设定 True 则 Django 使用与浏览器同步 Cookie即用户关闭浏览器 Cookie 期您希望用户每打浏览器都必须登录请使用种模式 New in Django 依.0. 设置具全局缺省值通调用 request.session.set_expiry() 每 Session 设定独立值相关内容述 视图使用 Session 所阐述 清空 Session 表格¶ 注意Session 数据能堆积数据库表格 django_session Django 提供 自清除功能定期清空 Session 数据任务留给您 要理解问题想像用户使用 Session 发用户登录Django 向表格 django_session 添加条记录每 Session 数据变化Django 更新条记录用户手工退Django 删除用户 没 退则条记录永远都删除 Django 提供能够完清除功能例脚本 django-admin.py cleanup Session 表格删除些 expire_date 已经期记录您应用程序能其需求 设置¶ 些 Django 设置 帮助您控制 Session 行: SESSION_ENGINE¶ New in Django 依.0. 缺省值: django.contrib.sessions.backends.db 控制 Django 何处保存 Session 数据合值: 'django.contrib.sessions.backends.db' 'django.contrib.sessions.backends.file' 'django.contrib.sessions.backends.cache' 详情请参考 配置 Session 引擎 SESSION_FILE_PATH¶ New in Django 依.0. 缺省值: /tmp/ 您使用基于文件 Session 存储则变量控制着 Django 存储 Session 数据目录 SESSION_COOKIE_AGE¶ 缺省值: 依贰09陆00 (两周秒表示) Session Cookie 期间秒表示 SESSION_COOKIE_DOMAIN¶ 缺省值: None Session Cookie 域要设定跨域 Cookie其设定 ".lawrence中国" 形式否则请使用 None SESSION_COOKIE_NAME¶ 缺省值: 'sessionid' Session 所使用 Cookie 名称根据需要设定 SESSION_COOKIE_SECURE¶ 缺省值: False 于 Session Cookie否要使用安全模式设定 True 则 Cookie 标记安全种情况浏览器需要确定该 Cookie 否通 HTTPS 连接发送 SESSION_EXPIRE_AT_BROWSER_CLOSE¶ 缺省值: False 否用户关闭浏览器让 Session 期详情参考文 与浏览器同步 Session 持久Session SESSION_SAVE_EVERY_REQUEST¶ 缺省值: False 否每请求都保存 Session 数据项 False (缺省值)则 Session 数据修改才保存即字典值赋值或删除 技术细节¶ Session 字典接受任何与 pickle 兼容 Python 象详情参考 pickle 模块 Session 数据存储数据库表格 django_session Django 需要候才发送 Cookie您没设定任何 Session 数据送 Cookie URL Session ID¶ Django Session 框架完全基于 Cookie 并且能基于 Cookie像些软件(譬 PHP) Session 能工作 Session ID 放 URL 作决定经深思熟虑种仅使 URL 丑陋并且 Session ID 能通 Referer 泄漏给中国站带安全隐

关闭浏览器再打开,网站的自动登录以功能如何实现

Session是一种服务器端的对象,保存在服务器端。 每个session 有一个唯一的session id。 session的超时也是由服务器来控制。比如,在Django的配置中就有一项叫做SESSION_TIMEOUT的用来控制session超时时间。

而Cookie是由客户端进行保存的,其中会保存session id这一项,用以记录服务器端的session. 正因为有此一项,我们在关闭浏览器后再打开浏览器,如果cookie仍然记住了之前的session id,就导致可以自动登录。

那么cookie什么情况下会记住session id,什么情况下又记不住呢?这就要说到2种cookie:内存cookie和硬盘cookie.

Cookie分为内存Cookie(也可以说是进程中Cookie)和硬盘Cookie。大部分的session机制都使用进程中Cookie来保存session id,关闭浏览器后这个进程自动消失了,因此Cookie和Cookie中的session id也消失了,再次连接到服务器时无法找到原来的session. 所以,在这种情况下,就是需要再次输入密码登录的。但是保存在硬盘中的cookie却不会丢失session id,所以即使关闭浏览器再打开,也是仍能连得上上一次的session,从而可以自动登录。

又比如说,我们可以在登录时选择“下次自动登录”,例如CSDN的“记住我一周”,或者我们的购物车信息可以在切换不同浏览器时依然可用。这时用到的就是硬盘Cookie,此时,session id将长期保存在硬盘上的Cookie中,直到session失效为止。

除了session和cookie,还有一个常见的服务器端配置项,在Django中叫做 SESSION_EXPIRE_AT_BROWSER_CLOSE. 望文生义,看上去将这个配置项设为True,似乎就可以做到“在重启浏览器之后,必须手动输入密码才能登录”了。其实不然。服务器其实并不知道浏览器关闭了没有,所以关闭浏览器时服务器是不会删除session的,也正是这个原因服务器才会设置一个session的失效时间,不然服务器的资源就会被耗尽。所以当session的失效时间到了,服务器便会将相应的session删除。而我们可以在每一次和服务器的交互中,比如REST API请求和应答,都update当前session,比如session.modified = True, 则该session的超时时间会从当前时间点开始重新计算。

有人可能会说,服务器其实有办法知道浏览器关闭了没有。比如,在JS代码中使用window.onclose来监控标签页是否关闭,然后配合 SESSION_EXPIRE_AT_BROWSER_CLOSE = True ,这样就能够在关闭浏览器的时候清除session了。这么做基本能实现目标,但是也有一个较大的问题:因为在一个浏览器中,可能会有多个标签页,它们是属于同一个session的。当一个标签页被关闭后,该session被清除,会导致所有其他标签页都不可用了。这不会是用户希望得到的体验。

回到最初的问题:关闭浏览器再打开,或者说重启浏览器后,网站是否应该自动登录呢?

答:其实目前有许多网站是支持重启浏览器后自动登录的,比如GitHub. 当然也有些是不支持的,比如网银。

如果要在程序中进行控制,该怎么做呢?笔者实验了一些方法,比如设置cookie的过期时间,但似乎没什么用;不过,可以在浏览器中进行控制。

比如,在Chrome的高级设置的Cookie中,有一项叫做“仅将本地数据保留到您退出浏览器为止”,默认是disable的,将其enable即可实现“重启浏览器,不会自动登录”了。Firefox也有类似的设置。但是,设置这个选项也是有很大副作用的,那就是所有网站都无法自动登录了,比如GitHub.

所以,总结一下,“对于一般网站来说,即使重启浏览器,仍可以自动登录”,这基本是可以接受的。理由有2点:一、许多知名网站就是这么做的(这似乎不是个好理由);二、服务器端对session其实还是有超时时间控制的,常见的为1小时,当然也有数天的。但是,如果想从程序而不是浏览器的角度,比较完美地控制是否自动登录,笔者还没有找到好的办法。

Django--快速实现用户登录

我们在系统开发时都会遇到用户登录的需求,使用Django 用户认证(Auth)组件可以帮助我们判断当前的用户是否合法,快速实现用户登录、验证和退出。

Django中 LOGIN_URL 默认是 /accounts/login/ ,如果我们不设置就会跳转到 /accounts/login/ 页面去,因此需要我们覆写这个值,让它指向我们的登录页面。

使用django自带的装饰器 @login_required,就可以判断用户是否登录,只需要在相应的view方法的前面添加@login_required。

最后给大家做个展示:

你学会了吗,赶紧去试试吧!!!

怎么实现后台django系统操作日志

怎么实现后台django系统操作日志

首先建个管理日志表。

然后建个类负责日志表的操作

我的日志表是这样的

日志ID

管理员ID

管理员姓名

操作类型

操作名称(执行什么操作)

时间

IP地址

备注

------------------------------

当然根据你的需要,可以建立更复杂的日志表。

我有个日志类,里面有个静态方法。

需要记录日志的时候,我就调用

EventLog.LogEvent(...)

--------------------------------

至于显示,就简单了。随便你怎么查询,最简单的绑定到DataGrid即可

django 日志文件如何按时间日期切割,原生不支持吗

django 日志文件如何按时间日期切割

linux下处理tomcat日志切割与删除操作:

System.out和System.err都被打印到catalina.out。catalina.out不会rotate。一般在部署tomcat后,运行久了,catalina.out文件会越来越大,对系统的稳定造成了一定的影响。

1、可通过修改conf/logging.properties日志配置文件来屏蔽掉这部分的日志信息。

将level级别设置成WARNING就可以大量减少日志的输出,当然也可以设置成OFF,直接禁用掉。

一般日志的级别有:

2、使用cronolog工具切分Tomcat的catalina.out日志文件,下载、安装cronolog。

用which cronolog可以查到安装的路径,这个路径待会在修改catalina.sh时会用到。

修改catalina.sh 将183行修改成184行内容,注释掉355行,368、369行替换成370、371行,379、380行替换成381、382行。

这样在/usr/local/tomcat/logs每天会自动生成catalina.%Y-%m-%d.out文件,下面要做的是定期清理这些过期的文件,可以通过crontab来实现。

结语:以上就是恰卡编程网为大家整理的关于Django如何记录登录系统时间的全部内容了,感谢您花时间阅读本站内容,希望对您有所帮助,更多关于Django如何记录登录系统时间的相关内容别忘了在本站进行查找喔。

收藏
分享
海报
0 条评论
29
上一篇:django里的js是干什么的(2023年最新整理) 下一篇:django时间怎么设(2023年最新分享)

本站已关闭游客评论,请登录或者注册后再评论吧~

忘记密码?

图形验证码