文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

怎么在Django中对View进行操作

2023-06-14 06:35

关注

本篇文章给大家分享的是有关怎么在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进行操作,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯