django中urls.py的优化

django项目中,需要在views.py里面定义函数,然后需要在urls.py里面把url和函数名对应起来。但是,其实这个函数的函数名叫什么是不重要的,这样只是多了一层映射而已。

所以,我们可以定义以下的装饰器:

# views.py
from django.conf.urls import url
from django.http import JsonResponse
urlpatterns = []
def register_view(url_pattern, method_name, register_list):
    def decorator(func):
        # url parameter like (?P[0-9]+) is stored in kwargs
        def custom_view(request, *args, **kwargs):
            #check method name
            if request.method.lower() != method_name.lower():
                return JsonResponse({'errors':f"http method {request.method} not allowed "})
            return func(request, *args, **kwargs)

        nonlocal register_list
        register_list += [url(url_pattern, custom_view)]
            
        return custom_view
    return decorator


@register_view(url_pattern=r'aaa', method_name='get', register_list=urlpatterns)
def name_is_not_important(request):
    return JsonResponse({'a':12})

#urls.py
from .view import urlpatterns

也就是说,我们关心的只是一个url对应的函数怎么处理,如此,添加一个view只需要在一个文件里面修改。

你可能感兴趣的:(django中urls.py的优化)