本来想上午轻轻松松搞定,没想到还是出了其他的问题,好在最后都解决了

在middleware.py当中
  1. # -*- coding:utf-8 -*-
  2. __author__ = 'feimao'
  3. import re 正则表达式处理方式
  4. from django.shortcuts import render
  5. class Version(object):
  6. def process_request(self,request):
  7. agent = request.META['HTTP_USER_AGENT']获取浏览器版本信息,通过request获取
  8. result = re.findall('MSIE [5678]', agent)匹配符合条件的字符串
  9. if len(result)>0:
  10. return render(request,'warning.html') 用render方法发挥渲染过的页面,不用进行跳转,跳转比较麻烦,但是需要了解一下

定义了中间件,在settings.py里面是这么写的
'todolist.middleware.Version',
然后就可以顺利使用了 

然后是定义过滤器
在templatetags包里定义了
  1. # -*- coding: utf-8 -*-
  2. from django import template
  3. register = template.Library()
  4. from datetime import datetime
  5. __author__ = 'feimao'
  6. @register.filter
  7. def times(value):
  8. result = '刚刚'
  9. now = datetime.utcnow()
  10. value = value.replace(tzinfo=None)
  11. days = (now-value).days
  12. if days != 0:
  13. result = str(days)+'天前'
  14. else:
  15. seconds =(now-value).seconds
  16. if seconds/3600 != 0 :
  17. result = str(seconds/3600) + '小时前'
  18. else:
  19. result = str(seconds/60) + '分钟前'
  20. return result
这里就比较恶心了,因为在数据库当中保存的时间格式是UTC的格式,所以我就直接取当前时间的UTC格式了
now = datetime.utcnow()
但是我发现还是不能够直接相减否则会报can't subtract offset-naive and offset-aware datetimes这样的错误
问题就出在利用datetime.datetime.now()得到的当前时间是offset-naive的,而另外一个却是offset-aware的,因此我们需要将这里的dt转成与now一样的形式,可以这么做:
1
2
3
4
5
>>> dt = dt.replace(tzinfo=None)
>>> dt
datetime.datetime(201441815377)
>>> now - dt
datetime.timedelta(034108443000)

这样写就可以了



















Django进阶项目的更多相关文章

  1. python 自动化之路 day 20 Django进阶/BBS项目【一】

    一.django进阶 1.django orm 增删改查 1.1.创建表: 1 2 3 >>> from blog.models import Blog >>> b ...

  2. 老王Python培训视频教程(价值500元)【基础进阶项目篇 – 完整版】

    老王Python培训视频教程(价值500元)[基础进阶项目篇 – 完整版] 教学大纲python基础篇1-25课时1.虚拟机安装ubuntu开发环境,第一个程序:hello python! (配置开发 ...

  3. Django进阶篇【1】

    注:本篇是Django进阶篇章,适合人群:有Django基础,关于Django基础篇,将在下一章节中补充! 首先我们一起了解下Django整个请求生命周期: Django 请求流程,生命周期: 路由部 ...

  4. Django进阶知识

    drf学习之Django进阶点 一.Django migrations原理 1.makemigrattions: 相当于在每个app下的migrations文件夹下生成一个py脚本文件用于创建表或则修 ...

  5. python web框架 Django进阶

    django 进阶 基础中,一些操作都是手动创建连接的非主流操作,这样显得太low,当然也是为了熟悉这个框架! 实际中,django自带连接数据库和创建app的机制,同时还有更完善的路由系统机制.既然 ...

  6. django创建项目

    django创建项目 安装django pip install django==1.9 Note: C:\Python34\Scripts\pip.exe 创建项目 django-admin star ...

  7. Django练习项目之搭建博客

    背景:自从今年回家过年后,来到公司给我转了试用,我的学习效率感觉不如从前,而且刚步入社会我总是想要怎么想明白想清楚一些事,这通常会花掉,消耗我大量的精力,因为我想把我的生活管理规划好了,而在it技术学 ...

  8. Python之路,Day16 - Django 进阶

    Python之路,Day16 - Django 进阶   本节内容 自定义template tags 中间件 CRSF 权限管理 分页 Django分页 https://docs.djangoproj ...

  9. django进阶补充

    前言: 这篇博客对上篇博客django进阶作下补充. 一.效果图 前端界面较简单(丑),有两个功能: 从数据库中取出书名 eg: 新书A 在form表单输入书名,选择出版社,选择作者(多选),输入完毕 ...

随机推荐

  1. leetcode_Power of Two_easy

    Given an integer, write a function to determine if it is a power of two. 题目意思:推断某个数是否是2的幂. 方法:直接进行bi ...

  2. Tomcat启动报错:SERVER: Error ListenerStart 排查过程记录

    报错的Tomcat截图:   要排查此问题,首先需要调整tomcat的日志级别,调整成通过log4j来记录日志的方式,具体的调整方式: http://tomcat.apache.org/tomcat- ...

  3. linux命令 — lsof 查看进程打开那些文件 或者 查看文件给那个进程使用

    lsof命令是什么? 可以列出被进程所打开的文件的信息.被打开的文件可以是 1.普通的文件,2.目录  3.网络文件系统的文件,4.字符设备文件  5.(函数)共享库  6.管道,命名管道 7.符号链 ...

  4. plsql programming 08 字符串

    一般, char 和 nchar 类型很少使用. 建议使用 varchar2 和 nvarchar2, 其中( n 开头的是国家字符集, 没有n开头的是数据库字符集 ) 一般也不怎么使用国家字符集 v ...

  5. [搬家]新域名 akagi201.org

    现在感觉自己做了好多年的垃圾信息制造者 以后只在网络上发布有用的东西, 垃圾或者对别人没用的东西就放到自己的硬盘上把 http://akagi201.org

  6. hdu 3394(点双连通)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3394 思路:题目的意思是要求无向图中的冲突边和不需要边的条数,如果一个块中有多个环,则该块中的每条边都 ...

  7. TextView 图片居右

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout ...

  8. codevs1068 乌龟棋==洛谷P1541 乌龟棋

    P1541 乌龟棋 题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家 ...

  9. 《从零开始学Swift》学习笔记(Day 35)——会使用下标吗?

    原创文章,欢迎转载.转载请注明:关东升的博客 看下面的示例代码是不是使用过: var studentList: String[] = ["张三","李四",&q ...

  10. c#文件流汇总

    操作文件比较常见,项目中经常出现这样的需求:按每个月自动创建文件,并且向文件里面插入一些数据,那么我们将要分析,文件是否存在的情况:如果存在则直接打开文件流向文件中插入数据,如果不存在,则创建文件再插 ...