Django 之视图层

 

 

 

 

 

 

JsonResponse

1 json格式的数据有什么用
  • 前后端数据交互需要使用json作为过渡,实现跨语言传输数据
2 前后端方法对应
  • JSON.stringify() -  json.dumps()
  • JSON.parse()     -  json.loads()
3 JsonResponse 对象实现
import json
from django.http import JsonResponse
def jsonx(request):
    user_dict = {'nickname':'iyuyixyz', 'email':'iyuyi.xyz@gmail.com', 'hobby':'dj', '小姨子'}
    # 先转成json格式字符串
    # json_str = json.dumps(user_dict, ensure_ascii=False)
    # 将该字符串返回
    # return HttpResponse(json_str)
    return JsonResponse(user_dict, json_dumps_params = {'ensure_ascii':False})

    # 对列表序列化
    # list = [1, 2, 3, 4, 5]
    # return JsonResponse(list, safe = False)  
    # 默认 safe=True 代表只能序列化字典对象,safe=False 代表可以序列化字典以外的对象
    # In order to allow non-dict objects to be serialized set the safe parameter to False.
 

FBV和CBV

Django 的视图层由两种形式构成:FBV和CBV

  • FBV基于函数的视图(Function base view)我们之前一直介绍的都是FBV
  • CBV基于的视图 (Class base view)

案例

urls.py

from django.urls import path, register_converter, re_path
from app import views

urlpatterns = [
    re_path(r'^login/',views.LoginView.as_view()), # 必须调用类下的方法 as_view
]

views.py

from django.shortcuts import render, HttpResponse, redirect
from django.views import View

class LoginView(View):
    def dispatch(self, request, *args, **kwargs): # 可在该方法内做一些预处理操作
        # 当请求url为:http://127.0.0.1:8008/login/会先触发dispatch的执行
        # 如果http协议的请求方法为GET,则调用下述get方法
        # 如果http协议的请求方法为POST,则调用下述post方法
        obj = super().dispatch(request, *args, **kwargs) # 必须继承父类的dispatch功能
        return obj # 必须返回obj

    def get(self,request):
        return render(request, 'login.html')

    def post(self,request):
        name = request.POST.get('name')
        pwd = request.POST.get('pwd')
        if name  == 'xyz' and pwd == '123':
            result='登录成功'
        else:
            result='用户名或密码错误'
        return HttpResponse(result)

测试

python manage.py runserver

验证GET请求:在浏览器输入:http://127.0.0.1:8001/login/验证POST请求:在表单内输入数据然后提交。

采用CBV可以引入面向对象的思想对数据进行更高程度的封装。

 

posted @ 2022-09-15 13:58  娇小赤雅  阅读(35)  评论(0编辑  收藏  举报