Esempio n. 1
0
class Blog(models.Model):
    title = models.CharField(max_length=100)
    type = models.IntegerField(default=0)
    img = models.CharField(max_length=500, null=True) # 博客导图
    summary = models.CharField(max_length=500, null=True)
    rss = models.CharField(max_length=1024, null=True)  # 订阅源
    content = wmd_models.MarkDownField()
    content_show = wmd_models.MarkDownField(u'正文显示', null=True)
    add_date = models.DateTimeField()
    counts = models.IntegerField(default=0)     # 点击率
    is_show = models.CharField(max_length=100, null=True)        # 加密
    def __unicode__(self):
        return self.title

    def save(self, force_insert=False, force_update=False, using=None):
        self.content_show = mark_safe(markdown.markdown(force_unicode(self.content), ['codehilite'], safe_mode='escape'))
        super(Blog, self).save()

    class Meta:
        db_table = 'blog'


    def getType(self):
        """获取类型"""
        return Type.objects.get(pk=self.type)

    def getTags(self):
        """获取标签"""
        return BlogTag.objects.filter(blog=self.id)
Esempio n. 2
0
class Blog(models.Model):
    """
    文章
    """
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    type = models.IntegerField(default=0)
    img = models.CharField(max_length=500, null=True)  # 博客引导图片
    summary = models.CharField(max_length=500, null=True)
    rss = models.CharField(max_length=1024, null=True)  # rss订阅源
    content = wmd_models.MarkDownField()
    content_show = wmd_models.MarkDownField(u'正文显示', null=True)
    add_date = models.DateTimeField()
    counts = models.IntegerField(default=1)  # 点击率
    is_show = models.CharField(max_length=100, null=True)

    def __unicode__(self):
        return self.title

    class Meta:
        db_table = 'blog'

    def getType(self):
        """
        获取类型
        """
        return Type.objects.get(pk=self.type)

    def getTags(self):
        """
        获取标签
        """
        return BlogTag.objects.filter(blog=self.id)
Esempio n. 3
0
class Link(models.Model):
    title = models.CharField(max_length=250)
    slug = models.SlugField(unique_for_date='pub_date', help_text='Must be unique for the publication date.')
    url = models.URLField(unique=True)
    description = wmd_models.MarkDownField()
    # See comments in class Entry body and body_html field
    description_html = wmd_models.MarkDownField(editable = False, blank = True)
    via_name = models.CharField(max_length=250, blank=True, help_text='The name of the person whose site you spotted the link on. Optional.')
    via_url = models.URLField(blank=True, help_text='The URL of the site where you spotted the link. Optional.')
    enable_comments = models.BooleanField(default=True)
    posted_by = models.ForeignKey(User)
    pub_date = models.DateTimeField(default=datetime.datetime.now)
    categories = models.ManyToManyField(Category)
    tags = TagField()

    class Meta:
        ordering = ['-pub_date']

    def __unicode__(self):
        return self.title

    def save(self, force_insert = False, force_update = False):
        self.description_html = markdown(self.description)
        super(Link, self).save(force_insert, force_update)

    @models.permalink
    def get_absolute_url(self):
        return ('coltrane_link_detail', (), {   'year': self.pub_date.strftime('%Y'),
                                                'month': self.pub_date.strftime('%b').lower(),
                                                'day': self.pub_date.strftime('%d'),
                                                'slug': self.slug })
Esempio n. 4
0
class Theme(models.Model):
    """编程主题"""
    TYPE = (
        (0, u'未进行'),
        (1, u'进行中'),
        (2, u'已完成'),
        (3, u'任务失败'),
    )
    title = models.CharField(max_length=100)
    user = models.IntegerField()
    type = models.IntegerField(default=0)
    summary = models.CharField(max_length=500, null=True)
    content = wmd_models.MarkDownField()
    content_show = wmd_models.MarkDownField(u'正文显示', null=True)
    start_date = models.DateField()
    end_date = models.DateField()
    add_date = models.DateTimeField()
    status = models.IntegerField(default=0, choices=TYPE)
    schedule = models.IntegerField(default=0)  # 进度
    is_great = models.IntegerField(default=0)  # 是否精华
    counts = models.IntegerField(default=0)  # 点击率

    def __unicode__(self):
        return self.title

    def save(self, force_insert=False, force_update=False, using=None):
        self.content_show = mark_safe(
            markdown.markdown(force_unicode(self.content), ['codehilite'],
                              safe_mode='escape'))
        super(Theme, self).save()

    class Meta:
        db_table = 'theme'

    def getUser(self):
        """返回用户对象"""
        return MyUser.objects.get(pk=self.user)

    def getLove(self):
        """返回关注数"""
        return Love.objects.filter(theme=self.id).count()

    def getLoveObj(self):
        """返回关注数"""
        return Love.objects.filter(theme=self.id).values_list('user',
                                                              flat=True)

    def getTags(self):
        """获取标签"""
        return ThemeTag.objects.filter(theme=self.id)

    def getType(self):
        """获取类型"""
        return Type.objects.get(pk=self.type, user=self.user)
Esempio n. 5
0
class Wiki(models.Model):
    """WIki"""
    category = models.IntegerField()
    content = wmd_models.MarkDownField()
    content_show = wmd_models.MarkDownField(u'show', null=True)
    add_time = models.DateTimeField(auto_now=True, auto_now_add=True)

    class Meta:
        db_table = 'wiki'

    def save(self, force_insert=False, force_update=False, using=None):
        self.content_show = mark_safe(markdown.markdown(force_unicode(self.content), ['codehilite'], safe_mode='escape'))
        super(Wiki, self).save()
Esempio n. 6
0
class Event(PhotosMixin,models.Model):
  _use_default_photo = True
  name = models.CharField(max_length=128,null=True,blank=True)
  url = models.CharField(max_length=256,null=True,blank=True)
  _ht = "Optional. Alternative name for the calendar."
  short_name = models.CharField(max_length=64,null=True,blank=True,help_text=_ht)
  room = models.ForeignKey(Room,null=True,blank=True) #! remove ntbt when you remove location.
  get_room = lambda self: self.room
  description = wmd_models.MarkDownField(blank=True,null=True)
  _ht = "If your changing this, you will need to manually delete all future incorrect events."
  _ht += "Repeating events are auto-generated every night."
  repeat = models.CharField(max_length=32,choices=REPEAT_CHOICES,null=True,blank=True,help_text=_ht)
  _ht = "If true, this class will not raise conflict warnings for events in the same room."
  no_conflict = models.BooleanField(default=False,help_text=_ht)
  _ht = "Hidden stuff won't appear on the calendar."
  hidden = models.BooleanField(default=False)
  allow_rsvp = models.BooleanField(default=True)
  _ht = "Number of days before event when RSVP is cut off (eg 0.5 means \"You must rsvp 12 hours before this event\")"
  rsvp_cutoff = models.FloatField(default=0,help_text=_ht)
  max_rsvp = models.IntegerField(default=128)
  icon = models.CharField(max_length=16,choices=ICON_CHOICES)
  @property
  def verbose_rsvp_cutoff(self):
    if self.rsvp_cutoff > 2:
      s = "{} days".format(int(self.rsvp_cutoff))
    else:
      s = "{} hours".format(int(math.ceil(12*self.rsvp_cutoff)))
    return "You must RSVP for this event at least {} before the event begins.".format(s)

  get_short_name = lambda self: self.short_name or self.name
  def get_absolute_url(self):
    return reverse("event:event_detail",args=[self.pk,slugify(self.name)])
  @property
  def all_occurrences(self):
    return self.eventoccurrence_set.all()
  @property
  def upcoming_occurrences(self):
    return self.eventoccurrence_set.filter(start__gte=datetime.datetime.now()-datetime.timedelta(0.5))

  @property
  def next_occurrence(self):
    if not self.upcoming_occurrences.count():
      return None
    return self.upcoming_occurrences[0]
  def get_user_rsvps(self,user):
    occurrence_ids = self.all_occurrences.values_list('id',flat=True)
    rsvps = RSVP.objects.filter(
      user=user,
      object_id__in=occurrence_ids,
      content_type_id=ContentType.objects.get(model="eventoccurrence").id
    )
    return {r.object_id:r.quantity for r in rsvps}
  def get_name(self):
    return self.name or self.room

  get_ics_url = lambda self: reverse_ics(self)

  __unicode__ = lambda self: "%s@%s"%(self.name,self.room)
  class Meta:
    pass
Esempio n. 7
0
class Thing(PhotosMixin, ToolsMixin, FilesMixin, UserModel):
    feed_item_type = 'thing'
    title = models.CharField(max_length=128)
    description = wmd_models.MarkDownField(blank=True, null=True)
    publish_dt = models.DateTimeField(auto_now_add=True)
    featured = models.BooleanField(default=False)
    active = models.BooleanField(default=False)
    parent_link = models.URLField(null=True, blank=True)
    parent = models.ForeignKey("self", null=True, blank=True)
    materials = models.ManyToManyField(Material, blank=True)
    session = models.ForeignKey(Session, null=True, blank=True)

    __unicode__ = lambda self: self.title
    get_absolute_url = lambda self: reverse(
        'thing_detail', args=[self.id, slugify(self.title)])
    get_short_description = lambda self: self.description
    related_by_user = lambda self: Thing.objects.filter(user=self.user
                                                        ).exclude(pk=self.pk)

    def get_parent_text(self):
        if "thingiverse.com" in self.parent_link:
            return "View on Thingiverse!"
        return "View on %s" % (
            self.parent_link.split("//")[-1].split('/')[0].split('www.')[-1])

    class Meta:
        ordering = ('-publish_dt', )
Esempio n. 8
0
class EventOccurrence(PhotosMixin, OccurrenceModel):
    event = models.ForeignKey(Event)
    publish_dt = models.DateTimeField(
        default=datetime.datetime.now)  # for rss feed
    get_admin_url = lambda self: "/admin/event/event/%s/" % self.event.id
    name_override = models.CharField(null=True, blank=True, max_length=128)
    name = property(lambda self: self.name_override or self.event.name)
    short_name = property(
        lambda self: self.name_override or self.event.get_short_name())
    url = property(lambda self: self.url_override or self.event.url)
    description_override = wmd_models.MarkDownField(blank=True, null=True)
    description = property(
        lambda self: self.description_override or self.event.description)
    get_room = lambda self: self.event.room  #! depracate me
    room = cached_property(lambda self: self.event.room, name="room")
    no_conflict = property(lambda self: self.event.no_conflict)

    url_override = models.CharField(max_length=256, null=True, blank=True)
    _get_absolute_url = lambda self: reverse(
        'event:occurrence_detail', args=(self.id, slugify(self.name)))
    get_absolute_url = lambda self: self.url_override or self.event.url or self._get_absolute_url(
    )
    get_absolute_url = cached_method(get_absolute_url, name="get_absolute_url")

    rsvp_cutoff = property(
        lambda self: self.start - datetime.timedelta(self.event.rsvp_cutoff))
    total_rsvp = property(
        lambda self: sum([r.quantity for r in self.get_rsvps()]))
    full = property(lambda self: self.total_rsvp >= self.event.max_rsvp)
    icon = property(lambda self: self.event.icon)
    _cid = ContentType.objects.get(model="eventoccurrence").id

    @cached_method
    def get_rsvps(self):
        return RSVP.objects.filter(object_id=self.id,
                                   content_type_id=self._cid)

    def save(self, *args, **kwargs):
        # set the publish_dt to a week before the event
        self.publish_dt = self.start - datetime.timedelta(7)
        super(EventOccurrence, self).save(*args, **kwargs)

    @property
    def past(self):
        now = datetime.datetime.now()
        return (self.end < now) or (self.rsvp_cutoff < now
                                    and not self.get_rsvps().count())

    @property
    def as_json(self):
        return {
            'room_id': self.event.room_id,
            'name': self.name,
            'start': str(self.start),
            'end': str(self.end),
        }

    class Meta:
        ordering = ('start', )
Esempio n. 9
0
class Entry(models.Model):
    LIVE_STATUS = 1
    DRAFT_STATUS = 2
    HIDDEN_STATUS = 3
    STATUS_CHOICES = (
        (LIVE_STATUS, 'Live'),
        (DRAFT_STATUS, 'Draft'),
        (HIDDEN_STATUS, 'Hidden'),
    )

    title = models.CharField(max_length=250)
    slug = models.SlugField(unique_for_date='pub_date')
    body = wmd_models.MarkDownField(verbose_name = 'Content')
    # In content window, we want to display body itself rather than body with html tags
    # So we let 'body_html' field store 'markdown(body)'
    body_html = wmd_models.MarkDownField(editable = False, blank = True)
    pub_date = models.DateTimeField(default=datetime.datetime.now, verbose_name = 'Date Published')
    author = models.ForeignKey(User)
    enable_comments = models.BooleanField(default=True)
    status = models.IntegerField(choices=STATUS_CHOICES, default=LIVE_STATUS)
    categories = models.ManyToManyField(Category)
    tags = TagField()

    # Need to be this way around so that non-live entries will show up in Admin, which uses the default (first) manager.
    live = LiveEntryManager()
    objects = models.Manager()

    class Meta:
        ordering = ['-pub_date']
        verbose_name_plural = "Entries"

    def __unicode__(self):
        return self.title

    def save(self, force_insert = False, force_update = False):
        self.body_html = markdown(self.body)
        super(Entry, self).save(force_insert, force_update)

    @models.permalink
    def get_absolute_url(self):
        return ('coltrane_entry_detail', (), {  'year': self.pub_date.strftime("%Y"),
                                                'month': self.pub_date.strftime("%b").lower(),
                                                'day': self.pub_date.strftime("%d"),
                                                'slug': self.slug })
Esempio n. 10
0
class Comment(models.Model):
    """评论"""
    type = models.IntegerField(default=1)  # 1:theme;2:share
    obj = models.IntegerField()  # 评论对象id
    user = models.ForeignKey(settings.AUTH_USER_MODEL)  # 用户
    content = wmd_models.MarkDownField()
    content_show = wmd_models.MarkDownField(u'正文显示', null=True)
    reply_id = models.IntegerField(default=0)  # 回复的评论id
    reply_user = models.IntegerField(default=0)  # 回复谁
    add_date = models.DateTimeField(auto_now=True)

    def save(self, force_insert=False, force_update=False, using=None):
        self.content_show = mark_safe(
            markdown.markdown(force_unicode(self.content), ['codehilite'],
                              safe_mode='escape'))
        super(Comment, self).save()

    class Meta:
        db_table = 'comment'
Esempio n. 11
0
class Job(models.Model):
    title = models.CharField(max_length=50,
                             verbose_name=_('job title'),
                             help_text=_('job title'))
    slug = models.SlugField(max_length=50)
    description = wmd_models.MarkDownField()
    posted = models.DateTimeField(auto_now_add=True)
    location = models.CharField(max_length=128,
                                null=True,
                                blank=True,
                                help_text=_('job location'))
    onsite_required = models.BooleanField(default=True)
    job_type = models.CharField(max_length=1, choices=TYPE)
    category = models.ForeignKey(JobCategory, verbose_name=_('job category'))
    to_apply = models.CharField(
        max_length=128,
        verbose_name=_('how to apply'),
        help_text=_('"Send your resume to John Doe ([email protected])"'))
    website = models.URLField(verify_exists=False,
                              null=True,
                              blank=True,
                              help_text=_('"www.company.com"'))
    company_name = models.CharField(max_length=128)
    viewed = models.IntegerField(editable=False, default=1)
    checklist = models.ManyToManyField(Checklist, through='JobChecklist')

    objects = JobManager()

    def __unicode__(self):
        return self.title

    def get_absolute_url(self):
        return "/%d/%s/" % (self.id, self.slug)

    def save(self):
        self.slug = slugify(self.title)
        super(Job, self).save()

        try:
            ping_google()
        except Exception:
            # Bare 'except' because we could get a variety
            # of HTTP-related exceptions.
            pass

    def on_job_view(sender, **kwargs):
        job = kwargs['job']
        job.viewed = job.viewed + 1
        job.save()

    view_job.connect(on_job_view)

    class Meta:
        ordering = ['-posted']
        get_latest_by = 'posted'
Esempio n. 12
0
class Entry(models.Model):
    LIVE_STATUS = 1
    DRAFT_STATUS = 2
    HIDDEN_STATUS = 3
    STATUS_CHOICES = (
        (LIVE_STATUS, 'Live'),
        (DRAFT_STATUS, 'Draft'),
        (HIDDEN_STATUS, 'Hidden'),
    )

    title = models.CharField(max_length=250)
    excerpt = models.TextField(blank=True)
    #body = models.TextField()
    body = wmd_models.MarkDownField()
    pub_date = models.DateTimeField(default=datetime.datetime.now)
    slug = models.SlugField(unique_for_date='pub_date')
    author = models.ForeignKey(User)
    enable_comments = models.BooleanField(default=True)
    featured = models.BooleanField(default=False)
    status = models.IntegerField(choices=STATUS_CHOICES, default=LIVE_STATUS)
    categories = models.ManyToManyField(Category)
    tags = TagField()
    excerpt_html = models.TextField(editable=False, blank=True)
    body_html = models.TextField(editable=False, blank=True)

    img = models.ImageField(upload_to="Image")

    def save(self, force_insert=False, force_update=False):
        self.body_html = markdown(self.body)
        if self.excerpt:
            self.excerpt_html = markdown(self.excerpt)
        super(Entry, self).save(force_insert, force_update)

    live = LiveEntryManager()
    objects = models.Manager()

    class Meta:
        verbose_name_plural = "Entries"

    ordering = ['-pub_date']

    def __unicode__(self):
        return self.title

    @models.permalink
    def get_absolute_url(self):
        return ('blog_entry_detail', (), {
            'year': self.pub_date.strftime("%Y"),
            'month': self.pub_date.strftime("%b").lower(),
            'day': self.pub_date.strftime("%d"),
            'slug': self.slug
        })
Esempio n. 13
0
class Article(models.Model):
    """
    A simple model.
    Use Article.get_articles(CATEGORY=None, TAG=None, NUM=100) to
        get available articles list.
    Use Article.get_recently_articles(RECENTLY_ARTICLES_NUM) to get
        recently(RECENTLY_ARTICLES_NUM) articles.
    Use Article.get_hots_articles(HOT_ARTICLES_NUM) to
        get hot(HOT_ARTICLES_NUM) articles.
    Use article_object.related_articles(REALITVE_ARTICLES_NUM) to
        get related_articles of an object.
    """
    author = models.ForeignKey(User, verbose_name=_(u"Author"))
    category = models.ForeignKey(Category, verbose_name=_(u'Category'))

    title = models.CharField(max_length=100, verbose_name=_(u'Title'))
    tags = models.CharField(max_length=100,
                            null=True,
                            blank=True,
                            verbose_name=_(u'Tags'),
                            help_text=_(u"Use the comma(',') separated"))

    summary = models.TextField(verbose_name=_(u'Summary'),
                               validators=[MinLengthValidator(30)],
                               error_messages={
                                   "min_length":
                                   _("At least %(limit_value)d word,please!\
                            (it has %(show_value)d).")
                               })
    content = wmd_models.MarkDownField(verbose_name=_(u'Content'))

    title_image = ProcessedImageField(upload_to='thumbnail',
                                      processors=[ResizeToFill(70, 70)],
                                      format='JPEG',
                                      options={'quality': 60})

    status = models.IntegerField(default=0,
                                 choices=STATUS.items(),
                                 verbose_name=_(u'Status'))
    view_times = models.IntegerField(default=1)

    is_top = models.BooleanField(default=False, verbose_name=_(u'Top'))

    create_time = models.DateTimeField(_(u'Create Time'),
                                       auto_now_add=True,
                                       editable=True)
    update_time = models.DateTimeField(_(u'Update Time'), auto_now=True)

    def __unicode__(self):
        return self.title

    def tags_list(self):
        """
        Use article_object.tags_list() to split and get article_object's tags.
        """
        return [tag.strip() for tag in self.tags.split(',')]

    def related_articles(self, num):
        """
        A simple method.
        Use article_object.related_articles(REALITVE_ARTICLES_NUM) to
            get related_articles of an object.
        """
        related_articles = None
        try:
            related_articles = Article.objects.values('id', 'title', 'view_times', 'update_time', 'author').\
                filter(tags__icontains=self.tags_list()[0]).\
                exclude(id=self.id)[:num]
        except IndexError:
            pass

        if not related_articles:
            related_articles = Article.objects.values('id', 'title', 'view_times', 'update_time', 'author').\
                filter(category=self.category).\
                exclude(id=self.id)[:num]

        return related_articles

    @classmethod
    def get_articles(cls, CATEGORY=None, TAG=None, NUM=100):
        """
        A simple classmethod.
        Use Article.get_articles(CATEGORY=None, TAG=None, NUM=100) to
            get articles list.
        """
        if CATEGORY:
            article_list = cls.objects.filter(
                Q(status=0) & Q(category__name__icontains=CATEGORY))[:NUM]
            return article_list
        if TAG:
            article_list = cls.objects.filter(
                Q(status=0) & Q(tags__icontains=TAG))[:NUM]
            return article_list
        return cls.objects.filter(status=0)[:NUM]

    @classmethod
    def get_all_tags_list(cls):
        """
        A simple classmethod.
        Use Article.get_all_tags_list() to get all articles' tags list.
        """
        all_tags_list = []
        # obj_list = cls.objects.filter(status=0).order_by('-update_time')
        obj_list = Article.get_articles(NUM=1000)
        for obj in obj_list:
            all_tags_list = all_tags_list + obj.tags_list()
            # for tag in obj.tags.split(','):
            #     all_tags_list.append(tag)
        return all_tags_list

    @classmethod
    def get_recently_articles(cls, num):
        """
        A simple classmethod.
        Use Article.get_recently_articles(RECENTLY_ARTICLES_NUM) to
            get recently(RECENTLY_ARTICLES_NUM) articles.
        """
        return cls.objects.values('title', 'view_times', 'update_time', 'author')\
            .filter(status=0).order_by('-update_time')[:num]

    @classmethod
    def get_hots_articles(cls, num):
        """
        A simple classmethod.
        Use Article.get_hots_articles(HOT_ARTICLES_NUM) to
            get hot(HOT_ARTICLES_NUM) articles.
        """
        return cls.objects.values('id', 'title', 'view_times', 'update_time', 'author').\
            filter(status=0).order_by('-view_times'
                                      )[:num]

    class Meta:
        ordering = ['-is_top', '-update_time', '-create_time']
        verbose_name_plural = verbose_name = _(u"Article")