热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

十三、FBV和CBV和数据序列化

FBV代表func,也就是函数。CBV代表class,也就是类应用场景:登录验证.FBV写法:deflogin(request):dic{tag:N

FBV代表func,也就是函数。
CBV代表class,也就是类
应用场景:登录验证.


FBV写法:

def login(request):dic = {'tag':None,'data':None,'status':True}if request.method == 'GET':# 第一次登陆跳转到登陆return render(request,'login.html')else:#当取不到值的时候返回falseUsername = request.POST.get('username',False)Password = request.POST.get('password',False)# print ('username:',username)# print ('password:',password)if not Password or not Username:ret_data = json.dumps(dic) #把字典转化为字符串,然后进行返回return HttpResponse(ret_data)else:#去数据库匹匹配账户密码user_obj = models.Userinfo.objects.filter(username=Username,password=Password)if user_obj.first():#登录成功#return HttpResponse("欢迎来到我的世界")#将user_obj转化为json格式的数据。json_data = serializers.serialize('json',user_obj)dic['data'] = json_data# 设置session内部的字典内容request.session['is_login'] = user_obj.first().namerequest.session['username'] = Usernamereturn HttpResponse(json.dumps(dic))#登录成功就跳转到后台页面#return redirect("/page")#return redirect('/session')else:return HttpResponse("账号密码错误")

CBV写法:

例如我们正常登类为index,验证类为auth,登录类为Login,我们用index类,继承auth类,就可以实现验证登录,然后验证失败就调用Login类,

逻辑view写法:
from django.views import View
from django.core import serializersclass Login(View):def get(self,request):#第一次访问return render(request,'login.html')def post(self,request):dic = {'tag': None, 'data': None, 'status': True}Username = request.POST.get('username', False)Password = request.POST.get('password', False)if not Password or not Username:ret_data = json.dumps(dic) # 把字典转化为字符串,然后进行返回return HttpResponse(ret_data)else:# 去数据库匹匹配账户密码user_obj = models.Userinfo.objects.filter(username=Username, password=Password)if user_obj.first():#给session字典赋值request.session['login'] = user_obj.first().namereturn redirect('/index_demo')else:return HttpResponse("账号密码错误")
class Auth(View):def dispatch(self, request, *args, **kwargs):#有session固定写法,获取Login登录时候的session的key值if request.session.get('login'):response = super(Auth,self).dispatch(request, *args, **kwargs)return responseelse:return redirect('/login_demo')
#继承Auth ,Index就不能直接访问了,需要登录验证
class Index(Auth):def get(self,request):return HttpResponse('Index')

路由url.py中添加:

url(r'^login_demo', views.Login.as_view()),
url(r'^index_demo', views.Index.as_view()),

测试:
此时启动访问http://127.0.0.1:8080/index_demo,因为没有session,所以不能直接访问,会跳转到login登录界面,登录以后才能直接访问


序列化:

所谓序列化就是对数据格式转化为json格式
由于json.dumps 不能对 QuerySet 类型进行处理, 所以 要使用 serializers.serialize
我们导入serialize 库,然后再操作数据

from django.core import serializersif user_obj.first():#登录成功#return HttpResponse("欢迎来到我的世界")#将user_obj转化为json格式的数据。json_data = serializers.serialize('json',user_obj)dic['data'] = json_data

结果:

在这里插入图片描述
如果操作的数据类型是date,datetime的话,那么就需要帮它们转换一下,在json.dumps 的命令中 可以多增加一个参数,cls=一个类,这个类继承 json.JSONEncoder,如下
isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type()。

from datetime import datetime
#!/usr/bin/env python
import json
from datetime import datetime
class JsonCustomEncoder(json.JSONEncoder):def default(self, field):if isinstance(field, datetime):return field.strftime('%Y-%m-%d %H:%M:%S')elif isinstance(field, date):return field.strftime('%Y-%m-%d')else:return json.JSONEncoder.default(self, field)user_list = [{'id': 1, 'name': 'alex', 'ctime': datetime.now()},{'id': 2, 'name': 'eric', 'ctime': datetime.now()}
]data = json.dumps(user_list, cls=JsonCustomEncoder)
print(data)

结果:

[root@master config]# python cvb.py
[{"ctime": "2018-12-30 13:37:29", "id": 1, "name": "alex"}, {"ctime": "2018-12-30 13:37:29", "id": 2, "name": "eric"}]

这样就可以帮助我们处理 datetime,date类型了,其他类型,当然也可以,修改类里面就ok


推荐阅读
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • c# – UWP:BrightnessOverride StartOverride逻辑 ... [详细]
  • 本文详细介绍了如何使用Python编写爬虫程序,从豆瓣电影Top250页面抓取电影信息。文章涵盖了从基础的网页请求到处理反爬虫机制,再到多页数据抓取的全过程,并提供了完整的代码示例。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文详细介绍了如何构建一个高效的UI管理系统,集中处理UI页面的打开、关闭、层级管理和页面跳转等问题。通过UIManager统一管理外部切换逻辑,实现功能逻辑分散化和代码复用,支持多人协作开发。 ... [详细]
  • 本文探讨了如何在编程中正确处理包含空数组的 JSON 对象,提供了详细的代码示例和解决方案。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
author-avatar
小鱼儿r6K2
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有