ニュースキュレーターとニュース購読アプリケーションを作成する


私は最近、django-newsfeedという名前のdjangoパッケージをリリースしました.
これは本当にニュースキュレーターやニュースレターのサブスクリプションのウェブサイトを構築することが容易になります.
今日、私は簡単にニュースキュレーターのウェブサイトや
あなたの既存のウェブサイトにニュースフィード購読サービスを加えてください.

要件

  • django > = 2.2
  • djangoニュースフィード
  • セロリ
  • セロリビート
  • レッシス
  • セットアッププロジェクト:


    レッツゲット
  • 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-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管理者ページにログインして、ポスト、問題と会報を作成してください.
  • これで次のようになります.

  • ラテンアメリカ問題:newsfeed/

  • 発行官一覧newsfeed/issues/

  • 詳細不明:newsfeed/issues/<slug:issue_number>/

  • 購読料:newsfeed/subscribe/

  • 確認したニュースレター

  • 解雇されたニュースレター:newsfeed/subscribe/confirm/<uuid:token>/
  • あなたの好みにテンプレートをオーバーライドします.詳しくはclick here
    こちらはcode for this tutorialです.
    オーバーライドされたテンプレートをここで見ることができます.これは、スタイルをテンプレートにブートストラップを使用します.
  • ニュースレターの設定


    プロジェクトが設定されている今、我々はニュースレターを送信するセロリタスクを作成することができます.
    セロリの設定
  • のセットアップcelery from here.
  • Redisのためにセロリセッティングをnewsfeed/unsubscribe/に加えます
  • # 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
    
  • に電子メール設定を加えてください
  • # 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に変更します
  • DJangoアプリを作成し、settings.py
  • $ python manage.py startapp core
    
  • 現在インストールされているアプリにsettings.pyを追加します.
  • INSTALLED_APPS = [
        ...
        'core',
    ]
    
  • アプリディレクトリで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
        )
    
    **これはcoreによって提供されるtasks.pyを呼び出すことを可能にします
    セロリの仕事で.
    これで、django管理ページからニュースレターを送信することができます.
  • このディレクトリをプロジェクトディレクトリのcoreファイルに追加します.
    (ステップ3以降で作成するファイルはEmailNewsletterSender ).
  • 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='*'),
        }
    }
    
    これは毎時ニュースレターを送信する予定です.
    今、あなたはこのスケジュールされたタスクを自動的にすべての加入者にスケジュールされたニュースレターを送信することができます.
  • アプリディレクトリ242479142ファイルにこのコードを追加します.
  • 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-newsletterのすべての設定についての詳細を学ぶことができます.
    ここからパッケージをチェックアウトします

    ジャンゴニュースフィード まとめ


    あなたがこのパッケージを使用するならば
    またはコメントセクションで.
    何か提案があれば、このパッケージに貢献したい
    を作成してください
    そして、issueを読みます.
    フィードバックと貢献は常に歓迎です.