标签:fir ever 全局配置 执行 serial ons 数据 使用 com
请求分发之前先执行initial方法,其中的参数request是封装后的request对象
在initial(request)的外层有异常捕获,即使认证,权限,节流raise错误也无关紧要。这些组件就是通过raise错误来表示认证失败等
如:/users?version=v1
settings的配置
REST_FRAMEWORK = {
'DEFAULT_VERSION': 'v1', # 默认版本
'ALLOWED_VERSIONS': ['v1', 'v2'], # 允许的版本
'VERSION_PARAM': 'version' # URL中获取值的key
}
urls.py
from django.conf.urls import url, include
from .views import UserView
urlpatterns = [
url(r'^user/', UserView.as_view(),name='user'),
]
views.py
class UserView(APIView):
versioning_class = QueryParameterVersioning
def get(self, request, *args, **kwargs):
# 获取版本
print(request.version)
# 获取版本管理的类
print(request.versioning_scheme)
# 反向生成URL
reverse_url = request.versioning_scheme.reverse('user', request=request)
print(reverse_url)
return Response('ok')
如/users/v1/
urls.py
from django.conf.urls import url, include
from .views import UserView
urlpatterns = [
url(r'^user/(?P<version>[v1|v2]+)/', UserView.as_view(),name='user'),
]
views.py
class UserView(APIView):
versioning_class = URLPathVersioning
def get(self, request, *args, **kwargs):
# 获取版本
print(request.version)
# 获取版本管理的类
print(request.versioning_scheme)
# 反向生成URL
reverse_url = request.versioning_scheme.reverse('user', request=request)
print(reverse_url)
return Response('ok')
一般使用第二种方式
全局配置
REST_FRAMEWORK = {
"DEFAULT_VERSIONING_CLASS":"rest_framework.versioning.URLPathVersioning",
"DEFAULT_VERSION":'v1',
"ALLOWED_VERSIONS":['v1','v2'],
"VERSION_PARAM":'version',
}
什么是认证?认证就是认证身份,身份就是你是不是网站的注册用户还是游客。在登陆的时候,登陆成功给浏览器token,浏览器拿到token来并在数据库检测成功说明认证通过。
vue.utils.auth.py
from rest_framework.authentication import BaseAuthentication
class MyAuthentication(BaseAuthentication):
def authenticate(self, request):
token = request.GET.get('token')
user_token = UserToken.objects.filter(token=token).first()
if user_token:
return user_token.user.name, token
else:
raise exceptions.AuthenticationFailed('token error')
上述返回的元组(user_token.user.name, token)
会赋值给request.user和request.auth
views.py
class UserView(ModelViewSet):
authentication_classes = [MyAuthentication]
queryset = User.objects.all()
serializer_class = UserSerializer
全局使用
REST_FRAMEWORK={
"DEFAULT_AUTHENTICATION_CLASSES":["vue.utils.auth.Authentication",]
}
认证失败
因为self.user = api_settings.UNAUTHENTICATED_USER()
,能加括号要么是函数,要么是对象
REST_FRAMEWORK = {
"UNAUTHENTICATED_USER":lambda :'xxx'
}
标签:fir ever 全局配置 执行 serial ons 数据 使用 com
原文地址:https://www.cnblogs.com/longyunfeigu/p/9385396.html