Exemple #1
0
class AccessToken(models.Model):
    client = models.ForeignKey(Client, verbose_name=u'应用端')
    user = models.ForeignKey(User, verbose_name=u'鉴权用户')
    code = UUIDField(unique=True, verbose_name=u'鉴权码')
    token = UUIDField(auto=True, verbose_name=u'访问令牌')
    expire_time = models.DateTimeField(u'过期时间')

    class Meta:
        verbose_name = u'访问令牌'
        verbose_name_plural = u'访问令牌'
Exemple #2
0
class Client(models.Model):
    id = UUIDField(primary_key=True)
    admin = models.ForeignKey(User, verbose_name=u'管理员')
    name = models.CharField(u'应用名', max_length=32)
    client_id = models.SlugField(u'应用ID', max_length=30)
    client_secret = UUIDField(auto=True, verbose_name=u'密钥')

    def __unicode__(self):
        return self.client_id

    class Meta:
        verbose_name = u'应用端'
        verbose_name_plural = u'应用端'
Exemple #3
0
class User(models.Model):
    id = UUIDField(primary_key=True)
    user = models.ForeignKey(User, verbose_name=u'用户')
    client = models.ForeignKey(Client, verbose_name=u'应用端')

    class Meta:
        verbose_name = u'用户'
        verbose_name_plural = u'用户'
Exemple #4
0
class AuthorizationCode(models.Model):
    client = models.ForeignKey(Client, verbose_name=u'应用端')
    user = models.ForeignKey(User, verbose_name=u'鉴权用户')
    code = UUIDField(auto=True, verbose_name=u'鉴权码')
    redirect_uri = models.URLField(u'地址')
    expire_time = models.DateTimeField(u'过期时间')

    class Meta:
        verbose_name = u'鉴权码'
        verbose_name_plural = u'鉴权码'
Exemple #5
0
class NavbarItem(models.Model):
    id = UUIDField(primary_key=True)
    key = models.CharField('标识', max_length=16, unique=True)
    order = models.IntegerField('排序')
    title = models.CharField('标题', max_length=64)
    intranet = models.BooleanField('校园网', default=False)
    internet = models.BooleanField('互联网', default=False)

    def __unicode__(self):
        return self.title

    class Meta:
        ordering = ['order', 'key']
        verbose_name = '导航项'
        verbose_name_plural = '导航项'
Exemple #6
0
class Point(models.Model):
    id = UUIDField(primary_key=True)
    channel = models.ForeignKey(Channel, verbose_name=u'频道')
    source = models.CharField(u'源名称', max_length=32)
    target = models.CharField(u'目标名', max_length=32)
    hd = models.BooleanField(u'高清', default=False)
    sound = models.IntegerField(u'声道数')
    active = models.BooleanField(u'活动', default=False)

    def __unicode__(self):
        return self.channel.name

    class Meta:
        ordering = ['channel', '-hd']
        verbose_name = u'频道点'
        verbose_name_plural = u'频道点'
Exemple #7
0
class MoreService(models.Model):
    id = UUIDField(primary_key=True)
    key = models.CharField('标识', max_length=16, unique=True)
    order = models.IntegerField('排序')
    title = models.CharField('标题', max_length=64)
    subtitle = models.CharField('副标题', max_length=64)
    content = models.TextField('正文')
    intranet = models.BooleanField('校园网')
    internet = models.BooleanField('互联网')
    modified = models.DateTimeField('最后修改', auto_now=True)

    def __unicode__(self):
        return self.title

    class Meta:
        ordering = ['order', 'key']
        verbose_name = '更多服务'
        verbose_name_plural = '更多服务'
Exemple #8
0
class File(models.Model):
    id = UUIDField(primary_key=True)
    name = models.CharField('文件名', max_length=128)
    extension = models.CharField('扩展名', max_length=16)
    size = models.BigIntegerField('大小', editable=False)
    type = models.TextField('属性', editable=False)
    mime = models.CharField('MIME类型', max_length=64, editable=False)
    crc32 = models.CharField('CRC32值', max_length=8, editable=False)
    md5sum = models.CharField('MD5值', max_length=22, editable=False)
    sha1sum = models.CharField('SHA1值', max_length=27, editable=False)
    created = models.DateTimeField('上传时间', auto_now_add=True, editable=False)

    def __unicode__(self):
        return self.name

    def size_unit(self):
        return file_size(self.size)

    def md5(self):
        return self.decode(self.md5sum)

    def sha1(self):
        return self.decode(self.sha1sum)

    def decode(self, encoded):
        encoded = encoded.replace('_', '/').replace('-', '+')
        if len(encoded) == 22:
            encoded += '=='
        elif len(encoded) == 27:
            encoded += '='

        return encoded.decode('base64').encode('hex')

    def download_times(self):
        return self.download_set.count()

    class Meta:
        index_together = [
            ['md5sum', 'sha1sum'],
        ]
        ordering = ['-created']
        verbose_name = '文件'
        verbose_name_plural = '文件'
Exemple #9
0
class Catalog(models.Model):
    id = UUIDField(primary_key=True)
    parent = models.ForeignKey('self',
                               verbose_name=u'上级分类',
                               null=True,
                               blank=True)
    name = models.CharField(u'分类', max_length=32)
    order = models.IntegerField(u'排序')

    def __unicode__(self):
        if self.parent:
            return unicode(self.parent) + '/' + self.name
        else:
            return '/' + self.name

    class Meta:
        ordering = ['order']
        verbose_name = u'分类'
        verbose_name_plural = u'分类'
Exemple #10
0
class File(models.Model):
    id = UUIDField(primary_key=True)
    name = models.CharField(u'文件名', max_length=128)
    extension = models.CharField(u'扩展名', max_length=16)
    size = models.BigIntegerField(u'大小', editable=False)
    type = models.TextField(u'属性', editable=False)
    mime = models.CharField(u'MIME类型', max_length=64, editable=False)
    crc32 = models.CharField(u'CRC32值', max_length=8, editable=False)
    md5sum = models.CharField(u'MD5值', max_length=22, editable=False)
    sha1sum = models.CharField(u'SHA1值', max_length=27, editable=False)
    created = models.DateTimeField(u'上传时间', auto_now_add=True, editable=False)

    def __unicode__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('file:detail',
                       args=[urlsafe_base64_encode(self.id.bytes)])

    def size_unit(self):
        return file_size(self.size)

    def md5(self):
        return self.decode(self.md5sum)

    def sha1(self):
        return self.decode(self.sha1sum)

    def decode(self, encoded):
        return urlsafe_base64_decode(encoded).encode('hex')

    def download_times(self):
        return self.download_set.order_by('file', 'ip', 'time').distinct(
            'file', 'ip', 'time').count()

    class Meta:
        index_together = [
            ['md5sum', 'sha1sum'],
        ]
        ordering = ['-created']
        verbose_name = u'文件'
        verbose_name_plural = u'文件'
Exemple #11
0
class NavbarMore(models.Model):
    id = UUIDField(primary_key=True)
    app = models.ForeignKey(NavbarItem)
    key = models.CharField('标识', max_length=16)
    order = models.IntegerField('排序')
    title = models.CharField('标题', max_length=64)
    subtitle = models.CharField('副标题', max_length=64)
    content = models.TextField('正文')
    intranet = models.BooleanField('校园网', default=False)
    internet = models.BooleanField('互联网', default=False)
    modified = models.DateTimeField('最后修改', auto_now=True)

    def __unicode__(self):
        return self.title

    class Meta:
        unique_together = ('app', 'key')
        ordering = ['app', 'order', 'key']
        verbose_name = '导航更多'
        verbose_name_plural = '导航更多'