Django를 사용하여 뉴스 큐레이터 및 뉴스 구독 앱 만들기

최근에 django-newsfeed 이라는 django 패키지를 출시했습니다.
이를 통해 뉴스 큐레이터 및 뉴스레터 구독 웹사이트를 구축하기가 정말 쉬워집니다.

오늘은 뉴스 큐레이터 웹사이트나
기존 웹 사이트에 뉴스 피드 구독 서비스를 추가하십시오.

요구 사항:


  • 장고 >= 2.2
  • 장고-뉴스피드
  • 셀러리
  • 셀러리비트
  • 레디스

  • 설정 프로젝트:



    시작하자
  • Virtualenv 생성 및 설치 요구 사항:

  • $ mkvirtualenv example-newsfeed     # you can use virtualenv instead of virtualenvwrapper
    $ mkdir django-newsfeed
    $ cd django-newsfeed/
    
    $ pip install celery Django django-celery-beat django-newsfeed redis
    

    ** 시스템에 redis가 설치되어 있어야 합니다. 여기는 guide
  • django 설정:

  • $ django-admin.py startproject example_newsfeed .    # dot (.) is added to create project on current directory
    $ python manage.py migrate
    

  • 이제 설치된 앱에 newsfeedcelery-beat를 추가합니다.

  • INSTALLED_APPS = [
        ...
        'django_celery_beat',
        'newsfeed',
    ]
    

  • django-newsfeed URL을 프로젝트urls.py에 추가합니다.

  • urlpatterns = [
        ...
        path('newsfeed/', include('newsfeed.urls', namespace='newsfeed')),
        ...
    ]
    

  • 수퍼유저 생성 및 Django 개발 서버 실행

  • $ python manage.py createsuperuser
    $ python manage.py runserver       # http://127.0.0.1:8000/
    

  • Django 관리 페이지로 이동하여 로그인하고 게시물, 이슈 및 뉴스레터를 생성합니다.

  • 이제 다음으로 이동할 수 있습니다.

  • latest_issue: newsfeed/

  • issue_list: newsfeed/issues/

  • issue_detail: newsfeed/issues/<slug:issue_number>/

  • newsletter_subscribe: newsfeed/subscribe/

  • newsletter_subscription_confirm: newsfeed/subscribe/confirm/<uuid:token>/

  • newsletter_unsubscribe: newsfeed/unsubscribe/
  • 템플릿을 원하는 대로 재정의합니다. 자세히 알아보기click here
    다음은 code for this tutorial 입니다.
    여기에서 재정의된 템플릿을 볼 수 있습니다. 부트스트랩을 사용하여 템플릿의 스타일을 지정합니다.

  • 뉴스레터 전송 설정:



    이제 프로젝트가 설정되었으므로 뉴스레터를 보내는 셀러리 작업을 만들 수 있습니다.

    셀러리 구성
  • 설정celery from here .
  • redis에 대한 셀러리 설정을 settings.py에 추가합니다.

  • # Celery Settings
    CELERY_BROKER_URL = 'redis://localhost:6379'
    CELERY_RESULT_BACKEND = 'redis://localhost:6379'
    CELERY_ACCEPT_CONTENT = ['application/json']
    CELERY_TASK_SERIALIZER = 'json'
    CELERY_RESULT_SERIALIZER = 'json'
    CELERY_TIMEZONE = TIME_ZONE
    

  • settings.py에 이메일 설정 추가

  • # Email Settings
    EMAIL_HOST = 'test_host'
    EMAIL_HOST_USER = 'test_user'
    EMAIL_HOST_PASSWORD = 'test_password'
    EMAIL_PORT = 587
    EMAIL_USE_TLS = True
    EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
    

    ** 프로덕션 서버용으로 변경django reference
  • 이름이 core인 django 앱을 만듭니다.

  • $ python manage.py startapp core
    

  • 이제 설치된 앱에 core를 추가합니다.

  • INSTALLED_APPS = [
        ...
        'core',
    ]
    

  • tasks.py 앱 디렉토리에 core 파일을 만듭니다. 이 코드를 파일에 붙여넣습니다.

  • from celery.decorators import task
    
    from newsfeed.models import Newsletter
    from newsfeed.utils.send_newsletters import send_email_newsletter
    
    
    @task(name="send_email_newsletter_task")
    def send_email_newsletter_task(newsletters_ids=None, respect_schedule=True):
        newsletters = None
    
        if newsletters_ids:
            newsletters = Newsletter.objects.filter(
                id__in=newsletters_ids
            )
        send_email_newsletter(
            newsletters=newsletters,
            respect_schedule=respect_schedule
        )
    

    ** 이렇게 하면 EmailNewsletterSender에서 제공하는 django-newsletter로 전화를 걸 수 있습니다.
    셀러리 작업에서.

    이제 django 관리 페이지에서 뉴스레터를 보낼 수 있습니다.
  • 이 코드를 프로젝트 디렉토리의 celery.py 파일에 추가하십시오.
    ( celery.py 파일은 3단계에 따라 생성되어야 함)

  • app.conf.beat_schedule = {
        'send_email_newsletter': {
            'task': 'send_email_newsletter_task',
            # http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html
            # run this task every hour
            'schedule': crontab(minute=0, hour='*'),
        }
    }
    

    ** 이것은 매시간 뉴스레터 전송을 예약합니다.
    이제 이 예약 작업을 사용하여 예약된 뉴스레터를 모든 구독자에게 자동으로 보낼 수 있습니다.
  • 이 코드를 admin.py 앱 디렉토리의 core 파일에 추가합니다.

  • from django.contrib import admin, messages
    
    from newsfeed.admin import NewsletterAdmin
    from newsfeed.models import Newsletter
    
    from .tasks import send_email_newsletter_task
    
    admin.site.unregister(Newsletter)
    
    
    @admin.register(Newsletter)
    class NewsletterAdmin(NewsletterAdmin):
    
        def send_newsletters(self, request, queryset):
            newsletter_ids = list(queryset.values_list('id', flat=True))
    
            send_email_newsletter_task.delay(
                newsletters_ids=newsletter_ids,
                respect_schedule=False
            )
            messages.add_message(
                request,
                messages.SUCCESS,
                'Sending selected newsletters(s) to the subscribers',
            )
    

    ** 이것은 셀러리 작업을 사용하기 위해 뉴스레터를 보내는 관리자 작업을 재정의합니다.

    이 튜토리얼의 소스 코드: https://github.com/saadmk11/test-django-newsfeed



    비디오 데모:





    더:



    github에서 django-newsfeed에 대한 모든 구성에 대해 자세히 알아볼 수 있습니다.

    여기에서 패키지를 확인하세요: django-newsfeed

    결론:



    이 패키지를 사용하는 경우 언제든지 의견을 보내주십시오.
    또는 댓글 섹션에서.
    제안 사항이 있거나 이 패키지에 기여하고 싶은 경우
    issue을 생성하십시오.
    contribution guide 을 읽습니다.

    피드백과 기여는 언제나 환영합니다.

    좋은 웹페이지 즐겨찾기