تقویت وردپرس با استفاده از پایتون و ردیس

وردپرس با پایتون و ردیس

در این مطلب، وردپرس با پایتون و ردیس و نحوه ارسال مستقیم محتوا به Redis را با ساختن یک برنامه پایتون که از کتابخانه محبوب redis-py استفاده می‌کند و نحوه ارسال از طریق WordPress REST API را نشان می‌دهیم.

در دنیای پایتون، بسیاری از توسعه دهندگان پایگاه داده NoSQL Redis را به دلیل سرعت آن و در دسترس بودن مجموعه ای قوی از کتابخانه‌های کلاینت دوست دارند و در جهان وردپرس، Redis اغلب فناوری مورد استفاده برای زمانی که یک آبجکت کش دائمی برای سرعت بخشیدن به دسترسی به داده‌های پشتیبان مورد نیاز است، استفاده می‌شود.

در اتصال وردپرس با پایتون و ردیس هنگامی که محتوای وردپرس را با یک برنامه پایتون دستکاری می‌کنید، می توانید این دو جهان را با هم ترکیب کنید.

Redis چیست؟

Redis یا Remote Dictionary Server یک پایگاه داده سریع NoSQL و کش است که توسط Salvatore Sanfilippo توسعه یافته و توسط Redis Ltd (Redi Labs سابق) نگهداری می‌شود. نسخه‌های متن‌باز Redis تحت مجوز BSD در دسترس هستند، در حالی که Redis Ltd همچنین تجسم‌های تجاری و ابری سرور را ارائه می‌کند.

Redis با مکانیسم ذخیره سازی داده خود را از سایر پایگاه های داده NoSQL متمایز می‌کند. معمولا به آن فروشگاه ساختار داده می‌گویند زیرا داده‌ها را با انواع داده‌های مشابه موجود در بسیاری از زبان‌های برنامه‌نویسی، از جمله رشته‌ها، مجموعه‌ها، فهرست‌ها و دیکشنری‌ها (یا هش) ذخیره می‌کند. علاوه بر پشتیبانی از ساختارهای ساده، Redis از ساختارهای داده پیشرفته برای کارهایی مانند مکان یابی و پردازش جریان پشتیبانی می کند.

پیش نیازهای اپلیکیشن پایتون

قبل از شروع ایجاد برنامه خود، باید سه مورد زیر را به صورت لوکال نصب کنید:

  • Redis
  • وردپرس – داطمینان حاصل کنید که صفحه اصلی وردپرس به پایگاه داده MariaDB یا MySQL متصل است.
  • پایتون و پیپ – از پایتون ۳.۴، پیپ، نصب کننده بسته پایتون، به طور پیش فرض گنجانده شده است.

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

ایجاد یک برنامه پایتون برای ذخیره یک نوشته در کش Redis

کش Redis یک مکانیسم کش کارآمد برای وب‌سایت است. برای دسترسی سریع تر و راحت تر، اطلاعاتی که اغلب درخواست می‌شود را ذخیره می‌کند. کش اطلاعات را در یک ساختار داده key-value ذخیره می‌کند.

با ایجاد یک پوشه جدید برای پروژه خود به نام python-redis شروع کنید. پس از آن، ترمینال فرمان خود را راه اندازی کنید، cd به python-redis، و با اجرای دستور زیر redis-py را نصب کنید:

pip install redis

پس از اتمام نصب، یک فایل جدید به نام main.py در دایرکتوری python-redis ایجاد کنید. فایل را در ویرایشگر متن مورد علاقه خود باز کنید تا بلوک های کد زیر را وارد کنید.
با وارد کردن کتابخانه redis-py تازه نصب شده شروع کنید و آدرس میزبان و پورت Redis را تنظیم کنید:

import redis
redis_host = 'localhost'
redis_port = 6379

اکنون، مقادیر پست وردپرس را به صورت جفت key/value در یک فرهنگ لغت تعریف کنید. در اینجا یک مثال است:

post = {
'ID': 1,
'post_author': 1,
'post_date': '2024-02-05 00:00:00',
'post_date_gmt': '2024-02-05 00:00:00',
'post_content': 'Test Post <br/><a href="https://www.my-site.com/">related blog post</a>',
'post_title': 'My first post',
'post_excerpt': 'In this post, I will...',
'post_status': 'publish',
'comment_status': 'open',
'ping_status': 'open',
'post_password': 'my-post-pwd',
'post_name': 'my-first-post',
}

توجه: در یک برنامه واقعی، محتوای نوشته احتمالا از یک فرم ورودی HTML می‌آید.

با یک تابع redis_dict() به کد اضافه کنید که با سرور لوکال Redis شما متصل می‌شود، پست بالا را در حافظه کش Redis ذخیره و مقادیر با موفقیت ایجاد شده را در کنسول چاپ می‌کند:

</pre>
def redis_dict():
try:
r = redis.StrictRedis(host = redis_host, port = redis_port, decode_responses=True)
r.hset("newPostOne", mapping=post)
msg = r.hgetall("newPostOne")
print(msg)
except Exception as e:
print(f"Something went wrong {e}")

# Runs the function:
if __name__ == "__main__":
redis_dict()
<pre>

مگر اینکه Redis را در داکر راه اندازی کرده باشید، رابط خط فرمان Redis را با دستور زیر فراخوانی کنید:

redis-cli

حالا اسکریپت پایتون خود را اجرا کنید:

 
python main.py

اجرای اسکریپت، پست را به فروشگاه Redis key-value اضافه می‌کند. شما باید پاسخ زیر را در کنسول ترمینال خود مشاهده کنید:

در این بخش از وردپرس با پایتون و ردیس شما با موفقیت یک نوشته را در پایگاه داده Redis محلی خود ذخیره کرده‌اید.

اکنون، بیایید این نوشته را با استفاده از WordPress REST API در سایت وردپرس خود آپلود کنیم و آن را به جای Redis در پایگاه داده پیش فرض MariaDB یا MySQL ذخیره کنیم.

هاست وردپرس با وب سرور محبوب لایت اسپید و کش لایت اسپید باعث می‌شود تا سرعت لود فوق العاده‌ای را تجربه کنید.

با خرید هاست وردپرس کانفیگ حرفه‌ای و نظارت بر سرور به صورت پیوسته توسط تیم فنی پارسدِو انجام خواهد شد.

با استفاده از REST API یک پست در وردپرس آپلود کنید

WordPress REST API مجموعه ای از نقاط پایانی را ارائه می دهد که می‌توانید از برنامه خود برای تعامل با وردپرس تماس بگیرید. ما از نقطه پایانی برای ایجاد یک پست در وردپرس استفاده می کنیم.

مرحله ۱: رمز عبور برنامه را در وردپرس تنظیم کنید

API وردپرس به یک رمز عبور برنامه نیاز دارد تا به برنامه شما اجازه دهد به داده‌های سایت وردپرس دسترسی داشته باشد. رمز عبور یک کلید مخفی ۲۴ کاراکتری است که باید در هر درخواست به REST API آن را وارد کنید.
در صفحه User Profile پیشخوان وردپرس یک رمز عبور برنامه ایجاد کنید. می‌توانید برای هر گذرواژه برنامه یک نام کاربرپسند اختصاص دهید، اما پس از ایجاد رمز عبور، نمی‌توانید آن را مشاهده کنید.

مرحله ۲: با برنامه پایتون خود به وردپرس ارسال کنید

ابتدا کتابخانه درخواست های پایتون را برای ایجاد درخواست HTTP به API وردپرس نصب کنید. برای انجام این کار، دستور زیر را در ترمینال اجرا کنید:

pip install requests

سپس، در داخل پوشه python-redis خود، یک فایل جدید به نام app.py ایجاد کنید. سپس، فایل را با ویرایشگر متن خود باز کنید.

با وارد کردن ماژول های درخواست ها، json و base64 شروع کنید:

</pre>
import requests
import json
import base64
<pre>

URL پایه API و همچنین نام کاربری و رمز عبور وردپرس خود را تعریف کنید. برای متغیر رمز عبور، از رمز عبور برنامه ای که در وردپرس ایجاد کرده اید استفاده کنید:

url = 'https://localhost/wp-json/wp/v2'
user = '&lt;Your username here&gt;'
password = '&lt;Your application password here&gt;'

اکنون، user و password را جوین، نتیجه را رمزگذاری کنید و آن را به هدر درخواست ارسال کنید:

و اینم بدنه پست:

</pre>
creds = user + ":" + password
token = base64.b64encode(creds.encode())
header = {'Authorization': 'Basic ' + token.decode('utf-8')}
<pre>

درخواست POST را به API و دستوری برای چاپ وضعیت پاسخ تنظیم کنید:

r = requests.post(url + '/posts', headers=header, json=post)
print(r)

اسکریپت خود را با دستور زیر در ترمینال اجرا کنید:

python app.py

اگر پاسخ ۲۰۱ دریافت کردید (“Created”)، به این معنی است که منبع با موفقیت اضافه شده است.

می توانید این را در پیشخوان وردپرس یا پایگاه داده MySQL/MariaDB سایت خود تایید کنید.

از کش Redis به طور مستقیم در وردپرس استفاده کنید

وب‌سایت‌های وردپرسی می‌توانند از کش Redis برای ذخیره موقت اشیاء مانند نوشته‌ها، برگه‌ها یا کاربران استفاده کنند. سپس در صورت نیاز می توان به شی از حافظه پنهان دسترسی داشت. این رویکرد باعث صرفه جویی در زمان با ارزش، کاهش تأخیر، و بهبود ظرفیت سایت در مقیاس و مقابله با ترافیک بیشتر می شود.

نصب پلاگین Redis

به عنوان مثال، بیایید افزونه Redis Object Cache را در وب سایت وردپرس محلی خود نصب کنیم.
فایل wp-config.php را در یک ویرایشگر متن باز کنید و کد زیر را در قسمت متغیرهای پیکربندی سفارشی اضافه کنید:

define('WP_REDIS_CLIENT', 'predis');
define('WP_REDIS_HOST', 'localhost');
define('WP_REDIS_PORT', '6379');

توجه: آدرس هاست Redis شما به پیکربندی سرور شما بستگی دارد.

به تنظیمات > Redis در پیشخوان وردپرس بروید. شما باید چیزی شبیه به این را ببینید:

نصب ردیس روی وردپرس

کش Redis اکنون با موفقیت جایگزین پایگاه داده قبلی MySQL شده است.

علاوه بر این، سایت وردپرس فرانت اند از حافظه پنهان مشابه برنامه کاربردی پایتون استفاده می کند. می توانید با باز کردن یک ترمینال جدید و اجرای دستور زیر این مورد را تست کنید:

redis-cli monitor

همانطور که در سایت خود پیمایش می کنید، درخواست های وب سایت در خط فرمان خروجی می‌شوند:

خروجی redis-cli

اکنون که قسمت فرانت و بک‌اند با هم هماهنگ هستند، می‌توانید با استفاده از برنامه پایتون خود از طریق REST API یک نوشته جدید به وردپرس اضافه کنید.
برای انجام این کار، شی POST را در app.py تغییر دهید تا نوشته جدید شما را در بر گیرد، سپس python app.py را اجرا کنید تا پست به حافظه کش اضافه شود.

جمع‌بندی

در این مطلب، تقویت وردپرس با پایتون و ردیس و  نحوه اتصال دیتابیس Redis به برنامه پایتون را با استفاده از کلاینت Redis Python یاد گرفتیم. این سرویس گیرنده از چندین فرمت برای ذخیره‌سازی داده‌های Redis پشتیبانی می‌کند: فهرست‌ها (data stores)، مجموعه‌ها (lists)، دیکشنری‌ها (sets) و دیگر انواع داده‌های دستوری (dictionaries).

ما همچنین دیدیم که چگونه می توانید Redis را از طریق REST API و افزونه Redis Object Cache در یک سایت وردپرس ادغام کنید.