• Django函数视图与类视图


    一、函数视图

    1、在子应用的views.py文件中定义

    2、必须传递参数request

    3、路由条目配置:路由与函数视图引用 映射

    示例:

    def index(request):
        """
        :param request: WSGI对象,自动传递
        :return: HttpResponse对象
        """
        print(request)
        print(type(request))
        # 查看继承关系
        print(type(request).__mro__)
        return HttpResponse("hi~ django.")
    
    
    def get_project(request, pk):
        return HttpResponse(f"project{pk}")
    
    
    def project_name(request, name):
        return HttpResponse(f"project: {name}")

    二、类视图

    1、在子应用的views.py文件中定义

    2、必须继承View或View的子类

    3、类视图中定义的视图方法名必须与请求方法名一一对应,即get-->GET   post-->POST   put-->PUT    patch-->PATCH ...

    4、路由条目的配置:路由与类视图引用.as_view() 映射

    示例:

    class ProjectsView(View):
    
        def get(self, request, pk):
            data = {
                'id': pk,
                'name': 'xx项目',
                'leader': 'ppd'
            }
            data2 = [
                {
                    'id': pk,
                    'name': 'xx项目',
                    'leader': 'ppd'
                },
                {
                    'id': 2,
                    'name': 'xx项目2',
                    'leader': 'ppd2'
                }
            ]
            json_str = json.dumps(data, ensure_ascii=False)
            """
            1、JsonResponse 是 HttpResponse的子类
            2、HttpResponse接收的content必须是str或byte类型
            3、JsonResponse用于返回json数据,接收的data可以是dict或嵌套dict的list,默认是dict
            4、JsonResponse接收的data是list时,必须设置safe=False
            """
            # return HttpResponse(json_str, content_type='application/json')
            # return JsonResponse(data, json_dumps_params={'ensure_ascii': False})
            return JsonResponse(data2, json_dumps_params={'ensure_ascii': False}, safe=False)
    
        def post(self, request, pk):
            return HttpResponse("post")
    
        def put(self, request):
            return HttpResponse("put")
    
        def delete(self, request):
            return HttpResponse("delete")

    路由配置示例:

    urlpatterns = [
        # 1、定义视图函数的路由:path(路由, 视图函数名)
        path('index/', index),
        path('<int:pk>/', get_project),
        re_path(r'^name/(?P<name>w{3})/$', project_name),
        # 2、定义视图类的路由:path(路由, 视图类名.as_view())
        path('project/<int:pk>/', ProjectsView.as_view())
    ]

    三、函数视图与类视图对比:

    1、函数视图优点:好理解;缺点:代码可读性与复用性不佳

    2、类视图优点:可读性与复用性更好;不同的请求方式用不同的方法呈现(dispatch方法做了分发)

    本博客仅为本人学习过程中的记录,欢迎一起交流经验。
  • 相关阅读:
    JProfiler9安装 监控Tomcat
    linux 大量的TIME_WAIT解决办法(转)
    C2 CompilerThread0 如果抓到的java线程dump里占用CPU最高的线程是这个,99%可能是因为服务重启了
    什么是多线程,锁,死锁,怎么避免死锁(转)
    Jmeter BeanShell 引用变量报错jmeter.util.BeanShellInterpreter: Error invoking bsh method: eval Parse error at line 14, column 181 : Error or number too big for integer
    小缘的游戏
    Bad Hair Day
    779A Pupils Redistribution
    Stripies
    校赛-种树
  • 原文地址:https://www.cnblogs.com/panpanda/p/15099896.html
Copyright © 2020-2023  润新知