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操作的主要内容,如果未能解决你的问题,请参考以下文章

Android:片段内的按钮操作

片段类中的 View.findViewById

Tablayout+view 寻呼机未在位置 0 显示片段

有没有办法以编程方式使用kotlin更改片段中的文本颜色?

无法更新 View Pager 中的中间片段。

Django中的Request和Response