Django-filter: рд╕рднреА DRF рджреГрд╢реНрдп рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдлрд╝рд┐рд▓реНрдЯрд░ рдлрд╝реАрд▓реНрдб рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдЕрдиреБрдордд рд╣реИрдВред рдпрд╣ CoreAPI рд╕реНрдХреАрдорд╛ рдХреЗ рд╕рд╛рде рдЦрд┐рд▓рд╡рд╛рдбрд╝ рдХрд░рддрд╛ рд╣реИред

рдХреЛ рдирд┐рд░реНрдорд┐рдд 16 рдордИ 2018  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: carltongibson/django-filter

DRF рдФрд░ DjangoFilterBackend рд╕рдХреНрд╖рдо рдХреЗ рд╕рд╛рде CoreAPI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдо рдореЗрдВ рднреА рдПрдХ рдмрдирд╛рдиреЗ, рдЕрдкрдбреЗрдЯ рдпрд╛ рдЖрдВрд╢рд┐рдХ_рдЕрдкрдбреЗрдЯ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рдлрд╝реАрд▓реНрдб рдХреЛ рдореИрдк рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рд╣рдХ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг

рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрдиреБрд░реЛрдз рд╣реИ рдЬреЛ рдПрдХ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдкреБрд╕реНрддрдХ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдирд╛рдо рднреА рд╣рдорд╛рд░реЗ рдореЙрдбрд▓ рдкрд░ рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдлрд╝реАрд▓реНрдб рд╣реИ:

# book views
class BookViewSet():
    filter_fields = ('name',)
   # ...
// schema
client.action('book', 'create', { 'name': 'My Awesome Book' });

рдпрд╣ URL рдкрд░рдо рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдореЗрдВ рджреЛрдиреЛрдВ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдиреБрд░реЛрдз рдмрдирд╛рдПрдЧрд╛ред рдпрд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рд╣реИред

POST /api/book?name=My%20Awesome%20Book

name=My Awesome Book

рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди

рд╣рдордиреЗ рдЕрдкрдиреЗ рдбреАрдЖрд░рдПрдл рдлрд╝рд┐рд▓реНрдЯрд░ рдмреИрдХрдПрдВрдб рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╕реНрдЯрдо рдУрд╡рд░рд░рд╛рдЗрдб рдкрд░ рдЗрдВрдЧрд┐рдд рдХрд░рдХреЗ рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рдХреЛрдб рдореЗрдВ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ рд╣реИ:

class OnlyFilterOnReadDjangoFilterBackend(DjangoFilterBackend):
    """ A filter backend that only allows for filtering by properties on
    actions deemed as safe. This means that create, update, and partial_update
    actions will not provide filter options.
    """
    SAFE_ACTIONS = ('list', 'retrieve')

    def get_schema_fields(self, view):
        if view.action in self.SAFE_ACTIONS:
            return super().get_schema_fields(view)
        return []

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд╣рд╛рдп @Sonictherocketmanред рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдПрдХ рдмрдЧ рд╣реИ - рдпрд╣ рдЕрдиреБрд░реЛрдз рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдХреЗ рдмреАрдЪ рдЙрдкрдпреБрдХреНрдд рд░реВрдк рд╕реЗ рдЕрдВрддрд░ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХреЗрд╡рд▓ рдЧреИрд░-рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рд╕рд╣реА рдирд╣реАрдВ рд╣реИред рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдЖрдзрд╛рд░ рдХреНрд╡реЗрд░реАрд╕реЗрдЯ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдЬрд┐рд╕рдХреЗ рд╡рд┐рд░реБрджреНрдз рдПрдХ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдореИрдВ рдЗрд╕реЗ рдЕрднреА рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛, рдмрд╕ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдПред

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╣рд╛рдп @Sonictherocketmanред рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдПрдХ рдмрдЧ рд╣реИ - рдпрд╣ рдЕрдиреБрд░реЛрдз рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдХреЗ рдмреАрдЪ рдЙрдкрдпреБрдХреНрдд рд░реВрдк рд╕реЗ рдЕрдВрддрд░ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХреЗрд╡рд▓ рдЧреИрд░-рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рд╕рд╣реА рдирд╣реАрдВ рд╣реИред рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдЖрдзрд╛рд░ рдХреНрд╡реЗрд░реАрд╕реЗрдЯ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдЬрд┐рд╕рдХреЗ рд╡рд┐рд░реБрджреНрдз рдПрдХ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдореИрдВ рдЗрд╕реЗ рдЕрднреА рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛, рдмрд╕ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдПред

рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдореБрджреНрджрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреНрд░рд┐рдпрд╛рдПрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рдкреНрд░рд╢реНрдиреЛрдВ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╕рд╛рдзрди рдХреЛ рд▓рд┐рдЦрдирд╛) рдкрд░ рдХреЛрдИ рд╕рдордЭ рдирд╣реАрдВ рд▓реЗрддреА рд╣реИрдВ рдФрд░ рд╕реНрдХреАрдорд╛ рдХреЛ рдЖрдИрдПрдордУ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЙрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдпрджрд┐ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рддреНрд╡рд░рд┐рдд рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рдЗрд╕ рдкрд░ рдЖрдкрдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреНрдпрд╛ рд╣реИрдВ, рдЗрд╕рдореЗрдВ рдореБрдЭреЗ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИред

рдХрдореЛрдмреЗрд╢, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рддрдХрдиреАрдХ рд╕реЗ рдмрд╛рд╣рд░ _automagic_ рдХреЛрдб рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдЗрдЪреНрдЫрд╛рдУрдВ рд╕реЗ рдпрд╣рд╛рдВ рд╕реАрдорд┐рдд рд╣реИрдВ (рдЗрд╕рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ)ред

рд╕реНрдХреАрдорд╛ (рдХрд┐рд╕реА рднреА рдЙрдкрд▓рдмреНрдз рдкреНрд░рд╛рд░реВрдк рдореЗрдВ) рдХреЗ рд╕рд╛рде рд╣рдо (рдЕрднреА рддрдХ) рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╣рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, CoreAPI рдХреЗ рд╕рд╛рде, рд╣рдо рдЕрднреА рддрдХ рдПрдХ рддрд┐рдерд┐ рд╕реАрдорд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдПрдХ рд╕рд╛рде рд╕рдореВрд╣рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИрдВ рдХрд┐ рд╡реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред (рд╣рдо рд╣рд╛рде рд╕реЗ рд╕реНрдХреАрдорд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рднреА рдмрд╣реБрдд рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЛрдИ рднреА рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред)

рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЬреИрд╕реЗ рд╣реА рдпрд╣ рдЯреВрд▓рд┐рдВрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реБрдзрд░ рдЬрд╛рдПрдЧрд╛ред

рдХрд┐ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рдкрдВрдХреНрддрд┐:

client.action('book', 'create', { 'name': 'My Awesome Book' });

рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдореВрд░реНрдд рд▓реАрдХрд┐рдВрдЧ рд╣реИред рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдЕрдиреБрд░реЛрдз рдХреЛ _by-hand_ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдХреНрд╡реЗрд░реА рдкреИрд░рд╛ рдФрд░ рдмреЙрдбреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ред

рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдпрд╣рд╛рдВ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рджред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

madelyneriksen picture madelyneriksen  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jnegro picture jnegro  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

blueyed picture blueyed  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gotexis picture gotexis  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

loganknecht picture loganknecht  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ