Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django-生成验证表单的dajaxice函数(dajaxice_寄存器问题)_Python_Django_Decorator_Introspection_Dajaxice - Fatal编程技术网

Python django-生成验证表单的dajaxice函数(dajaxice_寄存器问题)

Python django-生成验证表单的dajaxice函数(dajaxice_寄存器问题),python,django,decorator,introspection,dajaxice,Python,Django,Decorator,Introspection,Dajaxice,我想创建一个通用函数,用dajaxice实时验证模型表单 以下是我所做的: exafeeds/ajax.py from django.core.exceptions import ValidationError from django.utils import simplejson from dajaxice.decorators

我想创建一个通用函数,用dajaxice实时验证模型表单

以下是我所做的:

exafeeds/ajax.py

from django.core.exceptions import ValidationError                                  
from django.utils import simplejson                                                 

from dajaxice.decorators import dajaxice_register

def gen_validate_model(models_module):

    @dajaxice_register
    def validate_model(request, model, fields):
        errors = {}

        tmp_model = getattr(models_module, model)()

        for (field, value) in fields.items():
            setattr(tmp_model, field, value)

        try:
            tmp_model.clean_fields()
        except ValidationError, err:
            errs = err.message_dict

            for field in fields:
                errors[field] = errs.get(field)

        return simplejson.dumps(errors)

    return validate_model
from django.core.exceptions import ValidationError
from django.utils import simplejson

def gen_validate_model(models_module):

    def validate_model(request, model, fields):
        errors = {}

        tmp_model = getattr(models_module, model)()

        for (field, value) in fields.items():
            setattr(tmp_model, field, value)

        try:
            tmp_model.clean_fields()
        except ValidationError, err:
            errs = err.message_dict

            for field in fields:
                errors[field] = errs.get(field)

        return simplejson.dumps(errors)

    return validate_model
def gen_validate_model(models_module, request, model, fields):
    errors = {}

    tmp_model = getattr(models_module, model)()

    for (field, value) in fields.items():
        setattr(tmp_model, field, value)

    try:
        tmp_model.clean_fields()
    except ValidationError, err:
        errs = err.message_dict

        for field in fields:
            errors[field] = errs.get(field)

    return simplejson.dumps(errors)
accounts/ajax.py

from exafeeds.ajax import gen_validate_model

import accounts.models

validate_model = gen_validate_model(accounts.models)
from dajaxice.decorators import dajaxice_register

from exafeeds.ajax import gen_validate_model

import accounts.models

@dajaxice_register
def validate_model(request, model, fields):
    return gen_validate_model(accounts.models)(request, model, fields)
@dajaxice_register
def validate_model(request, model, fields):
    return gen_validate_model(accounts.models, request, model, fields)
还有js调用:

Dajaxice.accounts.validate_model(check_validity_callback, {
    'model': 'User',
    'fields': {
        'username': username,
        'email': email
    }
});
但是当我收到一个JS错误,告诉我Dajaxice.accounts是未定义的

dajaxice_寄存器装饰器显然放错了位置,但我应该把它放在哪里

编辑。 我试图用以下内容替换dajaxice_寄存器装饰器:

validate_model = gen_validate_model(accounts.models)
validate_model = dajaxice_register(validate_model)

但是它没有改变任何事情

我找到了一个解决方案,但它看起来很脏。我希望有更好的解决办法

exafeeds/ajax.py

from django.core.exceptions import ValidationError                                  
from django.utils import simplejson                                                 

from dajaxice.decorators import dajaxice_register

def gen_validate_model(models_module):

    @dajaxice_register
    def validate_model(request, model, fields):
        errors = {}

        tmp_model = getattr(models_module, model)()

        for (field, value) in fields.items():
            setattr(tmp_model, field, value)

        try:
            tmp_model.clean_fields()
        except ValidationError, err:
            errs = err.message_dict

            for field in fields:
                errors[field] = errs.get(field)

        return simplejson.dumps(errors)

    return validate_model
from django.core.exceptions import ValidationError
from django.utils import simplejson

def gen_validate_model(models_module):

    def validate_model(request, model, fields):
        errors = {}

        tmp_model = getattr(models_module, model)()

        for (field, value) in fields.items():
            setattr(tmp_model, field, value)

        try:
            tmp_model.clean_fields()
        except ValidationError, err:
            errs = err.message_dict

            for field in fields:
                errors[field] = errs.get(field)

        return simplejson.dumps(errors)

    return validate_model
def gen_validate_model(models_module, request, model, fields):
    errors = {}

    tmp_model = getattr(models_module, model)()

    for (field, value) in fields.items():
        setattr(tmp_model, field, value)

    try:
        tmp_model.clean_fields()
    except ValidationError, err:
        errs = err.message_dict

        for field in fields:
            errors[field] = errs.get(field)

    return simplejson.dumps(errors)
accounts/ajax.py

from exafeeds.ajax import gen_validate_model

import accounts.models

validate_model = gen_validate_model(accounts.models)
from dajaxice.decorators import dajaxice_register

from exafeeds.ajax import gen_validate_model

import accounts.models

@dajaxice_register
def validate_model(request, model, fields):
    return gen_validate_model(accounts.models)(request, model, fields)
@dajaxice_register
def validate_model(request, model, fields):
    return gen_validate_model(accounts.models, request, model, fields)
但是函数生成器变得无用,因此可以简化为:

exafeeds/ajax.py

from django.core.exceptions import ValidationError                                  
from django.utils import simplejson                                                 

from dajaxice.decorators import dajaxice_register

def gen_validate_model(models_module):

    @dajaxice_register
    def validate_model(request, model, fields):
        errors = {}

        tmp_model = getattr(models_module, model)()

        for (field, value) in fields.items():
            setattr(tmp_model, field, value)

        try:
            tmp_model.clean_fields()
        except ValidationError, err:
            errs = err.message_dict

            for field in fields:
                errors[field] = errs.get(field)

        return simplejson.dumps(errors)

    return validate_model
from django.core.exceptions import ValidationError
from django.utils import simplejson

def gen_validate_model(models_module):

    def validate_model(request, model, fields):
        errors = {}

        tmp_model = getattr(models_module, model)()

        for (field, value) in fields.items():
            setattr(tmp_model, field, value)

        try:
            tmp_model.clean_fields()
        except ValidationError, err:
            errs = err.message_dict

            for field in fields:
                errors[field] = errs.get(field)

        return simplejson.dumps(errors)

    return validate_model
def gen_validate_model(models_module, request, model, fields):
    errors = {}

    tmp_model = getattr(models_module, model)()

    for (field, value) in fields.items():
        setattr(tmp_model, field, value)

    try:
        tmp_model.clean_fields()
    except ValidationError, err:
        errs = err.message_dict

        for field in fields:
            errors[field] = errs.get(field)

    return simplejson.dumps(errors)
accounts/ajax.py

from exafeeds.ajax import gen_validate_model

import accounts.models

validate_model = gen_validate_model(accounts.models)
from dajaxice.decorators import dajaxice_register

from exafeeds.ajax import gen_validate_model

import accounts.models

@dajaxice_register
def validate_model(request, model, fields):
    return gen_validate_model(accounts.models)(request, model, fields)
@dajaxice_register
def validate_model(request, model, fields):
    return gen_validate_model(accounts.models, request, model, fields)
非常糟糕:|