【效能平台】登录接口开发以及JWT token认证机制(一) |
您所在的位置:网站首页 › 后端获取token › 【效能平台】登录接口开发以及JWT token认证机制(一) |
1、创建子应用:users
python manage.py startapp users
2、注册子应用
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'corsheaders', # 同源策略
'rest_framework',
'drf_yasg', # 生成接口文档子应用
'projects',
'interfaces',
'django_filters', # DRF过滤器子应用
'users',
]
3、采用JWT TOKEN认证
a、下载djangorestframework-jwt pip install djangorestframework-jwtb、settings.py文件中指定使用jwt Token认证类 REST_FRAMEWORK = { # 指定搜索引擎类 'DEFAULT_FILTER_BACKENDS': ['rest_framework.filters.SearchFilter', 'rest_framework.filters.OrderingFilter', ], # 'DEFAULT_FILTER_BACKENDS':['django_filters.rest_framework.DjangoFilterBackend'], # 'SEARCH_PARAM': 'se', # 指定分页引擎类 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', 'PAGE_SIZE': 3, # 指定用于支持coreapi的Schema 'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema', # 指定使用的认证类 # a、在全局指定默认的认证类(认证方式) 'DEFAULT_AUTHENTICATION_CLASSES': [ # 1、指定jwt token认证 'rest_framework_jwt.authentication.JSONWebTokenAuthentication', 'rest_framework.authentication.SessionAuthentication', 'rest_framework.authentication.BasicAuthentication', ], } 4、配置路由,可以使用用户名和密码进行认证全局路由 urlpatterns = [ path('admin/', admin.site.urls), re_path('',include('projects.urls')), path('docs/',include_docs_urls(title='接口测试平台API文档',description='这个是接口平台的文档')), re_path(r'^swagger(?P\.json|\.yaml)$', schema_view.without_ui(cache_timeout=0), name='schema-json'), # # 指定token失效时间为1天 'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1), # 使用自己的jwt_response_payload_handler,目的是响应结果中可以返回用户名和id 'JWT_RESPONSE_PAYLOAD_HANDLER': 'utils.handle_jwt_response.jwt_response_payload_handler', } 6、测试: 7、现在又一个问题,当全局设置权限时:当我访问注册和登录功能时,会限制去访问;但是登录和注册不需要去限制;解决办法:不在全局设置权限,去对应类视图中设置权限 1、在继承了APIView的类视图中,可以使用permission_classes类属性指定权限类,值为列表,可以添加多个权限类,优先级最高。 2、在继承了APIView的类视图中,可以使用authentication_classes类属性指定认证类(一般为token认证),值为列表,可以添加多个权认证类。优先级高于全局,一般无需在特定的类视图中指定。 3、在settings.py中指定限流类,如果对特定的接口指定限流,那么在特定的类视图中设置throttle_classes = [] REST_FRAMEWORK = { ...... 'DEFAULT_THROTTLE_CLASSES': [ 'rest_framework.throttling.AnonRateThrottle', 'rest_framework.throttling.UserRateThrottle' ], 'DEFAULT_THROTTLE_RATES': { 'anon': '100/day', # 匿名用户 'user': '1000/day' } } class ProjectsViewSet(viewsets.ModelViewSet): ''' list: 获取项目列表数据 retrieve: 获取项目详情数据 update: 更新项目信息 names: 获取项目名称 ''' queryset = Projects.objects.all() serializer_class = ProjectsSerializer filter_backends = [filters.SearchFilter, filters.OrderingFilter, DjangoFilterBackend] search_fields = ['name', 'leader', 'id'] ordering_fields = ['name', 'leader', 'id'] filterset_fields = ['name', 'leader'] pagination_class = PageNumberPagination permission_classes = [ permissions.IsAuthenticated ] |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |