核心模块-工具¶
-
Core.utils.gen_uuid()[源代码]¶ 生成一个UUID对象。
返回: 一个UUID对象 返回类型: UUID 作者: 杜佑宸 <youchen.du@gmail.com>
-
class
Core.utils.DynamicHashPath(base='uploads', use_date=True, hasher_cls=<built-in function openssl_md5>)[源代码]¶ 用于动态控制 FileField 字段 upload_to 上传路径 文件名会追加特征码, 多次相同文件名不同内容的上传不会覆盖以前上传文件
作者: 杜佑宸 <youchen.du@gmail.com>
参数: - base (str) – 上传路径的公共前缀 默认值: uploads
- use_date (bool) – 是否在公共前缀后使用日期进行路径划分, 如: uploads/2017/11/17
- hasher_cls – hashlib 中的某个哈希函数构造器, 如无必要请勿修改, 默认值: hashlib.md5
-
deconstruct(obj)¶ Returns a 3-tuple of class import path, positional arguments, and keyword arguments.
-
Core.utils.transition(field, source, target, conditions=None, permission=None, name=None)[源代码]¶ 用于控制工作流状态转移的方法装饰器
参数: - field – 进行状态转移的字段名称
- source – 起始状态, 使用’*’表示任意状态
- target – 目标状态, 完成对应操作后转入状态
- conditions(可选) – 进行该状态转移所需的额外条件, 默认跳过该检查, 若为’bool’类型, 则在检查 时直接返回该值, 若为函数, 则在检查时接收一个参数’request’并返回其调用结果, 否则不允许操作
- permission(可选) – 进行该状态转移所需的权限, 默认跳过该检查, 若为’bool’类型,则在检查时直 接返回该值, 若为’str’类型, 则根据’user.has_perm’进行判断, 若为函数, 则在检 查时接收一个参数’request’并返回其调用结果, 否则不允许操作
- name(可选) – 设置该字段在向前台进行渲染时的名称, 默认为方法名
Example
from Core.utils import transition class Example(models.Model): status = models.IntegerField(verbose_name='状态', choices=REVIEW_STATUS_CHOICES, default=REVIEW_STATUS_DEFAULT) @transition(field='status', source='*', target=REVIEW_STATUS_PASS) def review_pass(self, request): # Do some relavent actions # status will be updated and saved automatically pass
Raises: PermissionDenied– 当操作权限检查失败后抛出ValidationError– 当前置状态或额外条件检查失败后抛出
作者: 杜佑宸 <youchen.du@gmail.com>
-
class
Core.utils.TransitionMeta[源代码]¶ 用于向Model对象添加自动生成当前状态下可选操作方法的元类
该元类将自动向实例添加一个实例方法 actions, 该方法接收一个参数 request, 返回当前实例下所有使用 transition 装饰的当前可用操作目标结果,该元类主要 为向前台提供当前可用操作提供服务。
Example
from Core.utils.fsm import TransitionMeta class Example(models.Model, metaclass=TransitionMeta): status = models.IntegerField(verbose_name='状态', choices=REVIEW_STATUS_CHOICES, default=REVIEW_STATUS_DEFAULT) @transition(field='status', source='*', target=REVIEW_STATUS_PASS) def review_pass(self, request): # Do some relavent actions # status will be updated and saved automatically pass
-
class
Core.utils.TransitionSerializerMixin(instance=None, data=<class 'rest_framework.fields.empty'>, **kwargs)[源代码]¶ 用于向Serializer对象添加额外字段 actions 的Mixin组件,配合其他相关组件使用
Example
from Core.utils.fsm import TransitionSerializerMixin as TSMixin class ProductSerializer(TSMixin, serializers.ModelSerializer): documents = serializers.PrimaryKeyRelatedField(many=True, read_only=True) class Meta: model = Product fields = '__all__' read_only_fields = ('name',)