zoukankan      html  css  js  c++  java
  • 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方法做了分发)

    本博客仅为本人学习过程中的记录,欢迎一起交流经验。
  • 相关阅读:
    javaBean实体包区分
    先后天八卦配太极图
    mysql表连接
    关于解决问题方法论的思考
    Python基础综合练习
    大数据概述
    编译原理
    词法分析
    组合数据类型练习
    词法分析器实验报告
  • 原文地址:https://www.cnblogs.com/panpanda/p/15099896.html
Copyright © 2011-2022 走看看