0
石墨烯附帶的relay.ConnectionField
實現不默認分頁查詢。 (連接可以選擇使用「first」或「last」分頁)。如果連接有大量節點,那麼這是不實際的。什麼是強制分頁的恰當方式一次不超過100個節點?在石墨烯繼電器中強制分頁。連接字段
石墨烯附帶的relay.ConnectionField
實現不默認分頁查詢。 (連接可以選擇使用「first」或「last」分頁)。如果連接有大量節點,那麼這是不實際的。什麼是強制分頁的恰當方式一次不超過100個節點?在石墨烯繼電器中強制分頁。連接字段
不幸的是,石墨烯不支持默認值。我爲這種情況建立了自己的裝飾器。適當地設置DEFAULT_PAGE_SIZE
和MAX_PAGE_SIZE
。可以調整來從裝飾器本身接收這些值,但是我將它與Django和ergo Django的設置一起使用。
DEFAULT_PAGE_SIZE = 10
MAX_PAGE_SIZE = 100
def limited_pagination(func):
'''
Decorator for limiting the `first` and `last` pagination parameters. Uses
DEFAULT_PAGE_SIZE and MAX_PAGE_SIZE settings. Raises an exception when
values are invalid.
'''
def wrapper(*args, **kwargs):
if 'first' in kwargs and 'last' in kwargs:
raise RuntimeError('Use either `first` or `last`, not both.')
for key in ('first', 'last'):
if key in kwargs:
try:
value = int(kwargs[key])
except ValueError:
raise ValueError('`{}` must be an integer.'.format(key))
if value < 0:
raise ValueError('`{}` must be 0 or greater.'.format(key))
elif value > MAX_PAGE_SIZE:
raise ValueError(
'`{}` must not be greater than {}.'.format(
key, MAX_PAGE_SIZE
)
)
kwargs[key] = value
break # Break out of for loop to skip `else` branch.
else:
kwargs['first'] = DEFAULT_PAGE_SIZE
result = func(*args, **kwargs)
return result
return wrapper
用例:
@limited_pagination
def resolve_whatever(self, info):
return [1, 2, 3, 4, 5]
你是什麼意思?你想要問下兩個實際的球嗎? –