小编mom*_*aaa的帖子

1个类继承了2个不同的元类(abcmeta和用户定义的元)

我有一个class1需要继承2个不同的元类,即Meta1和abc.ABCMeta

目前的实施:

Meta1的实现:

class Meta1(type):
    def __new__(cls, classname, parent, attr):
        new_class = type.__new__(cls, classname, parent, attr)
        return super(Meta1, cls).__new__(cls, classname, parent, attr)
Run Code Online (Sandbox Code Playgroud)

class1Abstract的实现

class class1Abstract(object):
    __metaclass__ = Meta1
    __metaclass__ = abc.ABCMeta
Run Code Online (Sandbox Code Playgroud)

mainclass的实现

class mainClass(class1Abstract):
    # do abstract method stuff
Run Code Online (Sandbox Code Playgroud)

我知道两次实现两个不同的元是错误的.

我改变了加载metclass的方式(几次尝试),我得到了这个TypeError:调用元类库时出错

metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
Run Code Online (Sandbox Code Playgroud)

我的想法用完了......


EDITED 1

我尝试了这个解决方案,但是mainClass不是class1Abstract的一个实例

print issubclass(mainClass, class1Abstract) # true
print isinstance(mainClass, class1Abstract) # false
Run Code Online (Sandbox Code Playgroud)

class1Abstract的实现

class TestMeta(Meta1):
    pass


class …
Run Code Online (Sandbox Code Playgroud)

python metaprogramming metaclass

19
推荐指数
2
解决办法
4840
查看次数

将django密码验证器与django rest framework validate_password集成

我正在尝试将django验证器 1.9与django rest框架序列化集成.但序列化的"用户"(django rest框架)与django验证器不兼容.

这是serializers.py

import django.contrib.auth.password_validation as validators
from rest_framework import serializers

    class RegisterUserSerializer(serializers.ModelSerializer):

        password = serializers.CharField(style={'input_type': 'password'}, write_only=True)

        class Meta:
            model = User
            fields = ('id', 'username', 'email, 'password')

        def validate_password(self, data):
            validators.validate_password(password=data, user=User)
            return data

        def create(self, validated_data):
            user = User.objects.create_user(**validated_data)
            user.is_active = False
            user.save()
            return user
Run Code Online (Sandbox Code Playgroud)

我设法得到MinimumLengthValidator和NumericPasswordValidator正确,因为两个函数验证都不使用'user'进行验证.源代码在这里

摘自django源代码:

def validate(self, password, user=None):
        if password.isdigit():
            raise ValidationError(
                _("This password is entirely numeric."),
                code='password_entirely_numeric',
            )
Run Code Online (Sandbox Code Playgroud)

对于像UserAttributeSimilarityValidator这样的其他验证器,该函数在验证中使用另一个参数'user'('user'是django用户模型,如果我没错的话)

摘自django源代码:

 def validate(self, password, user=None):
        if not user: …
Run Code Online (Sandbox Code Playgroud)

django validation django-rest-framework

13
推荐指数
3
解决办法
1万
查看次数


django rest框架具有多个模型的嵌套字段

这是django和django休息框架.我有2个型号:用户和手机.

第一个问题:

我希望能够在1个单独的api更新响应中更新用户数据(电子邮件)和电话数据(电话号码).电话号码可以是0或很多.好吧,就像partial = True一样.如果用户只想更新电话号码,请不要更新电子邮件,反之亦然.


附加信息:在注册时,不包括电话.只是基本的用户信息(姓氏,名字,电子邮件,密码).注册完成后,手机只能在用户个人资料表格中更新.用户配置文件表单实际上链接到多个模型,即用户和电话

第二个问题:

如何序列化多个phone_numbers并保存到db?

class User(AbstractBaseUser):
    email = models.EmailField(unique=True, default='')
    USERNAME_FIELD = 'email'


class Phone(models.Model):
    phone_number = models.CharField(max_length=10)
    owner = models.ForeignKey(User)

--------------------------------------
class UserSerializer(serializers.ModelSerializer):
    phone_number = PhoneSerializer(required=False, many=True)

    class Meta:
        model = User
        fields = ('email, 'phone_number')


class PhoneSerializer(serializers.ModelSerializer):

     class Meta:
          Model = Phone
          fields = ('phone_number')
Run Code Online (Sandbox Code Playgroud)

html表单在电话号码字段中会有加号,表示可以添加新的电话号码.例子就在这里

email : admin@admin.com
phone number: 23423432423
(add more)
phone number: 3423423423
(add more)
...
Run Code Online (Sandbox Code Playgroud)

预期的json

{
'email': 'email@email.com',
'phone_number': '32432433223234'
}
Run Code Online (Sandbox Code Playgroud)

或者如果添加了许多电话号码

{
'email': 'email@email.com',
'phone_number': '32432433223234', …
Run Code Online (Sandbox Code Playgroud)

python django django-rest-framework

9
推荐指数
1
解决办法
3568
查看次数

Perl - 将数组元素句子与变量进行比较

我使用grep在temporaryF文件和arrayWarning之间返回不匹配的数组

my @c =grep!${{map{$_,1}@temporaryF}{$_},@arrayWarning;
Run Code Online (Sandbox Code Playgroud)

在@c里面有很多行例如:

Sun Sep 30 00:05:55 fibre channel DENY forever
Sun Sep 30 00:06:55 fibre channel ROOT cause
Sun Sep 30 00:08:55 fibre channel ROOT cause 
Sun Sep 30 00:10:55 fibre channel ROOT cause  
Sun Sep 30 00:20:55 fibre channel DANN 
Sun Sep 30 00:30:55 fibre channel DANN  
Run Code Online (Sandbox Code Playgroud)

你可以看到ROOT在@c中发生了3次.如何迭代@c仅输出最新出现的ROOT - > Sun Sep 30 00:10:55光纤通道ROOT而不是其他重复行.

所以它会变成:

Sun Sep 30 00:05:55 fibre channel DENY forever  
Sun Sep 30 00:10:55 fibre channel ROOT cause  
Sun Sep 30 00:30:55 fibre …
Run Code Online (Sandbox Code Playgroud)

arrays perl grep

5
推荐指数
1
解决办法
313
查看次数

许多关系不存在.它处于不同的架构中

我将AbstractBaseUser与CustomPermissionsMixin一起使用.CustomPermissionsMixin与django PermissionsMixin相同,不同之处在于我为user_permissions和groups更改了related_name和related_query_name,因此它不会与django PermissionsMixin related_name冲突

@python_2_unicode_compatible
class CustomPermissionsMixin(models.Model):
    """
    A mixin class that adds the fields and methods necessary to support
    Django's Group and Permission model using the ModelBackend.
    """
    is_superuser = models.BooleanField(
        _('superuser status'),
        default=False,
        help_text=_(
            'Designates that this user has all permissions without '
            'explicitly assigning them.'
        ),
    )
    groups = models.ManyToManyField(
        Group,
        verbose_name=_('groups'),
        blank=True,
        help_text=_(
            'The groups this user belongs to. A user will get all permissions '
            'granted to each of their groups.'
        ),
        related_name="%(app_label)s_%(class)s_related",
        related_query_name="%(app_label)s_%(class)ss",
    ) …
Run Code Online (Sandbox Code Playgroud)

python django postgresql django-models django-rest-framework

5
推荐指数
1
解决办法
579
查看次数

将对象转换为IEnumerable

object selectedDataItem;
MyClass.Inventory inventory;
inventory = (MyClass.Inventory) selectedDataItem;
Run Code Online (Sandbox Code Playgroud)

inventory我们可以看到的细节如下:

Trace.Writeline(inventory.Name + " " + inventory.Place);
Run Code Online (Sandbox Code Playgroud)

你看库存有inventory.Name,Inventory.Place我想包装IEnumerable或ObservableCollection中的所有属性,这样我就可以一次遍历所有库存,而不是通过inventory.Name,inventory.Place等等...

如何制作库存IEnumerable以便我可以这样做:

IEnumerable<MyClass.Inventory> enumerable = (IEnumerable<MyClass.Inventory>) inventory;
enumerable = from x in enumerable where x.Name == inventory.Name select x;
Run Code Online (Sandbox Code Playgroud)

现在,如果我这样做,错误是

无法将类型为"MyClass.Inventory"的对象强制转换为"System.Collections.Generic.IEnumerable`1 [MyClass.Inventory]".

c# ienumerable casting

4
推荐指数
4
解决办法
2万
查看次数

如何将XML元素A添加到没有A作为子元素的元素B.

我正在处理类似于xml 的gpx文件.这是该文件的摘录:

<trkpt lat="3.1398377" lon="101.6937661">
    <ele>0.0</ele>
    <time>2013-01-01T00:00:00.000Z</time>
    <name>Position 1</name>
</trkpt>

<trkpt lat="3.1250538" lon="101.6783237">
    <ele>0.0</ele>
    <name>Position 460</name>
</trkpt>
Run Code Online (Sandbox Code Playgroud)

如您所见,某些<trkpt>元素包含<time>元素,而某些元素则不包含元素.如何添加<time>那些<trkpt>不包含它的元素?

在读取文件时,如果XML节点不包含,则会产生错误<time>:

foreach $points ( $root->getElementsByTagName('trkpt') ) {
    my($lat)  = $points->findvalue('@lat');
    my($lon)  = $pints->findvalue('@lon');
    my($time) = $points->getElementsByTagName('time')->[0]->textContent();
    my($pointName)  = $points->getElementsByTagName('name')->[0]->textContent();
}
Run Code Online (Sandbox Code Playgroud)

无法在未定义的值上调用方法"textContent"...

我怎样才能让它变得更聪明?也就是说,如果遇到未定义的$time,它会将其写入<time>gpx文件,并且不会发生错误.

perl xml-parsing

2
推荐指数
2
解决办法
365
查看次数