Python django-生成验证表单的dajaxice函数(dajaxice_寄存器问题)
我想创建一个通用函数,用dajaxice实时验证模型表单 以下是我所做的: exafeeds/ajax.pyPython 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
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)
非常糟糕:|