标签:赋值 form 作用 返回 ica get err res 实例
执行APIView的方法,APIView返回View中的view函数,然后调用的dispatch方法
执行self.initial方法之前是各种赋值,包括request的重新封装赋值,下面是路由的分发
version版本信息赋值给了 request.version 版本控制方案赋值给了 request.versioning_scheme
其实这个版本控制方案~就是我们配置的版本控制的类~~
也就是说,APIView通过这个方法初始化自己提供的组件~~
框架提供的哪些版本的控制方法在rest_framework.versioning里
REST_FRAMEWORK = {
# 默认使用的版本控制类
'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning',
# 允许的版本
'ALLOWED_VERSIONS': ['v1', 'v2'],
# 版本使用的参数名称
'VERSION_PARAM': 'version',
# 默认使用的版本
'DEFAULT_VERSION': 'v1',
}
urlpatterns = [
url(r"^versions", MyView.as_view()),
url(r"^(?P<version>[v1|v2]+)/test01", TestView.as_view()),
]
class TestView(APIView):
def get(self, request, *args, **kwargs):
print(request.versioning_scheme)
ret = request.version
if ret == "v1":
return Response("版本v1的信息")
elif ret == "v2":
return Response("版本v2的信息")
else:
return Response("根本就匹配不到这个路由")
作用
由于客户端每次给服务端发请求,http是无状态的,导致每次都是新的请求
服务端要对每次来的请求进行认证,查看用户是否登录,以及登录的是谁
以往是通过加装饰器,或者在中间件来进行认证,但是DRF给我们提供了
执行APIView的方法,APIView返回View中的view函数,然后调用的dispatch方法,然后执行initial方法
点击perform_authentication方法
这里的request是封装之后的request,所有要在Request的实例中
点击查看
model.py 简单写一些字段,
class UserInfo(models.Model):
username = models.CharField(max_length=32)
token = models.UUIDField()
view.py
class UserView(APIView):
def post(self, request, *args, **kwargs):
username = request.data["username"]
UserInfo.objects.create(username=username, token=uuid.uuid4())
return Response("注册成功")
开始做认证
先写一个认证类
# 注意我们这个认证的类必须实现的方法以及返回值
class MyAuth(BaseAuthentication):
def authenticate(self, request):
request_token = request.query_params.get("token", None)
if not request_token:
raise AuthenticationFailed({"code": 1001, "error": "缺少token"})
token_obj = UserInfo.objects.filter(token=request_token).first()
if not token_obj:
raise AuthenticationFailed({"code": 1001, "error": "无效的token"})
return token_obj.username, token_obj
视图级别的认证
class TestAuthView(APIView):
authentication_classes = [MyAuth, ]
def get(self, request, *args, **kwargs):
return Response("测试认证")
全局认证
REST_FRAMEWORK = {
# 默认使用的版本控制类
'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning',
# 允许的版本
'ALLOWED_VERSIONS': ['v1', 'v2'],
# 版本使用的参数名称
'VERSION_PARAM': 'version',
# 默认使用的版本
'DEFAULT_VERSION': 'v1',
# 配置全局认证
'DEFAULT_AUTHENTICATION_CLASSES': ["BRQP.utils.MyAuth", ]
}
全局认证必须认证完成才会执行视图中的方法
标签:赋值 form 作用 返回 ica get err res 实例
原文地址:https://www.cnblogs.com/yuncong/p/10129005.html