• 售前

  • 售后

热门帖子
入门百科

Django学习条记之View操作指南

[复制链接]
123457751 显示全部楼层 发表于 2021-10-26 13:21:49 |阅读模式 打印 上一主题 下一主题
Django的View


一个视图函数(类),简称视图,是一个简朴的Python 函数(类),它继承Web请求并且返回Web相应。相应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片。

无论视图本身包含什么逻辑,都要返回相应。代码写在那里也无所谓,只要它在你当前项目目次下面。除此之外没有更多的要求了——可以说“没有什么神奇的地方”。为了将代码放在某处,大家约定成俗将视图放置在项目(project)或应用步伐(app)目次中的名为views.py的文件中。

导入:
  1. 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
  1. from django.http import HttpResponse
  2. from django import http
  3. # Create your views here.
  4. class UserView(View):
  5. ''' 用户视图 '''
  6. def get(self, request):
  7.   # 模型类实例化对象
  8.   users = UserProfile.objects.all()
  9.   user_list = []
  10.   for user in users:
  11.    user_dict = {
  12.     'id': user.id,
  13.     'username': user.username,
  14.     'password': user.password,
  15.     'open_id': user.open_id,
  16.     'code': user.code
  17.    }
  18.   user_list.append(user_dict)
  19.   return http.JsonResponse(user_list)
复制代码
二、创建数据


利用django中的json,把前端通报过来的json数据转成字典
利用django.db.models模块中的Q来查询多个字段在数据库中是否存在
  1. from django.views import View
  2. from django.http import HttpResponse
  3. from django import http
  4. from django.db.models import Q
  5. import json
  6. class UserView(View):
  7. ''' 用户视图 '''
  8. def post(self, request):
  9.   # 获取数据, json转字典
  10.   dict_data = json.loads(request.body.decode())
  11.   print(dict_data)
  12.   nick_name = dict_data.get('nickName')
  13.   code = dict_data.get('code')
  14.   open_id = "xljsafwjeilnvaiwogjirgnlg"
  15.   # 校验数据
  16.   result = UserProfile.objects.filter(Q(code=code) | Q(open_id=open_id))
  17.   if not result.exists():
  18.    # 数据入库
  19.    user = UserProfile.objects.create( username=nick_name, open_id=open_id, code=code )
  20.    # 返回响应
  21.    user_dict = {
  22.     'id': user.id,
  23.     'username': user.username,
  24.     'password': user.password,
  25.     'open_id': user.open_id,
  26.     'code': user.code
  27.    }
  28.    return http.JsonResponse(user_dict)
  29.   return http.JsonResponse("用户已存在", safe=False, status=202)
复制代码
三、查询某一条数据(单个)


前端必要通报pk/id值,通过pk/id查询数据,查询一条数据必须用get,不能用filter,否则会报错:AttributeError: 'QuerySet' object has no attribute 'id'
数据转换
返回相应
  1. class UserProfileDetail(View):
  2. ''' 详情视图 '''
  3. def get(self, request):
  4.   userInfo = UserProfile.objects.get(id=id)
  5.   if not userInfo:
  6.    return HttpResponse("查询的用Info户不存在", status=404)     
  7.   user_dict = {
  8.    'id': userInfo.id,
  9.    'username': userInfo.username,
  10.    'password': userInfo.password,
  11.    'open_id': userInfo.open_id,
  12.    'code': userInfo.code
  13.   }
  14.   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查询获取到的是数据集
  1. class UserProfileDetail(View):
  2. ''' 详情视图 '''
  3. def put(self, request, id):
  4.   data_dict = json.loads(request.body.decode())
  5.   userInfo = UserProfile.objects.get(id=id)
  6.   if not userInfo:
  7.    return HttpResponse("查询的用Info户不存在", status=404)     
  8.   UserProfile.objects.filter(id=id).update(**data_dict)
  9.   userInfo = UserProfile.objects.get(id=id)
  10.   user_dict = {
  11.    'id': userInfo.id,
  12.    'username': userInfo.username,
  13.    'password': userInfo.password,
  14.    'open_id': userInfo.open_id,
  15.    'code': userInfo.code
  16.   }
  17.   return http.JsonResponse(user_dict, status=200)
复制代码
五、删除某一条数据

  1. class UserProfileDetail(View):
  2. ''' 详情视图 '''
  3. def delete(self, request, id):
  4.   userInfo = UserProfile.objects.filter(id=id)
  5.   if not userInfo:
  6.    return HttpResponse("删除的数据不存在", status=404)      
  7.   UserProfile.objects.filter(id=id).delete()
  8.   return HttpResponse("数据删除成功", status=204)
复制代码
上述的利用只能实用于数据表中字段很少的情况,如果字段较多,写起来会很贫苦,倒霉于开发
总结

到此这篇关于Django学习笔记之View利用指南的文章就先容到这了,更多相关Django View利用内容请搜刮草根技能分享以前的文章或继续欣赏下面的相关文章渴望大家以后多多支持草根技能分享!

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作