authenction

This commit is contained in:
caoqianming 2020-03-25 09:51:30 +08:00
parent 1a2cc00aab
commit 6ecd93bfb1
8 changed files with 60 additions and 49 deletions

View File

@ -45,7 +45,7 @@
<view class="weui-article__h2">正确答案是{{tm_current.right}},你的答案是{{tm_current.user_answer}}</view> <view class="weui-article__h2">正确答案是{{tm_current.right}},你的答案是{{tm_current.user_answer}}</view>
<view class="weui-article__title"> <view class="weui-article__title">
<span style="color:blue">解析: </span> <span style="color:blue">解析: </span>
<span wx:if="{{tm_current.resoluation != null}}">{{tm_current.resoluation}}</span> <span wx:if="{{tm_current.resolution != null}}">{{tm_current.resolution}}</span>
<span wx:else>无</span> <span wx:else>无</span>
</view> </view>
</view> </view>

View File

@ -45,7 +45,7 @@
<view class="weui-article__h2">正确答案是{{currentTm.right}},你的答案是{{currentTm.user_answer}}</view> <view class="weui-article__h2">正确答案是{{currentTm.right}},你的答案是{{currentTm.user_answer}}</view>
<view class="weui-article__title"> <view class="weui-article__title">
<span style="color:blue">解析: </span> <span style="color:blue">解析: </span>
<span wx:if="{{currentTm.resoluation != null}}">{{currentTm.resoluation}}</span> <span wx:if="{{currentTm.resolution != null}}">{{currentTm.resolution}}</span>
<span wx:else>无</span> <span wx:else>无</span>
</view> </view>
</view> </view>

View File

@ -41,7 +41,7 @@
<view class="weui-article__h2">正确答案是{{tm_current.right}},你的答案是{{tm_current.user_answer}}</view> <view class="weui-article__h2">正确答案是{{tm_current.right}},你的答案是{{tm_current.user_answer}}</view>
<view class="weui-article__title"> <view class="weui-article__title">
<span style="color:blue">解析: </span> <span style="color:blue">解析: </span>
<span wx:if="{{tm_current.resoluation != null}}">{{tm_current.resoluation}}</span> <span wx:if="{{tm_current.resolution != null}}">{{tm_current.resolution}}</span>
<span wx:else>无</span> <span wx:else>无</span>
</view> </view>
</view> </view>

View File

@ -41,7 +41,7 @@
<view class="weui-article__h2">正确答案是{{tm_current.question.right}},你的答案是{{tm_current.user_answer}}</view> <view class="weui-article__h2">正确答案是{{tm_current.question.right}},你的答案是{{tm_current.user_answer}}</view>
<view class="weui-article__title"> <view class="weui-article__title">
<span style="color:blue">解析: </span> <span style="color:blue">解析: </span>
<span wx:if="{{tm_current.question.resoluation != null}}">{{tm_current.question.resoluation}}</span> <span wx:if="{{tm_current.question.resolution != null}}">{{tm_current.question.resolution}}</span>
<span wx:else>无</span> <span wx:else>无</span>
</view> </view>
</view> </view>

View File

@ -0,0 +1,6 @@
from rest_framework.permissions import IsAuthenticated
class IsConsumerAuthenticated(IsAuthenticated):
def has_permission(self, request, view):
return bool(request.user)

View File

@ -9,6 +9,7 @@ from rest_framework import status
from django_filters.rest_framework import DjangoFilterBackend from django_filters.rest_framework import DjangoFilterBackend
from openpyxl import Workbook, load_workbook from openpyxl import Workbook, load_workbook
import requests import requests
from rest_framework_jwt.authentication import JSONWebTokenAuthentication
from rest_framework_jwt.serializers import jwt_encode_handler from rest_framework_jwt.serializers import jwt_encode_handler
import json import json
import random import random
@ -22,6 +23,7 @@ import warnings
from utils.custom import CommonPagination from utils.custom import CommonPagination
from rbac.permission import RbacPermission from rbac.permission import RbacPermission
from crm.authentication import ConsumerTokenAuthentication from crm.authentication import ConsumerTokenAuthentication
from crm.permission import IsConsumerAuthenticated
from .models import Company, Consumer, PaySubject, SendCode from .models import Company, Consumer, PaySubject, SendCode
from .serializers import CompanySerializer, ConsumerSerializer from .serializers import CompanySerializer, ConsumerSerializer
from question.serializers import QuestionSerializer from question.serializers import QuestionSerializer
@ -129,7 +131,7 @@ class ConsumerViewSet(ModelViewSet):
PaySubject.objects.get_or_create(consumer = instance, subject__id=i, defaults={'consumer':instance,'subject':Questioncat.objects.get(id=i)}) PaySubject.objects.get_or_create(consumer = instance, subject__id=i, defaults={'consumer':instance,'subject':Questioncat.objects.get(id=i)})
return Response(serializer.data) return Response(serializer.data)
@action(methods=['get'], detail=False, permission_classes=[], authentication_classes=[ConsumerTokenAuthentication], @action(methods=['get'], detail=False, permission_classes=[IsConsumerAuthenticated], authentication_classes=[ConsumerTokenAuthentication],
url_path='subjectpaid', url_name='subject_paid') url_path='subjectpaid', url_name='subject_paid')
def has_paid(self, request): def has_paid(self, request):
""" """
@ -156,7 +158,7 @@ class ConsumerViewSet(ModelViewSet):
else: else:
return Response({'error':result['data']}) return Response({'error':result['data']})
@action(methods=['post','delete','get'], detail=False, permission_classes=[], authentication_classes=[ConsumerTokenAuthentication], @action(methods=['post','delete','get'], detail=False, permission_classes=[IsConsumerAuthenticated], authentication_classes=[ConsumerTokenAuthentication],
url_path='collects', url_name='create_collects') url_path='collects', url_name='create_collects')
def collects(self, request): def collects(self, request):
''' '''

View File

@ -141,6 +141,7 @@ STATIC_ROOT = os.path.join(BASE_DIR,'static')
REST_FRAMEWORK = { REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [ 'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework_jwt.authentication.JSONWebTokenAuthentication', 'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
'rest_framework.authentication.BasicAuthentication',
], ],
'DEFAULT_PERMISSION_CLASSES':[ 'DEFAULT_PERMISSION_CLASSES':[
'rest_framework.permissions.IsAuthenticated', 'rest_framework.permissions.IsAuthenticated',
@ -150,6 +151,8 @@ REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'], 'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'],
# 指定用于支持coreapi的Schema # 指定用于支持coreapi的Schema
'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema', 'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
'UNAUTHENTICATED_USER': None,
'UNAUTHENTICATED_TOKEN': None,
} }
JWT_AUTH = { JWT_AUTH = {

View File

@ -21,55 +21,55 @@ class CommonPagination(PageNumberPagination):
""" """
page_size = 10 page_size = 10
page_size_query_param = 'limit' page_size_query_param = 'limit'
def paginate_queryset(self, queryset, request, view=None): # def paginate_queryset(self, queryset, request, view=None):
""" # """
重写该方法,确保post请求也可分页 # 重写该方法,确保post请求也可分页
""" # """
page_size = self.get_page_size(request) # page_size = self.get_page_size(request)
if not page_size: # if not page_size:
return None # return None
paginator = self.django_paginator_class(queryset, page_size) # paginator = self.django_paginator_class(queryset, page_size)
if self.page_query_param in request.query_params: # if self.page_query_param in request.query_params:
page_number = request.query_params.get(self.page_query_param) # page_number = request.query_params.get(self.page_query_param)
elif self.page_query_param in request.data: # elif self.page_query_param in request.data:
page_number = request.data.get(self.page_query_param) # page_number = request.data.get(self.page_query_param)
else: # else:
page_number = 1 # page_number = 1
if page_number in self.last_page_strings: # if page_number in self.last_page_strings:
page_number = paginator.num_pages # page_number = paginator.num_pages
try: # try:
self.page = paginator.page(page_number) # self.page = paginator.page(page_number)
except InvalidPage as exc: # except InvalidPage as exc:
msg = self.invalid_page_message.format( # msg = self.invalid_page_message.format(
page_number=page_number, message=str(exc) # page_number=page_number, message=str(exc)
) # )
raise NotFound(msg) # raise NotFound(msg)
if paginator.num_pages > 1 and self.template is not None: # if paginator.num_pages > 1 and self.template is not None:
# The browsable API should display pagination controls. # # The browsable API should display pagination controls.
self.display_page_controls = True # self.display_page_controls = True
self.request = request # self.request = request
return list(self.page) # return list(self.page)
def get_page_size(self, request): # def get_page_size(self, request):
if self.page_size_query_param: # if self.page_size_query_param:
try: # try:
if self.page_size_query_param in request.query_params: # if self.page_size_query_param in request.query_params:
page_size = request.query_params.get(self.page_size_query_param) # page_size = request.query_params.get(self.page_size_query_param)
else: # else:
page_size = request.data.get(self.page_size_query_param) # page_size = request.data.get(self.page_size_query_param)
return _positive_int( # return _positive_int(
page_size, # page_size,
strict=True, # strict=True,
cutoff=self.max_page_size # cutoff=self.max_page_size
) # )
except (KeyError, ValueError): # except (KeyError, ValueError):
pass # pass
return self.page_size # return self.page_size
class TreeSerializer(serializers.Serializer): class TreeSerializer(serializers.Serializer):