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可以引入面向对象的思想对数据进行更高程度的封装。