[Résumé de la phase]--Utilisez Django pour écrire une interface permettant de réaliser des opérations d'ajout, de suppression, de modification et de requête de données

 Après avoir appris cela, nous avons appris l'utilisation de base de Django et le fonctionnement des données. Voici deux manières différentes d'écrire pour l'ajout, la suppression, la modification et la requête de données d'interface :

Première méthode d'écriture :

Table de routage de sous-application urls.py

urlpatterns = [
    # path('admin/', admin.site.urls),
    path('index1/', index1),
    path('index1/', views.index1),
    re_path('^index2/$', index2),
    #类视图路由的定义,views.类视图.as_view(),as_view必须要加括号,不然后面运行会有报错
    path('index4/',views.MyView.as_view()),
    # 冒号前面:内置转化器(int、slug、uuid等)
    # 冒号后面:路径参数名
    path('index4/<int:pk>/',views.MyView.as_view())
]

Modèle de classe models.py

class ProjectsModel(BaseModel):
    # 设置id为主键
    id = models.AutoField(primary_key=True, verbose_name="id主键", help_text="id主键")
    name=models.CharField(unique=True,max_length=200,verbose_name="项目名",help_text="项目名")
    leader=models.CharField(max_length=20,verbose_name="负责人",help_text="负责人")
    tester=models.CharField(max_length=20,verbose_name="测试负责人",help_text="测试负责人")
    programmer=models.CharField(max_length=50,verbose_name="开发人员",help_text="开发人员")
    publish_app=models.CharField(max_length=100,verbose_name="发布应用",help_text="发布应用")
    desc=models.TextField(max_length=200,verbose_name="简要描述",help_text="简要描述",blank=True,null=True,default="")

    class Meta:
        db_table = 'tb_projects'
        verbose_name = '项目信息'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name

ensemble de vues vues.py

Lors de la conception de l'interface, différentes méthodes de requête sont mappées en fonction de l'ajout, de la suppression, de la modification et de la requête de données :

Nouvelles données-------> post requête, le paramètre d'entrée est des données au format json

Supprimer les données -------> supprimer la demande, le paramètre d'entrée est l'identifiant du projet

Modifier les données-------> mettre la demande, vous pouvez passer l'identifiant et la valeur de l'attribut à mettre à jour

Interroger toutes les données-------> obtenir la demande

Interroger les données de l'identifiant spécifié -------> get request

class MyView(View):
    def get(self, request, pk=None):
        # 查询数据
        # data=ProjectsModel.objects.get(id=1)
        if pk != None:
            data_query = ProjectsModel.objects.get(pk=pk)
            # data_query=dict(data_query)
            data_list = []
            data_dic = {
                "id": data_query.id,
                "project_name": data_query.name,
                "tester": data_query.tester,
                "leader": data_query.leader,
                "publish_app": data_query.publish_app
            }
            data_list.append(data_dic)
            data_str = json.dumps(data_list, ensure_ascii=False)
            return HttpResponse(data_str, content_type="application/json")
        else:
            data_query = ProjectsModel.objects.all()
            data_list = []
            for obj in data_query:
                data_dic = {
                    "id": obj.id,
                    "name": obj.name,
                    "tester": obj.tester
                }
                data_list.append(data_dic)
        # data_query=list(data_query)

        data_str = json.dumps(data_list, ensure_ascii=False)
        return HttpResponse(data_str, content_type="application/json")

        # data=ProjectsModel.objects.filter(id__gte=2)
        # return JsonResponse(data_query, safe=False)
        # data_qs=ProjectsModel.objects.filter(name__contains="项目").exclude(desc__startswith="1没有")
        # data_qs=ProjectsModel.objects.filter(Q(name__contains="项目")|Q(desc__startswith="1没有"))
        # data_qs=ProjectsModel.objects.filter(interfacesmodel__tester="测试人1")
        # data_qs=ProjectsModel.objects.filter(interfacesmodel__tester__endswith="1")

        # data_qs = InterfacesModel.objects.filter(project__name__contains="项目")
        # data_list = []
        # for obj in data_qs:
        #     data_dic = {
        #         "id": obj.id,
        #         "name": obj.name,
        #         "tester": obj.tester
        #     }
        #     data_list.append(data_dic)
        # return JsonResponse(data_list, safe=False)

    def post(self, request):
        # 视图函数和类视图中的请求方法,一定要返回HttpResponse对象或者子类对象
        # a.第一个参数为content,需要传递响应数据(类型为字符串或者字节类型)
        # b.可以使用content_type关键字参数来指定响应报文类型(text/html、application/json等等)
        # c.可以使用status关键字参数来指定响应状态码
        # 创建数据
        # 方法一:
        # data=ProjectsModel(name="是个名字a a ",leader="测试leader",tester="测试人",programmer="五星开发",publish_app="发布应用",desc="没有描述信息")
        # data.save()
        # 方法二:
        # data=ProjectsModel.objects.create(name="是个名字a a ",leader="测试leader",tester="测试人",programmer="五星开发",publish_app="发布应用",desc="没有描述信息")
        body_byte_data = request.body.decode()
        body_str_data = json.dumps(body_byte_data, ensure_ascii=False)
        data_dic = eval(json.loads(body_str_data))
        create_data = ProjectsModel.objects.create(**data_dic)
        return HttpResponse(create_data, content_type="application/json", status=200)

    def put(self, request, pk):
        # 场景一:
        # 通过id搜索出来对应的数据,并修改指定id的数据
        query_data = ProjectsModel.objects.get(pk=pk)
        # # 读取输入的json数据转化为dic类型
        body_byte_data = request.body.decode()
        body_str_data = json.dumps(body_byte_data, ensure_ascii=False)
        data_dic = eval(json.loads(body_str_data))
        # # 更新对应的字段
        query_data.name = data_dic["name"]
        query_data.leader = data_dic["leader"]
        query_data.tester = data_dic["tester"]
        query_data.programmer = data_dic["programmer"]
        query_data.publish_app = data_dic["publish_app"]
        query_data.desc = data_dic["desc"]
        query_data.save()
        return HttpResponse("PUT请求,修改数据成功")
        # 场景二:
        # query_data = ProjectsModel.objects.filter(id=pk).update(leader="hahahha")
        # update_data={
        #     "name":query_data.name
        # }

        # return HttpResponse("PUT请求,update修改数据成功")

    def delete(self, request, pk):
        dele_data = ProjectsModel.objects.get(pk=pk)
        dele_data.delete()

        return HttpResponse("DELETE删除成功")

Débogage avec le facteur

Interroger toutes les données :

 Interroger les données spécifiées

créer des données

 modifier les données

 Suprimmer les données:

 Les principales caractéristiques de cette méthode sont :

  • partager une classe de vue
  • Combiner requête complète et requête partielle

S'il est nécessaire d'ajouter ultérieurement une logique de fonction basée sur l'interface, il deviendra de plus en plus difficile de prendre en compte la compatibilité des requêtes d'interface, et sa maintenance sera peu pratique.

Méthode d'écriture 2 : (recommandée)

Table de routage du projet :

Ici, nous avons modifié le chemin de routage :

Si le pk doit être passé, nous spécifions de le trouver dans le nom de classe ProjectsDetailViews, comme la suppression, la modification et la recherche en fonction de la valeur pk ;

S'il n'est pas nécessaire de passer le pk, nous spécifions de le trouver dans le nom de classe ProjectsViews, comme les nouvelles données et la requête complète.

urlpatterns = [

    path('projects/',views.ProjectsViews.as_view()),
    path('projects/<int:pk>/',views.ProjectsDetailViews.as_view())
]

Fichier d'ensemble de vues du projet :

class ProjectsDetailViews(View):
    # 查询指定pk的数据
    def get(self, request, pk):
        ret = {
            "msg": "传参异常",
            "code": 404
        }
        try:
            query_data = ProjectsModel.objects.get(pk=pk)
        # 如果入参是不存在的id数据,抛出异常
        except Exception:
            return JsonResponse(ret, json_dumps_params={"ensure_ascii": False}, status=404)
        data_dict = {
            "id": query_data.id,
            "name": query_data.name,
            "leader": query_data.leader
        }
        return JsonResponse(data_dict, json_dumps_params={"ensure_ascii": False}, status=200)

    # 更新数据
    def put(self, request, pk):
        ret = {
            "msg": "传参异常",
            "code": 404
        }
        try:
            #查出对应id的数据
            query_data=ProjectsModel.objects.get(pk=pk)
            #提取传入的参数
            data_str=request.body.decode('utf-8')
            data_dict=json.loads(data_str)
            #修改老数据,传入新数据给对应字段
            query_data.name=data_dict["name"]
            query_data.leader=data_dict["leader"]
            query_data.desc=data_dict["desc"]
        except Exception:
            return JsonResponse(ret, json_dumps_params={"ensure_ascii": False}, status=200)
        #保存更新的数据
        query_data.save()
        #输出战展示数据
        data_dict = {
            "id": query_data.id,
            "name": query_data.name,
            "leader": query_data.leader
        }
        return JsonResponse(data_dict,json_dumps_params={"ensure_ascii":False},status=200)

    # 删除数据
    def delete(self, request, pk):
        ret={
            "msg":"删除成功!"
        }
        ret_error = {
            "msg": "传参异常",
            "code": 404
        }
        try:
            # 根据id查出对应数据
            query_data = ProjectsModel.objects.get(pk=pk)
            #删除指定数据
            query_data.delete()
            #一般删除数据的输出为None
        except Exception:
            return JsonResponse(ret_error,json_dumps_params={"ensure_ascii":False},status=200)
        return JsonResponse(ret,json_dumps_params={"ensure_ascii":False},status=200)
class ProjectsViews(View):
    # 查询全部数据
    def get(self, request):
        pro_data=ProjectsModel.objects.all()
        pro_list=[]
        for pro in pro_data:
            pro_dict={
                "id": pro.id,
                "name": pro.name,
                "leader": pro.leader
            }
            pro_list.append(pro_dict)
        return JsonResponse(pro_list,safe=False, json_dumps_params={"ensure_ascii": False}, status=200)

    # 创建数据
    def post(self, request):
        ret = {
            "msg": "传参异常",
            "code": 404
        }
        try:
            json_str = request.body.decode('utf-8')
            data_dict=json.loads(json_str)
        #如果入参不是json格式数据,抛出异常
        except json.JSONDecodeError:
            return JsonResponse(ret,json_dumps_params={"ensure_ascii": False}, status=404)
        create_data=ProjectsModel.objects.create(**data_dict)
        create_data.save()
        pro_dict = {
            "id": create_data.id,
            "name": create_data.name,
            "leader": create_data.leader
        }
        return JsonResponse(pro_dict,json_dumps_params={"ensure_ascii": False}, status=200)

Je suppose que tu aimes

Origine blog.csdn.net/weixin_43569834/article/details/131130870
conseillé
Classement