Uso del tipo de frecuencia del día 26
Orden de búsqueda de información de configuración
- Configuración parcial (prioridad) La configuración parcial tiene prioridad sobre la configuración parcial
- Configuración global (segunda prioridad) Configuración global sin configuración predeterminada
- Configuración predeterminada (última) Si no hay una configuración global, vaya a la configuración predeterminada
Uno, el uso del campo de elección en la tabla.
Choice recibe una tupla (se garantiza que el valor es inmutable) y, de manera similar, cada opción también se compone de una tupla ** (valor, display_name) **. Obviamente, display_name se mostrará en la página.
class Book(models.Model):
name = models.CharField(max_length=32)
author = models.ForeignKey(to='Author', on_delete=models.CASCADE)
category = models.CharField(max_length=32, choices=(('1', '历史'), ('2', '政治'), ('3', '语文')))
De forma predeterminada, nuestro campo de categoría solo mostrará el primer tipo en la tupla, que es la cadena 1, 2, 3
{
"id": 1,
"name": "python",
"category": "1",
"author": 1
},
Si queremos obtener el valor correspondiente "Historia", "Política", "Idioma"Espera ... lo usaremos para nosotrosGenerado automáticamente(¡Puede usarlo directamente después de migrar la base de datos!) get_category_display
Entonces podemos usar este método en el serializador.
class BookSerializer(serializers.ModelSerializer):
category = serializers.CharField(source='get_category_display')
class Meta:
model = models.Book
fields = "__all__"
depth = 1
{
"id": 1,
"category": "历史",
"name": "python",
"author": {
"id": 1,
"name": "李二狗",
"address": "南湖大道"
}
},
Dos, el uso de múltiples vistas
En tercer lugar, el uso de la frecuencia
1. Frecuencia personalizada
2. Uso de clasificación incorporada
2.1.1 Uso parcial
Agregue el atributo throttle_class a la clase de vista
throttle_classes = [auth.MyThrottle,]
2.1.2 Uso global
Configure REST_FRAMEWORD = {} en la configuración y agregue pares clave-valor de calificación predeterminada
REST_FRAMEWORK = {
'DEFAULT_THROTTLE_CLASSES':['app01.MyThrottle.MyThrottle',],
}
2.2 Amplíe la clase de frecuencia incorporada
- BaseThrottle: 基 类
- SimpleRateThrottle: vamos a personalizarlo y expandirlo
- AnonRateThrottle: Limita el número de visitas de usuarios anónimos, distingue a los usuarios por dirección IP
- ScopedRateThrottle: Limita la frecuencia de acceso a cada vista, distinguida por dirección IP o ID de usuario
- UserRateThrottle: Limite el número de visitas de usuarios registrados
Los últimos tres son sus restricciones de frecuencia de acceso incorporadas, y el frente es para expandirnos.
2.3 Amplíe la clase de frecuencia incorporada
from rest_framework.throttling import SimpleRateThrottle
class MyThrottle(SimpleRateThrottle):
scope = '外比巴卜'
def get_cache_key(self, request, view):
return self.get_ident(request) # 通过id限制
Luego configuramos en el escenario
REST_FRAMEWORK = {
'DEFAULT_THROTTLE_CLASSES': ['app01.MyThrottle.MyThrottle', ],
'DEFAULT_THROTTLE_RATES': {
'外比巴卜': '5/m'} # key 与我们之前定义scope对应 value 是 次数/天/分/秒
}
2.4 Leer el código fuente
Cinco funciones de filtrado de terceros integradas (segundo enfoque)
1. Filtro
Filtrar los datos de la lista según el campo
Uso de filtros integrados
-
Configurar en la clase de vista
class BookView(GenericAPIView, ListModelMixin): queryset = Book.objects serializer_class = BookSerializer filter_backends = [SearchFilter] search_fields = ('name','id') # 模型表中存在的字段 def get(self, request, *args, **kwargs): return self.list(request, *args, **kwargs)
Proceso de ejecución—> clase SearchFilter—> get_search_fields—> must_call_distinct
Método de consulta
El método heredado por defecto esConsulta difusa, ¡Se consultará cualquier contenido relacionado!
http://127.0.0.1:8000/books/?search=1
Función de filtrado ampliado de terceros
pip install django-filter
La última versión django-filter
se debe mantener django2.2
arriba, si no, se django
instalará la versión predeterminada a la última
Necesitamos encontrarnos a sí mismos a cambio de su django-filter
liberación
class BookView(GenericViewSet, ListModelMixin, CreateModelMixin):
queryset = Book.objects
serializer_class = BookSerializer
filter_backends = [DjangoFilterBackend, ]
filter_fields = ('name', 'id') # 这里的字段不一样了 以前是search_fields
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
La búsqueda también es fácil
127.0.0.1:8000/book/?name=雪山飞狐&id=3
ÉsteModo no difuso, No se puede encontrar la palabra clave.
Seis, función de clasificación
1. Configurar en la clase de vista
filter_backends =[OrderingFilter,] # 可以混合使用
ordering_fields=['id','age'] # 先按照id 再按照年龄排序
Instrucciones
127.0.0.1:8000/book/?ordering=-id
2. Ordenar después de filtrar
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.filters import OrderingFilter
class BookView(GenericViewSet, ListModelMixin, CreateModelMixin):
queryset = Book.objects
serializer_class = BookSerializer
filter_backends = [DjangoFilterBackend, OrderingFilter] # 混合使用
filter_fields = ('name', 'id')
ordering_field = ('id', 'category')
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
utilizar
127.0.0.1:8000/book/?name=雪山飞狐&ordering=-id