您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:Django学习笔记之View操作指南

51自学网 2021-10-30 22:48:46
  python
这篇教程Django学习笔记之View操作指南写得很实用,希望能帮到您。

Django的View

一个视图函数(类),简称视图,是一个简单的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)

五、删除某一条数据

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操作指南的文章就介绍到这了,更多相关Django View操作内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net!


一篇文章搞懂Python反斜杠的相关问题
Python判断回文数的三种方法实例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。