اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

تخصيص فئة ترقيم الصفحات او custom pagination
لإنشاء فئة ترقيم صفحات مخصصة ، يجب ان يكون لديك ninja.pagination.PaginationBase وعمل override لفئات مخطط Input و Output ودالة paginate_queryset (self ، queryset ، request ، ** params):

  • مخطط الإدخال (Input) هو class مخطط يصف المعلمات التي يجب تمريرها إلى الفاصل الزمني الخاص بك (على سبيل المثال ، رقم الصفحة أو قيم الحد / الإزاحة).
  • يصف مخطط الإخراج مخططًا لإخراج الصفحة (على سبيل المثال العد / الصفحة التالية / العناصر / إلخ).
  • يتم تمرير  paginate_queryset إلى مجموعة الاستعلام الأولية ويجب أن يُرجع كائنًا قابلًا للتكرار يحتوي فقط على البيانات الموجودة في الصفحة المطلوبة. تقبل هذه الطريقة الوسيطات التالية:

queryset: مجموعة استعلام (أو قابلة للتكرار) تُرجعها وظيفة api
pagination : ترقيم الصفحات
** params: kwargs التي ستحتوي على جميع الوسائط التي تلقتها الوظيفة
مثال:


# نعمل استيراد للمكتبات والفئات
from ninja.pagination import paginate, PaginationBase
from ninja import Schema

# فئة التخصيص 
class CustomPagination(PaginationBase):
    # نعمل تجاوز لفئة الإدخال
    class Input(Schema):
        skip: int


    class Output(Schema):
        items: List[Any] # `items` فئة افتراضية
        total: int
        per_page: int

    def paginate_queryset(self, queryset, pagination: Input, **params):
        skip = pagination.skip
        return {
            'items': queryset[skip : skip + 5],
            'total': queryset.count(),
            'per_page': 5,
        }

# وهنا نقطة النهاية الخاصة بك 
@api.get('/users', response=List[UserSchema])
# وهذا هو المزخرف الذي عملنا له تخصيص
@paginate(CustomPagination)
def list_users(request):
    return User.objects.all()

 

  • 0
نشر

غالبًا ما تكون هناك حالة تحتاج فيها إلى إضافة ترقيم الصفحات إلى جميع views التي تُرجع مجموعات querysets أو list. يمكنك استخدام فئة توجيه مضمنة (RouterPaginated) تقوم تلقائيًا بحقن ترقيم الصفحات لجميع العمليات التي حددت response=List[SomeSchema]:

from ninja.pagination import RouterPaginated

router = RouterPaginated() #انشاء الوظيفة التي تحقن الترقيم


@router.get("/items", response=List[MySchema])  #تطبيق المزخرف على العمليات  
                                             #  التي حددت الاستجابة كقائمة

def items(request):
    return MyModel.objects.all()  #استخراج جمبيع الكائنات

  
  #نفس التطبيق على عملية أخرى
@router.get("/other-items", response=List[OtherSchema])
def ohter_items(request):
    return OtherModel.objects.all()

في هذا المثال ، سيتم تمكين ترقيم الصفحات في كلتا العمليتين.

لتطبيق ترقيم الصفحات على مثيل api الرئيسي ، استخدم وسيطة default_router:

api = NinjaAPI(default_router=RouterPaginated())

 

 

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...