因为这些天离职换工作,调休期间有点时间所以把本网站后端代码重写了,提高了站点的响应时间。在文章访问计数有些心得。分享如下:


文章详情访问地址为: http://www/loonapp.com/blog/*/。 简单点的做法是直接在view方法(django, 其他框架如tornado为handle)时从数据库中取出该页面的访问次数加1。该做法在并发较大时候多数据库压力较大。因此采用将文章访问次数存到redis,当数量为N的整数倍则更新数据库,同时redis中key加1。 这样减少了这数据库n-1/n的压力, 也避免了因为大并发导致的数据库+操作锁问题

def blog_view(request, blog_id):
    """
    文章查看
    :param request:
    :param blog_id:
    :return:
    """
    BlogService.update_view_count(int(blog_id))
    ......
# BlogService.py
@staticmethod
def update_view_count(blog_id):
    """
    更新文章访问次数,计算准确访问次数的时候需要把这个也加上
    :param blog_id:
    :return:
    """
    key_flag = 'blog_view_count_%d' % blog_id
    view_count = cache.get(key_flag)  # 使用django-redis-cache,settings中配置redis
    if view_count != None:
        cache.incr(key_flag)  # 加1
        if not (view_count % 10):   # 当发现访问次数是10的倍数, 就更新数据库中文章访问次数
            Blog.objects.filter(id=blog_id).update(view_count=view_count)

    else:  # 缓存中没有访问次数记录,则从数据库中获取
        view_count = Blog.objects.get(id=blog_id).view_count
        cache.set(key_flag, view_count+1, None)  # 永不过期


使用最新的celery,如果是djcelery请使用3.1.17以上版本。

因为新版django除去了commit_manually,

django1.6及之前可以在app下新建fixtures目录,并在目录下新建initial_data.json文件,在执行python manage.py syncdb时会自动json中的数据初始化到数据库中。..

django1.7以后开始弃用syncdb。如果你在django1.6之前使用过fixtures功能,你应该知道每次使用syncdb时fixtures数据都会自动执行一遍。这点是不合理的,因此django1.7以后将此功能分出来了。初始化数据处理方法修改为:

  1. 在项目中新建fixtures目录,并在该目录下新建数据文件initial_data.json格式如下

  2. [
        {
            "model": "account.myaccounttype",
            "pk": 1,
            "fields": {
                "name": "个人",
    	    "usermodel":"MyUser"
            }
        },
        {
            "model": "account.myaccounttype",
            "pk": 2,
            "fields": {
                "name": "职位",
                "usermodel":"MyPosition"
            }
        },
        {
            "model": "account.myaccounttype",
            "pk": 3,
            "fields": {
                "name": "部门",
                "usermodel":"MyDept"
            }
        },
        {
            "model": "account.myaccounttype",
            "pk": 4,
            "fields": {
                "name": "角色",
                "usermodel":"MyRole"
            }
        }
    ]
  3. 在settings.py中设置fixtures的目录,如:

FIXTURE_DIRS = (os.path.join(BASE_DIR,'fixtures',),)  #注意两个','

4.执行python manage.py loaddata initial_data.json



最近要在windows上使用fabric,发现安装的时候各种报错,查资料说是依赖vs2008,下载安装后报错依旧。 后来找到一篇文章说是可以直接安装编译好的pycrypto, 下载地址:http://www.voidspace.org.uk/python/modules.shtml#pycrypto  安装后果然好了,以此记录下。

在tornado项目中使用echarts 或者highcharts等图表组件时,需要对传给模板文件的list 禁止转义。就是将{{data}} 这样的写法改成{%raw data%} ,注意先将data转为json 


在django中的写法是{{data|safe}}