如何在Django中将URL路由到一个通用方法,然后再传递给实际视图?
如何在Django中将URL路由到一个通用方法,然后再传递给实际视图?
这是我的代码示例:\nurl.py 文件:\n
from rest_framework import routers from view_user import user_signup, user_login router = routers.DefaultRouter() urlpatterns = [ url(r'^api/v1/user_signup', csrf_exempt(user_signup)), url(r'^api/v1/user_login', csrf_exempt(user_login)) ]
\nview_user.py 文件:\n
def user_signup(request): try: if request.method == 'POST': json_data = json.loads(request.body) return JsonResponse(result, safe=False) except Exception as e: logger.error("在 user 方法中发生错误:%s", e)
\n所以,当我访问这个链接:http://myserver/api/v1/user_signup \n它会调用 view_user.py 文件中的 \"user_signup\" 方法。 \n但是我希望在进入 user_signup 方法之前能够对请求进行验证。我希望对所有方法(例如:user_signup、user_login 等)收到的请求进行验证。
在Django中,有一个问题是如何在将URL传递给实际视图之前将其路由到一个公共方法。这个问题的出现的原因是因为用户想要在所有请求到达Django之前进行验证。解决这个问题的方法有两种:使用装饰器或编写中间件。
使用装饰器的方法是在相关的视图上注释一个包含所需逻辑的装饰器,这样在调用视图之前可以执行装饰器中的逻辑。用户可以参考Python装饰器的文档和如何在Django中编写自定义装饰器的问题。
如果用户想要在所有请求上执行验证,而不管关联的视图如何,那么应该考虑编写一个中间件。中间件是Django中处理请求和响应的一种方式。用户可以参考如何在Django中设置自定义中间件的问题。需要注意的是,在Django 1.10版本中,有一种新的创建自定义中间件的样式,根据settings.py的设置可能不向后兼容。
总结起来,用户可以使用装饰器或中间件来解决在将URL传递给实际视图之前将其路由到公共方法的问题。使用装饰器时,用户需要在相关的视图上添加装饰器,而使用中间件时,用户需要编写一个中间件来处理请求和响应。无论选择哪种方法,都可以在请求到达Django之前执行验证逻辑。