[django]编写作用于视图(view)的装饰器(Decorator)

本文假设读者已经知道如何编写基本的装饰器代码,否则请自行 google:“python 装饰器”and/or “python decorator”。

不带参数的装饰器

from functools import wraps


def object_does_not_exist(func):
    @wraps(func)
    def returned_wrapper(request, *args, **kwargs):
        try:
            return func(request, *args, **kwargs)
        except ObjectDoesNotExist:
            raise Http404()
    return returned_wrapper

用法:

@object_does_not_exist
def detail(request):
    pass

带参数的装饰器

  • 第一种写法:

    def object_does_not_exist(redirect=None):
        def decorator ...
more ...

[linux]解决 sendmail 错误: FEATURE() should be before MAILER()

错误详情:

# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
*** ERROR: FEATURE() should be before MAILER()
*** MAILER(`local') must appear after FEATURE(`always_add_domain')*** ERROR: FEATURE() should be before MAILER()
*** MAILER(`local') must appear after FEATURE(`allmasquerade')*** ERROR: FEATURE() should be before MAILER()

解决办法:

按照提示,编辑 /etc/mail/sendmail.mc 文件 ...

more ...

[django]线上部署后,访问 admin 时出现“DoesNotExist at /admin/ Site matching query does not exist.”错误

将 django 项目部署到服务器后,访问 admin 时出现如下错误:

DoesNotExist at /admin/
Site matching query does not exist.

上网搜索后,参考 http://stackoverflow.com/questions/9736975/django-admin-doesnotexist-at-admin 修复了该问题,下面记录一下解决过程。

两种解决办法:

  • 第一种办法是:编辑 settings.py 文件,从 INSTALLED_APPS 配置项中移除 'django.contrib.sites',

  • 第二种办法:通过 python manage.py shell 为 Site model 添加一条记录(将网站的域名添加进去):

    $ python manage ...
more ...