Django中的View操作
Posted 苦心僧
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django中的View操作相关的知识,希望对你有一定的参考价值。
导入: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 parameter to False.
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)
五、删除某一条数据
class UserProfileDetail(View):
\'\'\' 详情视图 \'\'\'
def delete(self, request, id):
userInfo = UserProfile.objects.filter(id=id)
if not userInfo:
return HttpResponse("删除的数据不存在", status=404)
UserProfile.objects.filter(id=id).delete()
return HttpResponse("数据删除成功", status=204)
上述的操作只能适用于数据表中字段很少的情况,如果字段较多,写起来会很麻烦,不利于开发
以上是关于Django中的View操作的主要内容,如果未能解决你的问题,请参考以下文章