导入: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. ```python 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)
<a name="jtj9b"></a>### 二、创建数据- 使用django中的json,把前端传递过来的json数据转成字典- 使用django.db.models模块中的Q来查询多个字段在数据库中是否存在```pythonfrom django.views import Viewfrom django.http import HttpResponsefrom django import httpfrom django.db.models import Qimport jsonclass 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’
- 数据转换
返回响应 ```python 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)
<a name="y1FsC"></a>### 四、更新一条数据- 前端需要传递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查询获取到的是数据集```pythonclass 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)
上述的操作只能适用于数据表中字段很少的情况,如果字段较多,写起来会很麻烦,不利于开发
