Django表单的额外功能
项目描述
forms2:Django表单的额外功能
forms2软件包提供了django表单的增强版本。特别是SQLAlchemy集成和字段级访问控制。
安装
pip install forms2
使用方法
SQLAlchemy模型表单示例
class MyModelForm(SAModelForm):
class Meta:
model = MyModel
mapping = {
'field1': 'instance.child.attribute',
'field2': 'attribute3',
}
field1 = forms.IntegerField()
field2 = forms.CharField()
一个简单的字段访问控制示例
class MyForm(FieldAccessMixin, Form):
class Meta:
access = {
('field1', 'field2'): access_admin,
'field3': MyForm.access_admin1,
None: lambda user, instance: FieldAccess.enabled,
}
field1 = forms.IntegerField()
@classmethod
def access_admin1(cls):
return FieldAccess.readonly
字段访问控制的一个更实际的示例
def access_bank_details(user, instance):
if not has_perm(user, instance, 'edit_bank_account'):
if has_perm(user, instance, 'edit_contract_id'):
return FieldAccess.readonly
return FieldAccess.excluded
return FieldAccess.enabled
def access_contract_id(user, instance):
if not (has_perm(user, instance, 'edit_contract_id') and has_perm(user, instance, 'do_stuff')):
return FieldAccess.readonly
class BankForm(FieldAccessMixin, Form):
class Meta:
access = {
('bank_account', 'bank_name', 'bank_balance'): access_bank_details,
'contract_id': access_contract_id,
None: BankForm.access_check,
}
bank_account = forms.CharField()
bank_name = forms.CharField()
bank_balance = forms.FloatField()
contract_id = forms.IntegerField()
some_other_field = forms.CharField()
@classmethod
def access_check(cls):
return FieldAccess.readonly
使用过滤器语法进行字段访问控制
@access_filter
def can_view_event(user, instance):
if user.has_perm('event', 'view'):
return FieldAccess.enabled
@access_filter
def can_view_merchant(user, instance):
if user.has_perm('merchant', 'view'):
return FieldAccess.enabled
@access_filter
def exclude_for_not_finance(user, instance):
if not user.has_perm('merchant', 'some_financial_permission'):
return FieldAccess.excluded
...
access = {
# Filters are applied left to right, the result is the first filter to return a FieldAccess value
# This will be enabled if you can view the event, else readonly
'field_a': can_view_event | default(FieldAccess.readonly),
# This will be enabled if you can view the event OR the merchant, else excluded
'field_b': can_view_event | can_view_merchant | default(FieldAccess.excluded),
# This will be enabled if you can view the event AND the merchant, else excluded
'field_b2': can_view_event & can_view_merchant | default(FieldAccess.excluded),
# This will be excluded if you don't have some finance permission, else enabled (this is the default)
'field_c': exclude_for_not_finance
}
联系方式
如果您有任何问题、错误报告、建议等,请在GitHub项目页面创建一个问题。
许可协议
本软件遵循MIT许可协议
见许可协议
© 2013 Paylogic International.
变更日志
1.1.2
允许将查询集作为可调用函数传递以使其延迟(bubenkoff)
1.0.1
获取值id时不再记录异常(bubenkoff)
0.1.9
移除了相对导入(wlansu)
向BaseModelForm构造函数方法添加了默认实例=None(wlansu)
修复了tests.__init__()中的pep8问题(wlansu)
0.1.8
首次公开发布
项目详情
关闭
forms2-1.1.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d23919e3fb41f39b1f443710062c201ee7ee83f88c5a189b57b68f13fd3f9c90 |
|
MD5 | a76a2340c6f2b623334ff416546bcc48 |
|
BLAKE2b-256 | f9fecbd1da6f7819c0991c8479ca717a490d5e8e0d32457e21ae2d634f116436 |