مقدمه
با سلام خدمت تمامی شما کاربران خوب وبسایت پایتونی ها با یک مقاله آموزشی دیگه از سری مقالات وبسایت پایتونی ها در خدمتتون هستیم تا در مورد مبحث آموزشی 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 چگونه به نظر میرسد.
شما می توانید این پروژه را در یک برنامه دیگر پیاده سازی کنید و ببینید که ایجاد فید در جنگو چقدر می تواند لذت بخش باشد.
اگر نظری در مورد این مقاله دارید و یا برای شما مفید بوده می توانید با استفاده از قسمت نظرات در زیر همین مقاله مارا مطلع کنید.