python - 编写 DRF 可重用 API

标签 python django django-rest-framework pip

我正在尝试为一组可重用的 API 创建 PIP 包。我已经在一个项目中实现了这些 API 并且工作得很好。

我开始寻找打包这些 API 的方法,以便它可以与任何其他项目集成,这就是我了解 setuptools 的方式。为了获得一 pip setuptools 的实际使用经验,我只是为 helloworld() 程序创建了一个 PIP 包。

现在,我已开始为 DRF 应用程序中的 API 创建包。我创建了一个空目录,并将该 DRF 应用程序的所有模块移至该目录中。 setup.py 文件经过良好配置,可以安装这些模块所需的依赖项。

但是,现在我想启动这个应用程序,看看它是否正常工作。因此,当我运行 python manage.py runserver 时,由于一个明显的原因,它不起作用 - 没有这样的文件或目录

此外,该包需要某些配置才能工作,在我之前的项目中,它是在 settings.py 文件中定义的。

setup.py

import os
from setuptools import setup, find_packages


# allow setup.py to be run from any path
os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir)))


def get_doc():

    with open("README.md", "r") as fh:

        return fh.read()


setup(
    name="django_restframework_2fa",
    version="0.0.1",
    description="Some description",
    long_description=get_doc(),
    long_description_content_type="text/markdown",
    url="https://github.com/jeetpatel9/django-restframework-2fa.git",
    py_modules=['helloworld'],
    package_dir={'': 'some_dir'},
    author='Jeet Patel',
    author_email='****@gmail.com',
    python_requires='>=3.7',
    include_package_data=True,
    zip_safe=False,
    packages=find_packages(
        exclude=['tests', 'tests.*', 'licenses', 'requirements']),
    classifiers=[
        "Environment :: Web Environment",
        "Programming Language :: Python",
        "Programming Language :: Python :: 3",
        "Programming Language :: Python :: 3.6",
        "Programming Language :: Python :: 3.7",
        "Framework :: Django",
        "Framework :: Django :: 3.1",
        "Framework :: Django :: 3.2",
        'Intended Audience :: Developers',
        'License :: OSI Approved :: MIT License',
        'Operating System :: OS Independent',
        'Topic :: Internet :: WWW/HTTP',
    ],
    install_requires=[
        "djangorestframework",
        "django",
        "djangorestframework-simplejwt",
        "pyjwt",
        "twilio==6.55.0",
        "djangorestframework-simplejwt==4.6.0",
        "django-phonenumber-field==5.2.0",
        "phonenumbers==8.12.24",

    ],
    extra_requires={
        "dev": [
            "pytest>=3.7",
            "twine 3.4.1",
        ]
    }
)

我在互联网上到处寻找以了解如何 -

  1. 在开发 PIP 包时定义 settings.py 文件。
  2. 启动此软件包进行开发和测试。

对文章或教程的任何引用也对我有用。

这个社区是我最后的希望。

最佳答案

pip 包将仅包含要在其他项目中重复使用的应用程序文件;所以,是的,每次需要运行和测试包时都构建一个包,效率非常低。
一种解决方案是在您的工作目录中创建一个 tests 项目,并编写您需要的任何测试文件( View 、url、设置等)并将它们放入测试中。让我展示一个示例结构:

product_management  ## working directory
├─ .gitignore
├─ README.md
├─ manage.py
├─ setup.cfg
├─ setup.py
├─ tests  ## tests project
│  ├─ __init__.py
│  ├─ asgi.py
│  ├─ requirements.txt
│  ├─ settings.py
│  ├─ urls.py
│  ├─ views.py
│  └─ wsgi.py
└─ product_app  ## re-usable app
   ├─ __init__.py
   ├─ admin.py
   ├─ apps.py
   ├─ migrations
   │  ├─ 0001_initial.py
   │  └─ __init__.py
   ├─ models.py
   ├─ serializers.py
   └─ views.py

请记住,您可以在不使用任何应用程序的情况下编写整个 django 项目;我们在这里使用我们的测试项目来执行此操作。这也可以作为有关如何将这些可重用 API 集成到其他项目中的文档。根目录中的manage.py可用于启动tests项目。

现在,由于 tests 文件夹在技术上在 pip 包内没有用处,因此可以通过如下定义将其排除:

setup.py

from setuptools import setup, find_packages

setup(
    packages=find_packages(exclude=("tests",)),
)

您可以通过查看 pypi.org 上列出的各种开源包的 github 存储库来了解更多信息。 .

关于python - 编写 DRF 可重用 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67857883/

相关文章:

python - alembic:在迁移中使用子查询更新语句

python - 了解 Numpy rot90 轴

python - Paypal 自适应支付 589023

Django REST Framework - 对嵌套序列化程序的查询限制?

jquery - 使用 Ajax、Django 将上下文传递到模板中

python - 属性错误 : 'Pipeline' object has no attribute '_transfer_param_map_to_java'

python - 在 json 上上传图像 DJANGO REST FRAMEWORK

Django Celery 多个工作线程和多个队列

Django休息框架: Use DELETE on GenericAPIView without implementing Retrieve

python - 如何将每日数据绘制为月平均值(针对不同年份)