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<contest_id>[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只需要在一个文件里面修改。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 今天,我们对列表的一些相关知识进行了补充: 1.列表赋值 a.直接使用一个列表变量给另一个列表变量赋值,赋的是地址...
    说故事的人_52f7阅读 277评论 0 0
  • 计算机由硬件和软件构成硬件的五大部件:-运算器-控制器(运算器+控制器 = 中央处理器(CPU))-存储器 - 内...
    雨雨雨90阅读 497评论 0 0
  • 声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互...
    凯哥学堂阅读 333评论 0 0
  • 1、感恩父母给予我生命。 2、感恩祖辈将我养育。 3、感恩母亲、祖母为家的巨大付出。 4、感恩亲友们对我家的照顾。...
    朱晓军阅读 275评论 0 0
  • 远海 平静的海 远处的帆 时而荡漾在海边 时而消失在天边 人无法看透这一片蔚蓝 因为海总是那么深邃 而梦却是那么的...
    岸边的鱼哥哥阅读 153评论 0 1