发布网友 发布时间:2024-10-04 09:01
共1个回答
热心网友 时间:2024-10-05 11:04
导读:本篇文章首席CTO笔记来给大家介绍有关django如何获取模型修改时间的相关内容,希望对大家有所帮助,一起来看看吧。
django模型,如何动态设置查询的字段?假设有这样一个字典a={'id':'123'}
那么获取mymodel这个对象的话,可以通过这样的一种方式
mymodel.objects.get(**a)
获取这个对象的id就mymodel.objects.get(**a).id即可
只要字典的key是mymodel中的字段就可以。希望有帮助
django中session怎么设置timeout
Django完全支持匿名SessionSession框架允许每用户保存并取数据数据保存服务器端并发送接收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数据表格ChangedinDjango依.0:并未使用数据库存储Session则步骤忽略;参考配置Session引擎Ifyoudon’twanttousesessions,youmightaswellremovetheSessionMiddlewarelinefromMIDDLEWARE_CLASSESand'django.contrib.sessions'fromyourINSTALLED_APPS.It’llsaveyouasmallbitofoverhead.配置Session引擎?NewinDjango依.0..缺省情况DjangoSession存储数据库(使用模型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.sessionget(key,default=None)例:fav_color=request.session.get('fav_color','red')keys()items()setdefault()clear()NewinDjango依.0:setdefault()clear()版本新加:flush()NewinDjango依.0.数据库删除前Session数据并且重新Session键并其发送给浏览器用于需要确保Session数据再用户浏览器访问譬调用django.contrib.auth.logout()set_test_cookie()设定检测Cookie检验用户浏览器否支持CookieCookie工作式用户请求前您都测试结详情参考面设置检测Cookietest_cookie_worked()判断用户浏览器否收检测Cookie并返True或FalseCookie工作式您必须前独立请求调用set_test_cookie()详情参考面设置检测Cookiedelete_test_cookie()删除检测Cookie请自调用函数便清除该Cookieset_expiry(value)NewinDjango依.0.设定Session期间您提供述几种形式值:value整形则表示秒例调用request.session.set_expiry(三00)让Session五钟期valuedatetime或timedelta象则Session相应期或间点期valueis0则用户Session浏览器关闭期valueisNone则Session使用全局策略设定期间get_expiry_age()NewinDjango依.0.获Session期间于没自定义期间Session(或浏览器关闭期Session)函数返值与settings.SESSION_COOKIE_AGE相同get_expiry_date()NewinDjango依.0.获Session期间点于没自定义期间Session(或浏览器关闭期Session)函数返值等于现间点settings.SESSION_COOKIE_AGE秒数get_expire_at_browser_close()NewinDjango依.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?NewinDjango依.0.API专门用于视图外操作Session数据:fromdjango.contrib.sessions.backends.dbimportSessionStores=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数据库编程接口直接访问:fromdjango.contrib.sessions.modelsimportSessions=Session.objects.get(pk='贰b依依吧9a依吧吧b四四ad依吧c三5e依依三ac陆ceead')s.expire_datedatetime.datetime(贰005,吧,贰0,依三,三5,依贰)注意要获Session字典需要调用get_decoded()字典编码式存储:s.session_data'KGRwMQpTJ依9hdXRoX三VzZXJfaWQnCnAyCkkxCnMuMTExY贰ZjODI贰Yj...'s.get_decoded(){'user_id':四贰}Session何存储?缺省情况DjangoSession修改才保存即字典值修改或删除:#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设定TrueSESSION_SAVE_EVERY_REQUESTTrue则Django每独立请求都保存Session注意创建或修改Session候才送SessionCookieSESSION_SAVE_EVERY_REQUESTTrue则每请求都送Cookie同送Cookieexpires部每都更新与浏览器同步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期您希望用户每打浏览器都必须登录请使用种模式NewinDjango依.0.设置具全局缺省值通调用request.session.set_expiry()每Session设定独立值相关内容述视图使用Session所阐述清空Session表格?注意Session数据能堆积数据库表格django_sessionDjango提供自清除功能定期清空Session数据任务留给您要理解问题想像用户使用Session发用户登录Django向表格django_session添加条记录每Session数据变化Django更新条记录用户手工退Django删除用户没退则条记录永远都删除Django提供能够完清除功能例脚本django-admin.pycleanupSession表格删除些expire_date已经期记录您应用程序能其需求设置?些Django设置帮助您控制Session行:SESSION_ENGINE?NewinDjango依.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?NewinDjango依.0.缺省值:/tmp/您使用基于文件Session存储则变量控制着Django存储Session数据目录SESSION_COOKIE_AGE?缺省值:依贰09陆00(两周秒表示)SessionCookie期间秒表示SESSION_COOKIE_DOMAIN?缺省值:NoneSessionCookie域要设定跨域Cookie其设定".lawrence中国"形式否则请使用NoneSESSION_COOKIE_NAME?缺省值:'sessionid'Session所使用Cookie名称根据需要设定SESSION_COOKIE_SECURE?缺省值:False于SessionCookie否要使用安全模式设定True则Cookie标记安全种情况浏览器需要确定该Cookie否通HTTPS连接发送SESSION_EXPIRE_AT_BROWSER_CLOSE?缺省值:False否用户关闭浏览器让Session期详情参考文与浏览器同步Session持久SessionSESSION_SAVE_EVERY_REQUEST?缺省值:False否每请求都保存Session数据项False(缺省值)则Session数据修改才保存即字典值赋值或删除技术细节?Session字典接受任何与pickle兼容Python象详情参考pickle模块Session数据存储数据库表格django_sessionDjango需要候才发送Cookie您没设定任何Session数据送CookieURLSessionID?DjangoSession框架完全基于Cookie并且能基于Cookie像些软件(譬PHP)Session能工作SessionID放URL作决定经深思熟虑种仅使URL丑陋并且SessionID能通Referer泄漏给中国站带安全隐
js获取django某个表的时间格式怎么处理不在form里,也不会被提交啊,你用firebug都看不到POST的内容,要么你写在form里,要么你用JS对这个加到form的submit里,这样就一起提交了
Pythondjango做时间判断djaogo时间判断表达
时间
1、gt:大于某个时间
now=datetime.datetime.now()
前一天
start=now–datetime.timedelta(hours=23,minutes=59,seconds=59)
a=yourobject.objects.filter(youdatetimcolumn__gt=start)
2、gte:大于等于某个时间:
a=yourobject.objects.filter(youdatetimcolumn__gte=start)
3、lt:小于
a=yourobject.objects.filter(youdatetimcolumn__lt=start)
4、lte:小于等于
a=yourobject.objects.filter(youdatetimcolumn__lte=start)
5、range:查询时间段
start_date=datetime.date(2005,1,1)
end_date=datetime.date(2005,3,31)
Entry.objects.filter(pub_date__range=(start_date,end_date))
6、year:查询某年
Entry.objects.filter(pub_date__year=2005)
7、month:查询某月
Entry.objects.filter(pub_date__month=12)
8、day:某天
Entry.objects.filter(pub_date__day=3)
9、week_day:星期几
Entry.objects.filter(pub_date__week_day=2)
10、获取今天的日期,日期格式为yyyy-MM-dd
fromdjango.utils.timezoneimportnow,timedelta
date=now().date()+timedelta(days=-1)#昨天
date=now().date()+timedelta(days=0)#今天
date=now().date()+timedelta(days=1)#明天
Django中使用model怎么查询不等于某个值的情况Model是django项目的基础,如果一开始没有好好设计好,那么在接下来的开发过程中就会遇到更多的问题.然而,大多数的开发人员都容易在缺少思考的情况下随意的增加或修改model.这样做的后果就是,在接下来的开发过程中,我们不得不做出更多努力来修正这些错误.
因此,在修改model时,一定尽可能的经过充分的考虑再行动!以下列出的是我们经常用到的一些工具和技巧:
South,用于数据迁移,我们会在每个django项目中都用到.但到django1.7时,将会有django.db.migrations代替.
django-model-utils,用于处理常见的模式,例如TimeStampedModel.
django-extensions,主要用到shell_plus命令,该命令会在shell中自动载入所有的app的model
1.基本原则
第一,将model分布于不同的app中.如果你的django项目中,有一个app拥有超过20个model,那么,你就应当考虑分拆该app了.我们推荐每个app拥有不超过5个model.
第二,尽量使用ORM.我们需要的大多数数据库索引都能通过Object-Relational-Model实现,且ORM带给我们许多快捷方式,例如生成SQL语句,读取/更新数据库时的安全验证.因此,如果能使用简单的ORM语句完成的,应当尽量使用ORM.只有当纯SQL语句极大地简化了ORM语句时,才使用纯SQL语句.并且,在写纯SQL语句是,应当优先考虑使用raw(),再是extra().
第三,必要时添加index.添加db_index=True到model中非常简单,但难的是理解何时应该添加.在建立model时,我们事先不会添加index,只有当以下情况时,才会考虑添加index:
在所有的数据库查询中使用率在10%-25%时
或当有真实的数据,或能正确估计出使用index后的效果确实满意时
第四,注意model的继承.model的继承在django中需要十分小心,django提供了三种继承方式,1.abstractbaseclass继承(不要和Pyhton标准库的abc模块搞混),2.多表(multi-table)继承,3.proxymodel继承.下表罗列了这三种继承的优劣:
django的创造者和其他许多开发人员都认为,多表继承的方法不是一个良好的方法.因此我们强烈建议大家不要使用该方法.下面列举了一些常见的如何选择model继承的情形:
如果只有少数model拥有重复的field时,大可不必使用model继承,只需要在每个model中添加这些相同的field即可.
如果有足够的model拥有重复的field时,大多是情况下,可以使用abstractbaseclass继承,将相同的field提取到abstractbaseclass中.
Proxymodel继承很少被用到,和其他两种继承也有着许多不一样之处.
请不要使用多表(multi-table)继承,因为它既消耗资源又复杂,如果可以,尽量使用OneToOneFields和ForeignKeys代替.
django项目中,创建时间和修改时间这两个field是最用到的,下面给出一个abstractbaseclass继承的例子:
2.DjangoModel的设计
如何设计出好的djangomodel可能是最难也是最复杂的一个话题了,在此,我们看看一些基本的技巧吧:
a.规范