django FBV CBV及序列化工具

FBV

FBV 是对应的 function(函数),也就是前面在views.py中进行逻辑处理时定义的函数

CBV

CBV 是对应的 class(类), 也就是在views.py中进行逻辑处理时定义的类
CBV 中 django 会封装一些方法,可以直接定义 get/post 方法,然后通过 dispatch 自动调用

  • 示例

urls.py

1
2
3
4
5
from demo01 import views

urlpatterns = [
url(r'^cbv_index', views.CBV.as_view),
]

views.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from django.views import View   #CBV

class CBV(View):
def get(self, request):
# self.dispatch() # 可通过dispatch查看定义方法
return render(request, 'login.html')

def post(self, request):
username = request.POST.get('username', False)
password = request.POST.get('password', False)
if not username or not password:
return HttpResponse('用户名密码不能为空')
else:
user_obj = models.UserInfo.objects.filter(username=username, password=password)

if user_obj.first(): # 登录成功
request.session['login'] = user_obj.first().name # 创建session
return redirect('/session')
else: # 登录失败
return HttpResponse('用户名密码错误')

和前面的登录方法相比,不需要自己判断 request.method判断是 post/get 方法,django 已经进行了封装处理。

序列化

进行数据处理的时候,可以通过 json.dumps方法将字典等类型转换成字符串类型处理
对于数据库查询得到的 queryset 类型,无法通过 json.dump 方法处理,可以使用 serializers.serialize 方法处理
json处理示例

1
2
3
4
5
import json
from django.shortcuts import render, HttpResponse, redirect

dic = {'Andy': '123', 'Bob': '456'}
return HttpResponse(json.dumps(dic))

serializers处理示例

1
2
3
4
5
6
from django.core import serializers
from django.shortcuts import render, HttpResponse, redirect


user_obj = models.UserInfo.objects.filter(username=username, password=password)
return HttpResponse(serializers.serialize("json",user_obj))

Recommended Posts