بلاگ API


در این سوال قصد داریم به کمک کتابخانه DjangoRestFramework یک RESTful API برای وبلاگ خود طراحی کنیم.

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

پروژه اولیه🔗

پروژه اولیه را از اینجا دانلود کنید. ساختار این پروژه به شرح زیر است:

blog
├── app
│   ├── migrations
│   │   ├── __init__.py
│   │   └── 0001_initial.py
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── models.py
│   ├── urls.py
│   ├── serializers.py
│   ├── permissions.py
│   └── views.py
├── Blog
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── manage.py
└── requirements.txt
Plain text

جزئیات🔗

در فایل models.py دو مدل به شرح زیر وجود دارد:

۱. مدل Post شامل فیلدهای زیر:

  • نویسنده :‌ owner
  • عنوان :‌‌ title
  • متن پست :‌ body
  • زمان انتشار پست :‌ created
  • زمان ویرایش پست :‌ updated

۲. مدل Comment شامل فیلدهای زیر:

  • نویسنده :‌ owner
  • متن کامنت : body
  • پست مربوطه : post
  • زمان انتشار کامنت :‌ created
  • زمان ویرایش کامنت : updated

در فایل views.py چهار view به شرح زیر وجود دارد:

۱. کلاس PostList

GET: لیست تمام پست ها را به صورت یک خروجی JSON به فرمت زیر بر می گرداند.

[
    {
        "title": "test",
        "body": "test_body",
        "created": "2018-07-18T11:27:40.074000Z",
        "owner": "admin"
    },
    {
        "title": "test",
        "body": "test_body",
        "created": "2018-07-18T11:28:00.152000Z",
        "owner": "test_author"
    },
    ...
]
JSON

POST: عنوان و متن پست را به عنوان ورودی به صورت JSON می پذیرد و در صورتی که کاربر از قبل لاگین کرده باشد یک پست جدید به نام این کاربر می سازد.

۲. کلاس PostDetail

GET: جزئیات یک پست را به صورت یک خروجی JSON به فرمت زیر بر می گرداند. لیستی از لینک‌ کامنت‌های یک پست نیز در این خروجی قرار دارد.

{
    "title": "test",
    "body": "test_body",
    "created": "2018-07-18T11:26:53.044000Z",
    "updated": "2018-07-18T11:26:53.044000Z",
    "owner": "admin",
    "comment_set": [
        "http://localhost:8000/api/comments/1/",
        "http://localhost:8000/api/comments/10/"
    ]
}
JSON

PUT: عنوان و متن پست را به عنوان ورودی به صورت JSON می پذیرد و در صورتی که کاربر مالک پست و یا ادمین باشد پست را ویرایش می کند.

DELETE: در صورتی که کاربر مالک پست و یا ادمین باشد پست را حذف می کند.

۳. کلاس CommentDetail

GET: جزئیات یک کامنت را به صورت یک خروجی JSON به فرمت زیر بر می گرداند. لینک پست مربوطه نیز در این خروجی قرار دارد.

{
    "post": "http://localhost:8000/api/posts/1/",
    "owner": "hamid",
    "body": "test_body",
    "created": "2018-07-18T11:28:47.400000Z",
    "updated": "2018-07-18T11:28:47.401000Z"
}
JSON

PUT: متن کامنت را به عنوان ورودی به صورت JSON می پذیرد و در صورتی که کاربر مالک کامنت و یا ادمین باشد کامنت را ویرایش می کند.

DELETE: در صورتی که کاربر مالک کامنت و یا ادمین باشد کامنت را حذف می کند.

۴. کلاس AddComment

POST: متن کامنت را به عنوان ورودی به صورت JSON می پذیرد و در صورتی که کاربر از قبل لاگین کرده باشد یک کامنت جدید به نام این کاربر و برای پست انتخاب شده می سازد.

اما کارهایی که شما باید تو این پروژه انجام بدید:

شما باید در دو فایل serializers.py و permissions.py کلاس هایی که در این view ها استفاده شده و پیاده سازی نشده اند را طوری پیاده سازی کنید که view ها طبق توضیحات داده شده عمل کنند.

نکات🔗

  • شما تنها مجاز به تغییر در app/serializers.py و app/permissions.py هستید. اگر تغییری در سایر فایل‌ها ایجاد کنید، این تغییرات نادیده گرفته خواهد شد.
  • در هر بخشی از پروژه که view ها یک ورودی به فرمت json می‌پذیرند،‌ منظور فرمتی به صورت زیر است:
{
  "title": "test",
  "body": "test_body"
}
JSON

آنچه باید آپلود کنید🔗

  • پس از اعمال تغییرات، کل پروژه را Zip کرده و ارسال کنید.
  • نام فایل Zip اهمیت ندارد.
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.