您的当前位置:首页正文

django怎么记录人流量(django实时显示数据)

2024-09-04 来源:客趣旅游网

有网友碰到这样的问题“django怎么记录人流量(django实时显示数据)”。小编为您整理了以下解决方案,希望对您有帮助:

解决方案1:

今天首席CTO笔记来给各位分享关于django怎么记录人流量的相关内容,其中也会对django实时显示数据进行详细介绍,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:1、django怎么在admin里显示数据库的内容2、django实现实时消息推送有什么好的方案3、怎么实现后台django系统操作日志4、如何使用djangosessiondjango怎么在admin里显示数据库的内容

操作方法:首先要运行pythonmanage.pycreatesuperuser命令来创建一个管理员账户。

然后在url中输入/admin即可到达管理员登录页,登录之后会发现并没有数据库中要显示的项目,因为我们还没有注册。

接下来我们注册要在admin中管理的数据模型;在admin.py中注册模型。然后刷新页面,即可看到ContactMessage这个数据表了,可以在里边增删进行简单的增删改查。

django实现实时消息推送有什么好的方案

django实现实时消息推送,数据库数据一有变化就实时反应在页面上用作系统实时监控。在一个HTTP访问周期里,如果要执行一个长时间任务,为了避免浏览器等待,后台必须使用异步动作。

与此同时也要满足实时需求,用户提交了任务后可以随时去访问任务详情页面,在这里用户能够实时地看到任务的执行进度。针对异步任务处理,使用了Celery把任务放到后台执行。

Celery是一个基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理,关于它的使用方法《网易乐得RDS设计》也有提到。Celery在处理一个任务的时候,会把这个任务的进度记录在数据库中。

消息推送直接找专业的平台,例如极光。深圳市和讯华谷信息技术有限公司(极光AuroraMobile,纳斯达克股票代码:JG)成立于2011年,是中国领先的开发者服务提供商,专注于为开发者提供稳定高效的消息推送、一键认证以及流量变现等服务,助力开发者的运营、增长与变现。

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

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

首先建个管理日志表。

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

我的日志表是这样的

日志ID

管理员ID

管理员姓名

操作类型

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

时间

IP地址

备注

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

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

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

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

EventLog.LogEvent(...)

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

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

如何使用djangosession

Django完全支持匿名Session。Session框架允许每一个用户保存并取回数据。它将数据保存在服务器端,并将发送和接收Cookie的操作包装起来。在Cookie中包含的是SessionID,而不是数据本身。

启用Sessions?

Session是通过中间件的方式实现的。

要启用Session的功能,需要完成以下步骤:

修改MIDDLEWARE_CLASSES设置,并确定其中包含了'django.contrib.sessions.middleware.SessionMiddleware'。``django-admin.pystartproject``所创建的缺省的settings.py就已经激活了SessionMiddleware。

将'django.contrib.sessions'添加到你的INSTALLED_APPS设置中,并执行manage.pysyncdb以便安装用于存储Session数据的表格。

ChangedinDjango1.0:如果你并未使用数据库存储Session,则此步骤可以忽略;参考配置Session引擎。

Ifyoudon’twanttousesessions,youmightaswellremovetheSessionMiddlewarelinefromMIDDLEWARE_CLASSESand'django.contrib.sessions'fromyourINSTALLED_APPS.It’llsaveyouasmallbitofoverhead.

配置Session引擎?

NewinDjango1.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)

例子:delrequest.session['fav_color'].ThisraisesKeyErrorifthegivenkeyisn’talreadyinthesession.

__contains__(key)

例子:'fav_color'inrequest.session

get(key,default=None)

例子:fav_color=request.session.get('fav_color','red')

keys()

items()

setdefault()

clear()

NewinDjango1.0:setdefault()和clear()是在这个版本新加的。

它还有如下方法:

flush()

NewinDjango1.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)

NewinDjango1.0.

设定Session的过期时间。您可以提供下述几种形式的值:

如果value是整形,则它表示的是秒。例如,调用request.session.set_expiry(300)会让Session在五分钟后过期。

如果value是datetime或timedelta对象,则Session将会在相应的日期或时间点过期。

如果valueis0,则用户的Session会在浏览器关闭时过期。

如果valueisNone,则Session会使用全局策略来设定过期时间。

get_expiry_age()

NewinDjango1.0.

获得此Session的过期时间。对于没有自定义过期时间的Session(或在浏览器关闭时过期的Session),此函数返回值与settings.SESSION_COOKIE_AGE相同。

get_expiry_date()

NewinDjango1.0.

获得此Session的过期时间点。对于没有自定义过期时间的Session(或在浏览器关闭时过期的Session),此函数的返回值等于从现在到时间点settings.SESSION_COOKIE_AGE的秒数。

get_expire_at_browser_close()

NewinDjango1.0.

返回Session是否会在浏览器关闭时过期,返回值为True或False。

您在视图中的任何位置都可以修改request.session,改多少次都行。

Session对象指南?

直接在request.session上使用Python字符串作为字典的键,这比使用Session对象的方法来得更直接。

在Session字典中,以下划线开始的键,是保留给Django在内部使用的。

不要用一个新的对象覆盖request.session,也不要访问或修改它的属性,它只能作为一个类字典对象使用。

例子?

这个简单的视图在用户提交了评价信息后,将变量has_commented设定为True,这样就可以防止用户多次提交评价信息:

defpost_comment(request,new_comment):ifrequest.session.get('has_commented',False):returnHttpResponse("You'vealreadycommented.")c=comments.Comment(comment=new_comment)c.save()request.session['has_commented']=TruereturnHttpResponse('Thanksforyourcomment!')

这个简单的视图让网站的“用户”登录:

deflogin(request):m=Member.objects.get(username=request.POST['username'])ifm.password==request.POST['password']:request.session['member_id']=m.idreturnHttpResponse("You'reloggedin.")else:returnHttpResponse("Yourusernameandpassworddidn'tmatch.")

...与上面的例子相对应的,下面的例子则让用户退出:

deflogout(request):try:delrequest.session['member_id']exceptKeyError:passreturnHttpResponse("You'reloggedout.")

实际上标准的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()清除测试用数据。

以下是一个典型的例子:

deflogin(request):ifrequest.method=='POST':ifrequest.session.test_cookie_worked():request.session.delete_test_cookie()returnHttpResponse("You'reloggedin.")else:returnHttpResponse("Pleaseenablecookiesandtryagain.")request.session.set_test_cookie()returnrender_to_response('foo/login_form.html')

在视图外使用Session?

NewinDjango1.0.

有一个API专门用于在视图之外操作Session数据:

fromdjango.contrib.sessions.backends.dbimportSessionStores=SessionStore(session_key='2b11a188b44ad18c35e113ac6ceead')s['last_login']=datetime.datetime(2005,8,20,13,35,10)s['last_login']datetime.datetime(2005,8,20,13,35,0)s.save()

如果您使用了django.contrib.sessions.backends.db后台,则每一个Session都是一个普通的Django模型。模型Session在文件django/contrib/sessions/models.py中定义。由于它是一个普通的模型,因此您可以使用Django的数据库编程接口直接访问它:

fromdjango.contrib.sessions.modelsimportSessions=Session.objects.get(pk='2b11a188b44ad18c35e113ac6ceead')s.expire_datedatetime.datetime(2005,8,20,13,35,12)

注意,要获得Session字典,需要调用get_decoded(),这是因为字典是以编码的方式存储的:

s.session_data'KGRwMQpTJ19hdXRoX3VzZXJfaWQnCnAyCkkxCnMuMTExY2ZjODI2Yj...'s.get_decoded(){'user_id':42}

Session是何时存储的?

缺省情况下,Django只在Session被修改时才会保存它,即只有字典中的值被修改或删除时:

#Sessionismodified.request.session['foo']='bar'#Sessionismodified.delrequest.session['foo']#Sessionismodified.request.session['foo']={}#Gotcha:SessionisNOTmodified,becausethisalters#request.session['foo']insteadofrequest.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的时候才会送出SessionCookie,如果SESSION_SAVE_EVERY_REQUEST为True,则每次请求都会送出Cookie。

同样地,在送出Cookie时,它的expires部分每次都会被更新。

与浏览器同步的Session和持久的Session?

通过设置SESSION_EXPIRE_AT_BROWSER_CLOSE,您可以控制Session框架使用与浏览器同步的Session或持久的Session。

缺省情况下,SESSION_EXPIRE_AT_BROWSER_CLOSE的值为False,这表示SessionCookie将会保存在用户的浏览器中,直到超过了SESSION_COOKIE_AGE。如果您希望用户不必在每次关闭浏览器后都重新登陆,请使用这种方式。

如果SESSION_EXPIRE_AT_BROWSER_CLOSE设定为True,则Django会使用与浏览器同步的Cookie,即用户关闭浏览器时Cookie就会过期。如果您希望用户每次打开浏览器都必须登录,请使用这种模式。

NewinDjango1.0.

这个设置具有全局的缺省值,但可以通过调用request.session.set_expiry()为每个Session设定的值,相关内容在上述的在视图中使用Session中有所阐述。

清空Session表格?

注意,Session数据有可能堆积在数据库表格django_session中,Django不提供自动清除它们的功能。它把定期清空Session数据的任务留给了您。

要理解这个问题,想像一下用户使用Session时会发生什么。当用户登录,Django向表格django_session中添加一条记录。每当Session数据变化时,Django会更新这条记录。如果用户手工退出了,Django会删除它。但是,如果用户没有退出,则这条记录永远都不会被删除。

Django提供了一个能够完成清除功能的样例脚本django-admin.pycleanup,它从Session表格中删除那些expire_date已经过期的记录,但是您的应用程序可能会有其它的需求。

设置?

一些Django设置可以帮助您控制Session的行为:

SESSION_ENGINE?

NewinDjango1.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?

NewinDjango1.0.

缺省值:/tmp/

如果您使用基于文件的Session存储,则此变量控制着Django存储Session数据的目录。

SESSION_COOKIE_AGE?

缺省值:1209600(两周,以秒表示)

SessionCookie的过期时间,以秒表示

SESSION_COOKIE_DOMAIN?

缺省值:None

SessionCookie的域。如果是要设定跨域的Cookie,可以将其设定为".lawrence.com"的形式,否则请使用None。

SESSION_COOKIE_NAME?

缺省值:'sessionid'

Session所使用的Cookie的名称,可根据需要设定。

SESSION_COOKIE_SECURE?

缺省值:False

对于SessionCookie,是否要使用安全模式。如果将此设定为True,则Cookie将会被标记为“安全”,这种情况下,浏览器就需要确定该Cookie是否是通过HTTPS连接发送的。

SESSION_EXPIRE_AT_BROWSER_CLOSE?

缺省值:False

是否当用户关闭浏览器时就让Session过期。详情参考上文与浏览器同步的Session和持久的Session。

SESSION_SAVE_EVERY_REQUEST?

缺省值:False

是否在每次请求时都保存Session数据。如果此项为False(缺省值),则Session数据只有在它被修改后才会保存,即它的字典值被赋值或删除时。

技术细节?

Session字典可以接受任何与pickle兼容的Python对象,详情参考p

Top