021-71053903 [email protected] پشتیبانی از شنبه تا چهارشنبه ساعت 9 الی 16

آموزش ساخت RSS در Django

مقدمه

با سلام خدمت تمامی شما کاربران خوب وبسایت پایتونی ها با یک مقاله آموزشی دیگه از سری مقالات وبسایت پایتونی ها در خدمتتون هستیم تا در مورد مبحث آموزشی RSS در جنگو با هم صحبت کنیم. شاید شما هم در برخی وبسایت که در آن ثبت نام کرده اید، اعلان ها و یا نوتیفیکیشن هایی را مشاهده کرده باشید که به شما در مورد محتوای وبسایت اطلاع رسانی می کند به این نوع اطلاع رسانی از آخرین سیستم محتوایی وبسایت ها RSS گفته می شود که در ادامه مقاله بیش تر به آن می پردازیم.

البته در این مقاله به نحوه کارکرد و نحوه انجام آن در جنگو با استفاده از فیدهای RSS و Atom جنگو هم می پردازیم.

 

 

فیدهای RSS

RSS که مخفف Really Simple Syndication است که به آن خلاصه سایت RDF نیز می‌گویند، خلاصه‌ای از فایل‌ها در قالب فهرستی از مقالات و پیوندهایی به محتوای به‌روز شده وب‌سایت است. این موضوع به کاربران آن وب سایت اجازه می دهد تا به جای مراجعه به این سایت ها برای جستجوی به روز رسانی، با دریافت مستقیم این اطلاعات، دائماً از محتوای سایت به روز باشند.

ساختار RSS معمولاً در یک نوع XML است و شامل یک متن کامل یا خلاصه شده با سایر اطلاعات از جمله داده‌ها، نام نویسنده، تاریخ به‌روزرسانی و غیره است.

جنگو دارای یک قریم ورک داخلی برای تولید Feedback است که به صورت پویا فیدهای RSS را تولید می‌کند.

یک کلاس کوتاه پایتون برای ایجاد فید syndication در جنگو استفاده می شود.

 

استفاده از چارچوب فید Syndication برای ایجاد یک فید RSS

شما با استفاده از یکی از فریم ورک های داخلی جنگو می توانید با استفاده از کلاس داخلی Feed شروع به ساخت RSS در جنگو کنید.

این Fee-Class، یک کلاس پایتون است که مسئول ایجاد فید syndication در جنگو را بر عهده دارد.

فیدها می توانند از ساده تا پیچیده متغیر باشند. یک مثال فید ساده می‌تواند یک فید اصلی باشد که آخرین ورودی‌های وبلاگ را نشان می‌دهد، در حالی که فیدهای پیچیده می‌توانند فهرست کاملی از ورودی‌های وبلاگ یک دسته خاص را شامل شوند.

با استفاده از یکی از کتابخانه های داخلی فریم ورک جنگو شروع به طراحی RSS خود می کنیم برای اینکار ابتدا باید نام این کتابخانه را وارد کنیم.

django.contrib.syndication.views.Feed

نکته*:: زمانی که از RSS در جنگو استفاده می کنید پیکربندی RSS در پایگاه داده جایگاه خاصی ندارد و می تواند در هر قسمت که می خواهید قرارش دهید.

 

مثال عملی از پیاده سازی فیدهای RSS

ایجاد فید RSS در جنگو

ما برای یک اپلیکیشن بلاگ در جنگو می خواهیم RSS تصادفی تولید کنیم.

ابتدا در فایل models.py پروژه جنگو، این قطعه کد را اضافه کنید.

models.py

from django.db import models
from django.contrib.auth.models import User

# Create your models here.
class Blog(models.Model):
    STATUS = (
        (0, 'zero'),
        (1, 'one'),
        (2, 'two'),
    )
    blog_title = models.CharField(max_length=150, unique=True)
    slug = models.SlugField(max_length=150, unique=True)
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name="blogs")
    updated_on = models.DateTimeField(auto_now=True)
    content = models.TextField()
    created_on = models.DateTimeField(auto_now_add=True)
    status = models.IntegerField(choices=STATUS, default=0)

    class Meta:
        ordering = ["-created_on"]

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        from django.urls import reverse
        return reverse("post_detail", kwargs={"slug":str(self.slug)})

مدل ما در میان فیلدهای دیگر، تاریخ و ساعت ایجاد پست، و تاریخ و ساعتی که این پست به روز می شود، می باشد. هر پست از نظر زمان و تاریخی که در آن ایجاد شده است، به ترتیب صعودی (از قدیمی ترین پست تا جدید ترین پست به روز شده) مرتب و نمایش داده می شود.

دقت داشته باشید در کد بالا تابع get_absolute_url()  لینک مورد نظر هر پست را بازیابی می کند تا برای کاربران ارسال کند.

 

به یاد داشته باشید که هر زمان که فایل models.py را به روز می کنید، باید پایگاه داده خود را نیز به صورت کنید:

models.py

python manage.py makemigrations

python manage.py migrate

 

سپس باید مدل را در فایل admin.py نیز اضافه کنید:

admin.py

from django.contrib import admin

# Register your models here.
from .models import Blog
admin.site.register(Blog)

 

در پوشه برنامه خود، یک فایل ایجاد کنید و آن را feeds.py ذخیره کنید و این قطعه کد را به آن اضافه کنید:

feeds.py

from django.contrib.syndication.views import Feed
from django.template.defaultfilters import truncatewords
from .models import Blog
from django.urls import reverse

class MostRecentFeed(Feed):
    title = "Latest blog"
    link = ""
    description = "Latest blog posts"

    def items(self):
        return Blog.objects.filter(status=1)

    def item_title(self, item):
        return item.title    

    def item_description(self, item):
        return truncatewords(item.content, 20)

RSS دارای <title><link>و <description>استانداردی است که عناصر فایل feeds.py ما با آن مطابقت کامل دارد.

برای بازیابی اشیاء موجود در فید، از این items()  استفاده می شود. در این حالت، ما تمام پست‌های وبلاگ را فیلتر می‌کنیم تا فقط مقالات دارای وضعیت 1 است را بازیابی کنیم .

در  items()  اشیاء بازیابی شده که توسط Return بازیابی می شوند، سپس با روش and دریافت می شوند item_title()و item_description()سپس عنوان و توضیحات برای هر آیتم/پست بازگردانده می شوند.

به‌طور پیش‌فرض، truncatewordsکه یک فیلتر قالب داخلی است، توضیحاتی مورد هر پست از وبلاگ ما را با 20 کلمه اول آن می‌سازد.

توجه داشته باشید که جنگو از این get_absolute_url روشی برای بازیابی لینک آیتم ها در مدل ها استفاده می کند.

آیا تا الان متوجه شده اید که ما از viewها در اینجا استفاده نکرده ایم؟

فیدها به جای فایل views.py عمل می کنند. بنابراین، ما باید فید را در یک فایل urls.py ترسیم کنیم ، و یکی را در برنامه خود ایجاد کنید، سپس این چند خط کد را اضافه کنید.

from django.urls import path
from .feeds import MostRecentFeed
from django.conf.urls import url

urlpatterns =[
    url(r'^latest/comments/', MostRecentFeed()),
]

 

خوب، فید RSS ما توسط جنگو در ‘latest/comments’ حالا در این آدرس قرار دارد !

حالا این دستور را اجرا کنید تا سرور جنگو شروع به کار کند.

python manage.py runserver

اکنون به آدرس زیر بروید:

http://127.0.0.1:8000/feeds/latest/comments/

زمانی که وارد آدرس بالا شدید باید یک فایل XML نمایش داده شده را در مرورگر خود ببینید.

تصویر بالا باید همان چیزی باشد که در مرورگر شما نمایش داده می‌شود:

  • آخرین فیدها یا به‌روزرسانی‌های پست‌های وبلاگ با عنوان آخرین پست
  • پیوند به آن پست
  • توضیحات
  • تاریخ و زمان به‌روزرسانی پست

اگر این URL در یک سرویس گیرنده RSS باز شود، Feed رابط کاربری جذاب تری خواهد داشت.

 

Atom Feeds

اتم feeds هم یک نوع فید کم و بیش شبیه فیدهای RSS است. یک ساختار XML دارد که فهرست فیدهایی را که حاوی برخی فراداده در یک پست هستند، را توصیف می کند.

Atom در درجه اول به توزیع محتوای وب از جمله وبلاگ ها و سرفصل های خبری به وب سایت ها و به طور مستقیم به کاربران می پردازد.

Atom از محدودیت ها و نقص های اساسی که RSS به همراه دارد اجتناب می کند. در حالی که RSS ایجاد فید یا آخرین تاریخ به روز رسانی یک پست در یک سایت را نشان می دهد، Atom تاریخ آخرین به روز رسانی وب سایت را نشان می دهد.

جنگو به طور پیش فرض فیدهای RSS نسخه 2.0 را تولید می کند. بنابراین، فیدهای اتم را می توان با تخصیص یک feed_type به Atom تولید کرد(یا تبدیل کرد)، که در آن Atom1Feed ویژگی مشخص شده اختصاص داده شده است که از SyndicationFeed()کلاس نیز به ارث می برد.

نتیجه یک چیزی شبیه به این خواهد بود:

from django.utils.feedgenerator import Atom1Feed

class MyFeed(Feed):
    feed_type = Atom1Feed

 

نتیجه

این مقاله نحوه ایجاد فید از وبلاگ‌ها یا فیدهای خبری را با استفاده از فیدهای RSS جنگو که از چارچوب Syndication ارث بری می کند، آموزش می‌دهد. ما یک مثال عملی از نحوه دریافت به‌روزرسانی‌ها از یک وبلاگ را آموزش دادیم و دیدیم که فید در قالب XML چگونه به نظر می‌رسد.

شما می توانید این پروژه را در یک برنامه دیگر پیاده سازی کنید و ببینید که ایجاد فید در جنگو چقدر می تواند لذت بخش باشد.

اگر نظری در مورد این مقاله دارید و یا برای شما مفید بوده می توانید با استفاده از قسمت نظرات در زیر همین مقاله مارا مطلع کنید.

محمدرضا حسنی

224 مطلب منتشر شده

دانش آموخته رشته فناوری اطلاعات / موسس پایتونی ها

درباره این مطلب نظر دهید !

مطالب پرمخاطب پایتونی ها

محصولات فروش پایتونی ها

%60
تخفیف

آموزش فیگما (Figma)

30,000 تومان
2