[django]添加额外的 form 错误信息

通过两种方法给 Django 表单添加额外的错误信息。

第一种方法,使用 form 自定义校验(更详细的请查看 django 官方文档):

定义 clean 方法:

class RegisterForm(forms.Form):
    # ...

    def clean(self):
        cleaned_data = super(RegisterForm, self).clean()
        email = cleaned_data.get('email', '')
        username = cleaned_data.get('username', '')

        re_username = r'^[a-zA-Z\d][-a-zA-Z\d]*$'

        if User.objects.filter(email=email).exists():
            msg = 'This email address ...
more ...



[django]复制/克隆一条查询结果

复制/克隆一条查询结果,并将它插入到数据库中:

将 pk 值设为 None 即可:

blog = Blog(name='My blog', tagline='Blogging is easy')
blog.save() # post.pk == 1

blog.pk = None
blog.save() # post.pk == 2

如果该 model 继承于另一个 model 的话,必须将 pkid 的值都设为 None:

class ThemeBlog(Blog):
    theme = models.CharField(max_length=200)

django_blog ...
more ...

[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 ...