时间:2021-05-23
一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应。响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片。
无论视图本身包含什么逻辑,都要返回响应。代码写在哪里也无所谓,只要它在你当前项目目录下面。除此之外没有更多的要求了——可以说“没有什么神奇的地方”。为了将代码放在某处,大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中。
导入:from django.views import View
查询数据在自定义的视图类中定义get方法
使用django.http模块中的JsonResponse对非json格式的数据做返回处理
在JsonResponse必须添加safe=False参数,否则会报错:In order to allow non-dict objects to be serialized set the safe
from django.http import HttpResponse from django import http # Create your views here. class UserView(View): ''' 用户视图 ''' def get(self, request): # 模型类实例化对象 users = UserProfile.objects.all() user_list = [] for user in users: user_dict = { 'id': user.id, 'username': user.username, 'password': user.password, 'open_id': user.open_id, 'code': user.code } user_list.append(user_dict) return http.JsonResponse(user_list)使用django中的json,把前端传递过来的json数据转成字典
使用django.db.models模块中的Q来查询多个字段在数据库中是否存在
from django.views import View from django.http import HttpResponse from django import http from django.db.models import Q import json class UserView(View): ''' 用户视图 ''' def post(self, request): # 获取数据, json转字典 dict_data = json.loads(request.body.decode()) print(dict_data) nick_name = dict_data.get('nickName') code = dict_data.get('code') open_id = "xljsafwjeilnvaiwogjirgnlg" # 校验数据 result = UserProfile.objects.filter(Q(code=code) | Q(open_id=open_id)) if not result.exists(): # 数据入库 user = UserProfile.objects.create( username=nick_name, open_id=open_id, code=code ) # 返回响应 user_dict = { 'id': user.id, 'username': user.username, 'password': user.password, 'open_id': user.open_id, 'code': user.code } return http.JsonResponse(user_dict) return http.JsonResponse("用户已存在", safe=False, status=202)前端需要传递pk/id值,通过pk/id查询数据,查询一条数据必须用get,不能用filter,否则会报错:AttributeError: 'QuerySet' object has no attribute 'id'
数据转换
返回响应
class UserProfileDetail(View): ''' 详情视图 ''' def get(self, request): userInfo = UserProfile.objects.get(id=id) if not userInfo: return HttpResponse("查询的用Info户不存在", status=404) user_dict = { 'id': userInfo.id, 'username': userInfo.username, 'password': userInfo.password, 'open_id': userInfo.open_id, 'code': userInfo.code } return http.JsonResponse(user_dict, status=200)前端需要传递pk/id值,通过pk/id查询数据,查询一条数据必须用get,不能用filter,否则会报错:AttributeError: 'QuerySet' object has no attribute 'id'
更新一条数据时必须使用filter来查询数据集,再使用update(**data)来更新数据,不能使用get,否则会报错:AttributeError: '模型类' object has no attribute 'update'
get查询获取到的是数据对象,而filter查询获取到的是数据集
class UserProfileDetail(View): ''' 详情视图 ''' def put(self, request, id): data_dict = json.loads(request.body.decode()) userInfo = UserProfile.objects.get(id=id) if not userInfo: return HttpResponse("查询的用Info户不存在", status=404) UserProfile.objects.filter(id=id).update(**data_dict) userInfo = UserProfile.objects.get(id=id) user_dict = { 'id': userInfo.id, 'username': userInfo.username, 'password': userInfo.password, 'open_id': userInfo.open_id, 'code': userInfo.code } return http.JsonResponse(user_dict, status=200)上述的操作只能适用于数据表中字段很少的情况,如果字段较多,写起来会很麻烦,不利于开发
到此这篇关于Django学习笔记之View操作指南的文章就介绍到这了,更多相关Django View操作内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
推荐阅读:JavaScript学习笔记之数组的增、删、改、查JavaScript学习笔记之数组求和方法JavaScript学习笔记之数组随机排序话说面试常会碰到
推荐阅读:JavaScript学习笔记之数组的增、删、改、查JavaScript学习笔记之数组求和方法JavaScript学习笔记之数组随机排序洗牌算法是一个比
本文实例讲述了Yii框架学习笔记之session与cookie操作。分享给大家供大家参考,具体如下:session操作session; if($session
推荐阅读:JavaScript学习笔记之数组求和方法JavaScript学习笔记之数组的增、删、改、查JavaScript中提供了sort()和reverse(
Django学习笔记-学生管理系统(Django实现)笔记中仅实现了对数据的全部查询。下面实现新增、删除、修改,代码如下。下面的代码没有对输入框内容进行限制,如