class Tunnel(models.Model): """ SSH隧道配置 """ tunnel_name = models.CharField('隧道名称', max_length=50, unique=True) host = models.CharField('隧道连接', max_length=200) port = models.IntegerField('端口', default=0) user = fields.EncryptedCharField(verbose_name='用户名', max_length=200, default='', blank=True, null=True) password = fields.EncryptedCharField(verbose_name='密码', max_length=300, default='', blank=True, null=True) pkey = fields.EncryptedTextField(verbose_name="密钥", blank=True, null=True) pkey_path = models.FileField(verbose_name="密钥地址", blank=True, null=True, upload_to='keys/') pkey_password = fields.EncryptedCharField(verbose_name='密钥密码', max_length=300, default='', blank=True, null=True) create_time = models.DateTimeField('创建时间', auto_now_add=True) update_time = models.DateTimeField('更新时间', auto_now=True) def __str__(self): return self.tunnel_name def short_pkey(self): if len(str(self.pkey)) > 20: return '{}...'.format(str(self.pkey)[0:19]) else: return str(self.pkey) class Meta: managed = True db_table = 'ssh_tunnel' verbose_name = u'隧道配置' verbose_name_plural = u'隧道配置'
class TestModel(models.Model): char = fields.EncryptedCharField(blank=True, null=True) text = fields.EncryptedTextField(blank=True, null=True) textraw = models.TextField(blank=True, null=True) integer = fields.EncryptedIntegerField(blank=True, null=True) email = fields.EncryptedEmailField(blank=True, null=True) url = fields.EncryptedURLField(blank=True, null=True)
class MessageModel(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='user', related_name='from_user', db_index=True) recipient = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='recipient', related_name='to_user', db_index=True) timestamp = models.DateTimeField('timestamp', auto_now_add=True, editable=False, db_index=True) body = fields.EncryptedTextField() def __str__(self): return str(self.user.username_user) def notify_ws_clients(self): notification = { 'type': 'recieve_group_message', 'message': '{}'.format(self.id) } channel_layer = get_channel_layer() print("user.id {}".format(self.user.id)) print("user.id {}".format(self.recipient.id)) async_to_sync(channel_layer.group_send)("{}".format(self.user.id), notification) async_to_sync(channel_layer.group_send)("{}".format(self.recipient.id), notification) def save(self, *args, **kwargs): new = self.id self.body = self.body.strip() # Trimming whitespaces from the body super(MessageModel, self).save(*args, **kwargs) if new is None: self.notify_ws_clients() # Meta class Meta: verbose_name = 'message' verbose_name_plural = 'messages' ordering = ('-timestamp', )