一、使用redis缓存
pip install django-redis
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/0",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"CONNECTION_POOL_KWARGS": {"max_connections": 100},
"DECODE_RESPONSES": True,
"PASSWORD": "",
}
}
}
二、跨域问题解决
pip install django-cors-headers
注册:'corsheaders'
中间件: 'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_METHODS = (
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
'VIEW',
)
CORS_ALLOW_HEADERS = (
'XMLHttpRequest',
'X_FILENAME',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
'Pragma',
)
三、drf内置配置相关
1、drf过滤使用
from rest_framework.filters import BaseFilterBackend
class SearchByName(BaseFilterBackend):
def filter_queryset(self,request,queryset,view):
name = request.GET.get('name')
queryset = queryset.filter(name_startswith = name)
return queryset
class SearchByPrice(BaseFilterBackend):
def filter_queryset(self,request,queryset,view):
price_gt = request.GET.get('price_gt')
price_lt = request.GET.get('price_lt')
queryset = queryset.filter(price__gt = price_gt)
return queryset
from django_filters.filterset import FilterSet
from django_filters import filters
from .models import Course
class CourseFilter(FilterSet):
max_price = filters.NumberFilter(field_name = 'price',lookup_expr='lte')
min_price = filters.NumberFilter(field_name = 'price',lookup_expr='gte')
class Meta:
model = Course
fields = ['course_category','max_price','min_price']
INSTALLED_APPS = [
'django_filters',
]
pip install django-filter
from django_filters.rest_framework import DjangoFilterBackend
class 视图:
filter_backends = [DjangoFilterBackend]
filter_class = CourseFilter
REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',)
}
2、drf排序使用
from rest_framework.filters import OrderingFilter
filter_backends = [OrderingFilter,DjangoFilterBackend]
ordering_fields = ['id','price']
3、drf分页使用
from rest_framework.pagination import PageNumberPagination
class BasicPagination(PageNumberPagination):
page_size = 2
page_query_param = 'page'
page_size_query_param = 'page_size'
max_page_size = 10
pagination_class = BasicPagination
pagination_class = None
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 100
}
GET http://127.0.0.1:8000/students/?page=4
4、drf认证、权限
from rest_framework_jwt.authentication import JSONWebTokenAuthentication
from rest_framework.permissions import IsAuthenticated
authentication_classes = [JSONWebTokenAuthentication, ]
permission_classes = [IsAuthenticated, ]
5、drf频率
REST_FRAMEWORK = {
'DEFAULT_THROTTLE_RATES': {
'sms': '1/m'
}
}
from rest_framework.throttling import SimpleRateThrottle
class SMSThrotting(SimpleRateThrottle):
scope = 'sms'
def get_cache_key(self, request, view):
mobile = request.query_params.get('mobile')
return self.cache_format%{'scope':self.scope,'ident':mobile}
throttle_classes = [throttlings.SMSThrotting,]