python卷java实现api接口提供(四)

亲爱的博友们,我周一回来了。上周的手术过程中出了一点点小意外,取钉的工具断了,还好有惊无险,感谢上苍。

一、依赖安装

这里需要安装djangorestframework、apiview。安装方法就不提了,见前面的分享。

二、详细步骤

我这里新建了一个车辆管理模块来演示本次进阶内容,新建子业务模块这里也不详细说了,建好表了,去看前面的分享。

1.settings.py修改

INSTALLED_APPS内容修改
代码如下:

INSTALLED_APPS = [
    'simpleui',
    'corsheaders',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'rest_framework',

    'user',
    'car'
]

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

2.urls配置

car子模块的urls.py

from django.urls import path

from . import views

urlpatterns = [
    path('carList', views.carList),

]

项目的urls.py

from django.contrib import admin
from django.urls import path, include, re_path
from django.views.static import serve
from rest_framework import routers

from user import views as user_views
from car import views as car_views

router = routers.DefaultRouter()

router.register(r'carInfo', car_views.CarInfoViewSet)
urlpatterns = [
    path('admin/', admin.site.urls),
    re_path(r'upload/(?P.*)$', serve, {'document_root': 'upload'}),

    path('userList', user_views.userList),
    path('userLogin', user_views.userLogin),

    path('carList', car_views.carList),

    path('car/', include('car.urls')),

    path('api/', include(router.urls)),
    path('api/auth/', include('rest_framework.urls', namespace='rest_framework')),

]

3.自定义序列器

serializer.py

"""
Desc:实现序列化
"""

from rest_framework import serializers
from .models import CarInfo

class CarInfoListSerializer(serializers.ModelSerializer):
    class Meta:
        model = CarInfo
        fields = [
            'id',
            'car_no',
            'car_color',
            'car_type',
            'memo',
            'create_time'
        ]

4.views视图


from rest_framework import status as framework_status, viewsets
from rest_framework.decorators import api_view
from rest_framework.response import Response

from car.models import CarInfo
from .serializer import CarInfoListSerializer

class CarInfoViewSet(viewsets.ModelViewSet):
    queryset = CarInfo.objects.all()
    serializer_class = CarInfoListSerializer

@api_view(["GET", "POST"])
def carList(request):

    car_list = CarInfo.objects.all().order_by("-create_time")
    serializer = CarInfoListSerializer(car_list, many=True)

    return Response({'dode': framework_status.HTTP_200_OK, 'msg': 'SUCCESS', 'data': serializer.data},
                    status=framework_status.HTTP_200_OK)

这里代码上基本都有写注释,体会不明显就结合下面的各种访问路径体会,注释的return也可以打开试试效果。

三、效果

到这里,如果启动不报错,直接访问:http://127.0.0.1:8000/api/
你应该看到下面的界面:

python卷java实现api接口提供(四)
注意:箭头所指是views里的路由视图,点击链接可以去做增删改查接口在线操作。
用postman访问效果:
python卷java实现api接口提供(四)
这里我一个个截图给大家没有意义,我就直接分享这些接口的json,大家保存为文件,导入到postman自行体会吧。
{
    "info": {
        "_postman_id": "5d29815d-5be8-4d8e-8dcb-b4d1a4134aba",
        "name": "python接口",
        "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
    },
    "item": [
        {
            "name": "django测试",
            "item": [
                {
                    "name": "用户登录",
                    "event": [
                        {
                            "listen": "prerequest",
                            "script": {
                                "exec": [
                                    "postman.setGlobalVariable(\"pythonApi\",\"http://127.0.0.1:8000\");"
                                ],
                                "type": "text/javascript"
                            }
                        }
                    ],
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json",
                                "type": "text"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\r\n    \"mobile\": \"18607151930\",\r\n    \"password\": \"123456\"\r\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        },
                        "url": {
                            "raw": "{{pythonApi}}/userLogin",
                            "host": [
                                "{{pythonApi}}"
                            ],
                            "path": [
                                "userLogin"
                            ]
                        }
                    },
                    "response": []
                },
                {
                    "name": "用户列表",
                    "event": [
                        {
                            "listen": "prerequest",
                            "script": {
                                "exec": [
                                    "postman.setGlobalVariable(\"pythonApi\",\"http://127.0.0.1:8000\");"
                                ],
                                "type": "text/javascript"
                            }
                        }
                    ],
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json",
                                "type": "text"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\r\n    \"page\": 1,\r\n    \"size\": 10,\r\n    \"name\": \"1\",\r\n    \"mobile\": \"8\" \r\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        },
                        "url": {
                            "raw": "{{pythonApi}}/userList",
                            "host": [
                                "{{pythonApi}}"
                            ],
                            "path": [
                                "userList"
                            ]
                        }
                    },
                    "response": []
                },
                {
                    "name": "用户列表-restframework",
                    "event": [
                        {
                            "listen": "prerequest",
                            "script": {
                                "exec": [
                                    "postman.setGlobalVariable(\"pythonApi\",\"http://127.0.0.1:8000\");"
                                ],
                                "type": "text/javascript"
                            }
                        }
                    ],
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json",
                                "type": "text"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\r\n    \"page\": 1,\r\n    \"size\": 10,\r\n    \"name\": \"1\",\r\n    \"mobile\": \"8\" \r\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        },
                        "url": {
                            "raw": "{{pythonApi}}/api/auth/userList",
                            "host": [
                                "{{pythonApi}}"
                            ],
                            "path": [
                                "api",
                                "auth",
                                "userList"
                            ]
                        }
                    },
                    "response": []
                },
                {
                    "name": "车辆列表(走项目urls配置)",
                    "event": [
                        {
                            "listen": "prerequest",
                            "script": {
                                "exec": [
                                    "postman.setGlobalVariable(\"pythonApi\",\"http://127.0.0.1:8000\");"
                                ],
                                "type": "text/javascript"
                            }
                        }
                    ],
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json",
                                "type": "text"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\r\n    \r\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        },
                        "url": {
                            "raw": "{{pythonApi}}/carList",
                            "host": [
                                "{{pythonApi}}"
                            ],
                            "path": [
                                "carList"
                            ]
                        }
                    },
                    "response": []
                },
                {
                    "name": "车辆列表 (走子模块urls的配置)",
                    "event": [
                        {
                            "listen": "prerequest",
                            "script": {
                                "exec": [
                                    "postman.setGlobalVariable(\"pythonApi\",\"http://127.0.0.1:8000\");"
                                ],
                                "type": "text/javascript"
                            }
                        }
                    ],
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json",
                                "type": "text"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\r\n\r\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        },
                        "url": {
                            "raw": "{{pythonApi}}/car/carList",
                            "host": [
                                "{{pythonApi}}"
                            ],
                            "path": [
                                "car",
                                "carList"
                            ]
                        }
                    },
                    "response": []
                },
                {
                    "name": "车辆列表(走路由)",
                    "event": [
                        {
                            "listen": "prerequest",
                            "script": {
                                "exec": [
                                    "postman.setGlobalVariable(\"pythonApi\",\"http://127.0.0.1:8000\");"
                                ],
                                "type": "text/javascript"
                            }
                        }
                    ],
                    "protocolProfileBehavior": {
                        "disableBodyPruning": true
                    },
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json",
                                "type": "text"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\r\n   \r\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        },
                        "url": {
                            "raw": "{{pythonApi}}/api/carInfo/",
                            "host": [
                                "{{pythonApi}}"
                            ],
                            "path": [
                                "api",
                                "carInfo",
""
                            ]
                        }
                    },
                    "response": []
                },
                {
                    "name": "车辆详情(走路由)",
                    "event": [
                        {
                            "listen": "prerequest",
                            "script": {
                                "exec": [
                                    "postman.setGlobalVariable(\"pythonApi\",\"http://127.0.0.1:8000\");"
                                ],
                                "type": "text/javascript"
                            }
                        }
                    ],
                    "protocolProfileBehavior": {
                        "disableBodyPruning": true
                    },
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json",
                                "type": "text"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\r\n   \r\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        },
                        "url": {
                            "raw": "{{pythonApi}}/api/carInfo/6/",
                            "host": [
                                "{{pythonApi}}"
                            ],
                            "path": [
                                "api",
                                "carInfo",
                                "6",
""
                            ]
                        }
                    },
                    "response": []
                },
                {
                    "name": "车辆新增(走路由)",
                    "event": [
                        {
                            "listen": "prerequest",
                            "script": {
                                "exec": [
                                    "postman.setGlobalVariable(\"pythonApi\",\"http://127.0.0.1:8000\");"
                                ],
                                "type": "text/javascript"
                            }
                        }
                    ],
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json",
                                "type": "text"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\r\n    \"car_no\": \"鄂A1234\",\r\n    \"car_color\": \"皓月灰\",\r\n    \"car_type\": 1,\r\n    \"memo\": \"梦中的\"\r\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        },
                        "url": {
                            "raw": "{{pythonApi}}/api/carInfo/",
                            "host": [
                                "{{pythonApi}}"
                            ],
                            "path": [
                                "api",
                                "carInfo",
""
                            ]
                        }
                    },
                    "response": []
                },
                {
                    "name": "车辆修改(走路由)",
                    "event": [
                        {
                            "listen": "prerequest",
                            "script": {
                                "exec": [
                                    "postman.setGlobalVariable(\"pythonApi\",\"http://127.0.0.1:8000\");"
                                ],
                                "type": "text/javascript"
                            }
                        }
                    ],
                    "request": {
                        "method": "PATCH",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json",
                                "type": "text"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\r\n    \"car_color\": \"皓月灰\",\r\n    \"car_type\": 2,\r\n    \"memo\": \"梦中的a\"\r\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        },
                        "url": {
                            "raw": "{{pythonApi}}/api/carInfo/6/",
                            "host": [
                                "{{pythonApi}}"
                            ],
                            "path": [
                                "api",
                                "carInfo",
                                "6",
""
                            ]
                        }
                    },
                    "response": []
                },
                {
                    "name": "车辆删除(走路由)",
                    "event": [
                        {
                            "listen": "prerequest",
                            "script": {
                                "exec": [
                                    "postman.setGlobalVariable(\"pythonApi\",\"http://127.0.0.1:8000\");"
                                ],
                                "type": "text/javascript"
                            }
                        }
                    ],
                    "request": {
                        "method": "DELETE",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json",
                                "type": "text"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        },
                        "url": {
                            "raw": "{{pythonApi}}/api/carInfo/7/",
                            "host": [
                                "{{pythonApi}}"
                            ],
                            "path": [
                                "api",
                                "carInfo",
                                "7",
""
                            ]
                        }
                    },
                    "response": []
                }
            ]
        }
    ]
}

四、总结

  • DRF路由方式真香,可惜所有的业务不可能都这么简单的单表操作
  • 路由指定的序列器可重写,实际上可以部分解决上面的问题
  • 最后讲句真话,这块我也还需要深入,所以这块的总结可能不准确

共同学习,今天比昨天优秀就行,加油。

Original: https://blog.csdn.net/zwrlj527/article/details/122563294
Author: 肥仔哥哥1930
Title: python卷java实现api接口提供(四)



相关阅读

Title: Python每日一练——第4天:百钱百鸡问题(升级版)

前言📢📢

Python每日一练来啦,本文已收录于:《Python每日一练》专栏

此专栏目的在于,帮忙学习Python的小白提高编程能力,训练逻辑思维,每周持续更新中,欢迎免费订阅!!!

python卷java实现api接口提供(四)

文章目录

; 1. 问题描述

我国古代数学家张丘建在《算经》一书中曾提出过著名的 “百钱买百鸡” 问题,该问题叙述如下:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?

百钱买百鸡的问题算是一套非常经典的不定方程的问题,题目很简单:公鸡每只5元,母鸡每只3元,小鸡3只一元,现要求用100元钱买100只鸡(三种类型的鸡都要买),问公鸡、母鸡、小鸡各买几只?

小伙伴们看了问题描述后,一定要自己先练习,再去看博主的代码和解题思路,才能提高自己的编程水平,全靠自觉哟!!!

欢迎小伙伴们把自己的思路或答案在评论区留言,博主会选一个最优解答进行置顶。

python卷java实现api接口提供(四)

2. 问题分析

数学解法:设公鸡买了x只,母鸡买了y只,小鸡买了z只

数量关系式: x + y + z = 100

钱的关系式:5x + 3y + z/3 = 100

3. 算法思路

1.以公鸡为突破点,公鸡5元一只,100元最多只能买20只,由于三种鸡都要买,所以公鸡数一定是小于20的。

2.母鸡每只3元,100全 拿来买母鸡,最多也不能超过33只机会。

3.设公鸡数为x,母鸡数为y,小鸡z只

4.只要满足 5x+3y+ z/3== 100 和 x + y + z == 100 就可以输出此种组合的结果。

4. 代码实现

实现代码📝:

import time

# 开始时间
start = time.time()
# 外层循环控制公鸡数量取值范围:0~20
for x in range(0, 21):
    # 内层循环控制母鸡数量取值范围:0~33
    for y in range(0, 34):
        # 嵌套内层循环控制小鸡数量取值范围:0~100
        for z in range(0, 101):
            # 条件判断同时满足 5x+3y+ z/3== 100 和 x + y + z == 100
            if (x * 5 + y * 3 + z / 3 == 100) and (x + y + z == 100):
                print("公鸡有%d只\t母鸡有%d只\t小鸡有%d只" % (x, y, z))
# 结束时间
end = time.time()
print("算法总耗时:", end - start)

运行结果👇:

python卷java实现api接口提供(四)

思考:虽然能求出结果,但仔细一想,用了三重循环, 总的循环次数:21 ∗ 34 ∗ 101 = 72114 次,太耗时间了,能不能有一种更好的解决方法呢?

5. 算法升级

思路:买了一只公鸡,花掉5钱,还剩下100 – 5 = 95 钱,买母鸡和小鸡的钱只有95钱,而不是100钱。再买一只母鸡,还剩下100- 5 – 3 = 92钱,那么买小鸡的钱只有92钱……所以每重循坏次数不再是固定的100,而是变化的。

第一重循环(公鸡):100 / 5 = 20 次

第二重循环(母鸡):(100 – x) / 3次

第三重判断(小鸡):100 – x – y次

实现代码📝:

import time

start = time.time()
for x in range(0, 101, 5):
    for y in range(3, 101 - x, 3):
        z = 100 - x - y
        if (x // 5 + y // 3 + z * 3 == 100) and (x + y + z == 100):
            print("公鸡有%d只\t母鸡有%d只\t小鸡有%d只" % (x // 5, y // 3, z * 3))

end = time.time()
print("算法总耗时:", end - start)

运行结果👇:

python卷java实现api接口提供(四)

总结:方式2较方式1提升了100倍,这个小小的程序可以说明算法的重要性,用不同的算法,时间复杂度是不一样的。在实现一个功能的基础上,还要兼顾效率的问题。当然这个题目还可以用求不定方程整数解的办法来解决,这个算法用时会更短。

6. 如何让刷题变得更加高效呢?

  1. 编程小白选手

很多刚入门编程的小白学习了基础语法,却不知道语法的用途,不知道如何加深映像,不知道如何提升自己,这个时候每天刷自主刷一道题就非常重要(百炼成神),可以去牛客网上的编程初学者入门训练。该专题为编程入门级别,适合刚学完语法的小白练习,题目涉及编程基础语法,基本结构等,每道题带有练习模式和考试模式,可还原考试模式进行模拟,也可通过练习模式进行练习。

链接地址牛客网 | 编程初学者入门训练

python卷java实现api接口提供(四)
2. 编程进阶选手

当基础练习完已经逐步掌握了各知识要点后,这个时候去专项练习中学习数据结构、算法基础、计算机基础等。先从简单的入手,感觉上来了再做中等难度,以及较难的题目。这三样是面试中必考的知识点,我们只有坚持每日自己去多加练习,拒绝平躺持续刷题,不断提升自己才能冲击令人满意的公司。

链接地址牛客网 | 专项练习

python卷java实现api接口提供(四)
速度上号,大家一起冲击大厂,有疑问评论区留言解答!!!

Original: https://blog.csdn.net/yuan2019035055/article/details/124850184
Author: 无 羡ღ
Title: Python每日一练——第4天:百钱百鸡问题(升级版)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/290697/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总