Bootcamp: λ‹€μ–‘ν•œ μœ ν˜•μ˜ ν”Όλ“œκ°€ ν¬ν•¨λœ ν”Όλ“œ

에 λ§Œλ“  2017λ…„ 12μ›” 06일  Β·  9μ½”λ©˜νŠΈ  Β·  좜처: vitorfs/bootcamp

3가지 μœ ν˜•μ˜ ν”Όλ“œλ₯Ό κ΅¬ν˜„ν•˜λ €κ³  ν•©λ‹ˆλ‹€.

  1. μƒνƒœ(λ©”μ‹œμ§€ ν”Όλ“œ)
  2. λΉ„λ””μ˜€ ν”Όλ“œ
  3. 이미지 ν”Όλ“œ

ν”Όλ“œ 클래슀, ν”Όλ“œ μœ ν˜• 및 각 μœ ν˜•μ— λŒ€ν•΄ νŠΉμ • 클래슀λ₯Ό μ‚¬μš©ν•˜κ³  μžˆμ§€λ§Œ ν”Όλ“œ 클래슀λ₯Ό 각 μœ ν˜• 클래슀(λΉ„λ””μ˜€ 클래슀, 이미지 클래슀)와 μ—°κ²°ν•˜λŠ” 방법을 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

μ–΄λ– ν•œ μ œμ•ˆ?

지원 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€

Support enhancement question

λͺ¨λ“  9 λŒ“κΈ€

@sebastian-code 이 κΈ°λŠ₯을 μ•Œκ³  μžˆμ§€λ§Œ λ·° λ‚΄λΆ€μ˜ 이미지 ν”Όλ“œ λ˜λŠ” λΉ„λ””μ˜€ ν”Όλ“œμ—μ„œ μΆ”κ°€ ν•„λ“œλ₯Ό μ–΄λ–»κ²Œ 얻을 수 μžˆλŠ”μ§€ λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

이것은 λ‚΄ μ½”λ“œμž…λ‹ˆλ‹€.

<strong i="7">@python_2_unicode_compatible</strong>
class Feed(models.Model):
    #STATUS OF FEEDS
    DRAFT       = 'D'
    PUBLISHED   = 'P'
    INVISIBLE   = 'I'
    VISIBLE     = 'V'

    # #TYPE OF FEEDS
    TYPE_STATUS = 'STATUS'
    # TYPE_IMG = 'IMAGE'
    # TYPE_VOD = 'VIDEO'
    # TYPE_MATCH = 'MATCH'

    STATUS = (
        (DRAFT, 'Draft'),
        (PUBLISHED, 'Published'),
    )


    user            = models.ForeignKey(User)
    date            = models.DateTimeField(auto_now_add=True)
    post            = models.TextField()
    parent          = models.ForeignKey('Feed', null=True, blank=True)
    likes           = models.IntegerField(default=0)
    comments        = models.IntegerField(default=0)
    #post_type   = models.TextField(null=True, blank=True)
    #media_url   = models.TextField(null=True, blank=True)

    media_url       = None
    #Custom fields
    post_type       = models.ForeignKey('FeedType')
    status          = models.CharField(max_length=1, choices=STATUS, default=DRAFT)
    tags            = TaggableManager()
    specific_post   = models.IntegerField(default=0)

    class Meta:
        verbose_name = _('Feed')
        verbose_name_plural = _('Feeds')
        ordering = ('-date',)

#
class FeedType(models.Model):

    feed_type = models.CharField(max_length=255, default=Feed.TYPE_STATUS)

    class Meta:
        verbose_name = _('FeedType')
        verbose_name_plural = _('FeedTypes')
        ordering = ('pk',)

    def __str__(self):
        return self.feed_type

    #method
    <strong i="8">@staticmethod</strong>
    def get_status_type():
        print("get_status_type();")
        feed_type = FeedType.objects.get(pk=1)
        return feed_type

    <strong i="9">@staticmethod</strong>
    def get_image_type():
        print("get_image_type();")
        feed_type = FeedType.objects.get(pk=2)
        return feed_type

    <strong i="10">@staticmethod</strong>
    def get_video_type():
        print("get_video_type();")
        feed_type = FeedType.objects.get(pk=3)
        return feed_type

    <strong i="11">@staticmethod</strong>
    def get_match_type():
        print("get_match_type();")
        feed_type = FeedType.objects.get(pk=4)
        return feed_type

'''
    IMAGE  FEED
'''
class ImageRelationsMixin(object):

    class FeedManagerMeta:
        image_feed = 'feeds.ImageFeed'

    <strong i="12">@property</strong>
    def Feed(self):
        feed_model_path = getattr(self.FeedManagerMeta, 'feed', 'feeds.ImageFeed')

        #print(django_get_model(*feed_model_path.split('.')))
        return django_get_model(*feed_model_path.split('.'))

class ImageFeedMixin(ImageRelationsMixin, models.Model):
    """ImageFeed represents .

    :Parameters:
      - ``: member's first name (required)
    """
    content_url = models.TextField(null=True, blank=True, default='')

    class Meta:
        abstract = True

    def __unicode__(self):
        return self.post

    def __str__(self):
        return self.post

class ImageFeed(Feed, ImageFeedMixin):

    '''django_user = models.ForeignKey(DjangoUser, null=True, blank=True, on_delete=models.SET_NULL,
                                    related_name='%(app_label)s_%(class)s_set')'''
    django_feed = models.ForeignKey(Feed, null=True, blank=True, on_delete=models.SET_NULL,
                                    related_name='%(app_label)s_%(class)s_set')

    # this is just required for easy explanation
    class Meta(ImageFeedMixin.Meta):
        abstract = False


'''
    Video  FEED
'''
class VideoRelationsMixin(object):

    class FeedManagerMeta:
        video_feed = 'feeds.VideoFeed'

    <strong i="13">@property</strong>
    def Feed(self):
        feed_model_path = getattr(self.FeedManagerMeta, 'feed', 'feeds.VideoFeed')
        #print(django_get_model(*feed_model_path.split('.')))
        return django_get_model(*feed_model_path.split('.'))

class VideoFeedMixin(VideoRelationsMixin, models.Model):
    """VideoFeed represents .

    :Parameters:
      - `media_url`: member's first name (required)
    """
    content_url = models.TextField(null=True, blank=True, default='')

    class Meta:
        abstract = True

    def __unicode__(self):
        return self.post

    def __str__(self):
        return self.post

#Feed di tipo Video
class VideoFeed(Feed, VideoFeedMixin):

    django_feed = models.ForeignKey(Feed, null=True, blank=True, on_delete=models.SET_NULL,
                                    related_name='%(app_label)s_%(class)s_set')

    # this is just required for easy explanation
    class Meta(VideoFeedMixin.Meta):
        abstract = False

이것은 고전적인 view.pyμž…λ‹ˆλ‹€.

<strong i="6">@login_required</strong>
def feeds(request):
    all_feeds = Feed.get_feeds()
    paginator = Paginator(all_feeds, FEEDS_NUM_PAGES)
    feeds = paginator.page(1)
    from_feed = -1
    vip = Feed.get_talentini(request.user)
    user_vip = Feed.get_user_talentino(request.user)

    if feeds:
        from_feed = feeds[0].id
    return render(request, 'feeds/feeds.html', {
        'feeds': feeds,
        'from_feed': from_feed,
        'page': 1,
        'vip':vip,
        'user_vip':user_vip
        })

λ‚΄κ°€ ν•΄κ²°ν•œ 것은 μ—†λ‹€!

screen shot 2017-12-06 at 15 57 52

κ·€ν•˜μ˜ μš”κ΅¬ 사항을 μ™„μ „νžˆ 이해할 μˆ˜λŠ” μ—†μ—ˆμ§€λ§Œ ν•΄κ²°ν•˜μ…¨λ‹€λ‹ˆ λ‹€ν–‰μž…λ‹ˆλ‹€. κΈ°λŠ₯은 아직 ν™•μ‹€ν•˜μ§€ μ•Šμ§€λ§Œ κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ 정말 λ³΅μž‘ν•œ 경둜λ₯Ό μ„ νƒν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. μ›λž˜ Feed λͺ¨λΈμ„ 좔상 λͺ¨λΈλ‘œ λ³€ν™˜ν•˜κ³  λ‹€λ₯Έ λͺ¨λΈμ„ 상속할 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

ν˜Όλž€μŠ€λŸ½λ„€μš” μ£„μ†‘ν•©λ‹ˆλ‹€ :( μ•Œμ•„μš”

2017-12-06 17:42 GMT+01:00 μ„Έλ°”μŠ€μ°¬ 레예슀 μ—μŠ€ν”Όλ…Έμ‚¬ <
μ•Œλ¦Ό@github.com>:

λ‚˜λŠ” λ‹Ήμ‹ μ˜ μš”κ΅¬ 사항을 μ™„μ „νžˆ 이해할 수 μ—†μ—ˆμ§€λ§Œ 당신을 기쁘게 μƒκ°ν•©λ‹ˆλ‹€
ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. κΈ°λŠ₯은 아직 ν™•μ‹€ν•˜μ§€ μ•Šμ§€λ§Œ
κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ 정말 λ³΅μž‘ν•œ 경둜λ₯Ό μ„ νƒν•˜λ©΄
μ›λž˜ ν”Όλ“œ λͺ¨λΈμ„ 좔상 λͺ¨λΈλ‘œ κ°€μ Έμ˜€κ³  λ‹€λ₯Έ λͺ¨λΈμ—μ„œ μƒμ†ν•©λ‹ˆλ‹€.

β€”
μŠ€λ ˆλ“œλ₯Ό μž‘μ„±ν–ˆκΈ° λ•Œλ¬Έμ— 이 λ©”μ‹œμ§€λ₯Ό λ°›λŠ” κ²ƒμž…λ‹ˆλ‹€.
이 이메일에 직접 λ‹΅μž₯ν•˜κ³  GitHubμ—μ„œ ν™•μΈν•˜μ„Έμš”.
https://github.com/vitorfs/bootcamp/issues/131#issuecomment-349699018 ,
λ˜λŠ” μŠ€λ ˆλ“œ μŒμ†Œκ±°
https://github.com/notifications/unsubscribe-auth/AVdMg0p3EAdKYXbMA6XV9WuRamCWcUU_ks5s9sQKgaJpZM4Q3oVG
.

@sebastian-code λ‹€λ₯Έ μœ ν˜•μ˜ ν”Όλ“œλŠ” μΌμ’…μ˜ 아듀이기 λ•Œλ¬Έμ—..

이것은 κ΄€λ¦¬μž νŒ¨λ„μ˜ λ‚΄ μ˜ˆμž…λ‹ˆλ‹€. :)
screen shot 2017-12-06 at 17 17 43
screen shot 2017-12-06 at 17 17 31

정말 λ©‹μ Έ λ³΄μž…λ‹ˆλ‹€. κ³΅μœ ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. 전에 λ§ν–ˆλ“―μ΄, λ‚˜λŠ” λ‹Ήμ‹ μ˜ 전체 μš”κ΅¬ 사항과 당신이 λ‹Ήμ‹ μ˜ ν”„λ‘œμ νŠΈμ— λŒ€ν•΄ μ„€μ •ν•œ λͺ©ν‘œλ₯Ό μ™„μ „νžˆ 이해할 수 μ—†μ—ˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. μ™„μ„±λ˜λ©΄ λ³΄λŠ” 것이 쒋을 κ²ƒμž…λ‹ˆλ‹€. κ·Έλž˜μ„œ 당신이 그것을 가지고 μžˆμ„ λ•Œ μ €μ—κ²Œ μ•Œλ €μ£Όμ‹­μ‹œμ˜€. μ•„λ§ˆλ„ μ—¬κΈ°μ—μ„œ 배우고 κ΅¬ν˜„ν•΄μ•Ό ν•  것이 μžˆμ„ κ²ƒμž…λ‹ˆλ‹€.

@Allan-Nava λ‚˜λŠ” λ‹Ήμ‹ κ³Ό 같은 λ‹€λ₯Έ μœ ν˜•μ˜ ν”Όλ“œλ₯Ό λ§Œλ“€ κ³„νšμž…λ‹ˆλ‹€. μ—°λ½μ²˜ Facebookμ΄λ‚˜ Skypeλ₯Ό κ³΅μœ ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

@feedgit 무엇이 ν•„μš”ν•œκ°€μš”?

λ‚΄ Skypeλ₯Ό μΆ”κ°€ν•˜μ‹­μ‹œμ˜€: kai_trystan7 :)

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰