Django框架中基本类视图、开发模式、请求参数解析

文章介绍了如何在Django中使用类视图进行功能开发,包括在主应用和子应用的urls.py文件中配置路由,以及如何处理GET、POST、PUT和DELETE等不同HTTP请求。同时,文章讲解了如何返回HttpResponse和JsonResponse,以及参数解析,涉及前后端不分离和分离的开发模式。
摘要由CSDN通过智能技术生成

在子应用的views.py文件中进行类视图的编写

进行类视图编写,需要在主应用及子应用的路由中进行重新配置

主应用的urls.py文件

urlpatterns = [
    # path('admin/', admin.site.urls),
    # path('index/', index),
    # path('index/', views.index),
    # path('get_project/', views.get_project),
    # path('get_project1/', views.get_project1),
    # path('get_project/2/', views.get_project2),

    # path('projects/<int:pk>/', views.get_projects),
    # re_path(r'^projects/(?P<pk>\w{3})/$', views.get_projects),
    # re_path(r'^projects/(?P<pk>\d+)/$', views.get_projects),
    # path('project/put/', views.index),
    # path('project/', include('projects.urls')),
    path('', include('projects.urls')),
]

在子应用的urls.py文件中配置,注意:类视图.as_view()

urlpatterns = [
    # path('get/', views.get_project),
    # path('create/', views.create_project),
    # path('put/', views.put_project),
    # path('delete/', views.delete_project),
    # path('a/', views.delete_project)

    # path('projects/', views.projects),
    # 定义类视图的路由条目
    # a.类视图.as_view()
    path('projects/<int:pk>/', views.ProjectsView.as_view()),
]

类视图及请求参数解析

class ProjectsView(View):
    """
    一、定义类视图
    1.继承View或者View子类
    2.不通的请求方法有相应的方法进行对应
        GET   ->   get
        POST  ->   post
        PUT   ->   put
        DELETE ->  delete
        PATCH  -> patch
    3.每一个处理请求的方法,必须得返回HttpResponse对象或者HttpResponse子类对象
    4.每一个处理请求的方法,第二个参数必须为HttpRequest对象
    """
    def get(self, request, pk):
        project_data = {
            'id': 1,
            'name': 'xxxx项目',
            'leader': '潘潘达'
        }

        project_data_list = [
            {
                'id': 1,
                'name': 'xxxx项目',
                'leader': '潘潘达'
            },
            {
                'id': 2,
                'name': 'yyyy项目',
                'leader': '多喝热水'
            },
            {
                'id': 3,
                'name': 'zzzz项目',
                'leader': '不语'
            }
        ]

        # 5.HttpResponse
        #   a.第一个参数为字符串类型(需要返回到前端的字符串数据)
        #   b.content_type可以指定响应头中的Content-Type参数
        #   c.status可以指定响应状态码
        # json_str = json.dumps(project_data, ensure_ascii=False)
        # return HttpResponse(f"<h1>获取项目{pk}信息</h1>")
        # return HttpResponse(json_str, content_type='application/json', status=201)

        # 6.JsonResponse
        #   a.为HttpResponse子类
        #   b.用于返回json数据
        #   c.第一个参数可以直接传递字典或者嵌套字典的列表
        #   d.默认添加content_type为application/json
        #   e.默认第一个参数只能为字典,如果为嵌套字典的列表,需要设置safe=False
        # return JsonResponse(project_data, json_dumps_params={'ensure_ascii': False}, status=201)
        return JsonResponse(project_data_list, json_dumps_params={'ensure_ascii': False}, status=201, safe=False)

    def post(self, request, pk):
        # 前端参数解析
        # 前端传递参数的方式
        # 1.路径参数
        #   a.在url路径中传递的参数
        #   b.在请求实例方法中,使用关键字参数来接收

        # 2.查询字符串参数
        #   a.url ?后面的key value键值对参数,如:http://www.xxx.com/?key1=value1&key2=value2
        #   b.request.GET获取
        #   c.request.GET返回QueryDict,类似于python中dict类型
        #   d.可以使用['key1']、get('key1'),会返回具体的值,如果有多个相同key的键值对,获取的是最后一个
        #   e.getlist('key1'),获取相同key的多个值,返回list类型

        # 请求体参数
        # 1.json
        #
        # 2.www-form-urlencoded
        #   a.一般在前端页面中使用表单录入的参数
        #   b.request.POST返回QueryDict,类似于python中dict类型

        # 3.file


        # 请求头参数

        return HttpResponse("<h1>创建项目信息</h1>")

    def put(self, request):
        return HttpResponse("<h1>更新项目信息</h1>")

    def delete(self, request):
        return HttpResponse("<h1>删除项目信息</h1>")

两种开发模式:

1.前后端不分离的开发模式
   a.后端如果返回的是一个完整的html页面(页面中有填充数据)
 2.前后端分离的开发模式
   a.后端如果返回的是数据(json、xml)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值