【发布时间】:2018-03-24 19:12:11
【问题描述】:
不请自来,因为我被安排在一个 API 项目中,要求如下:
- 姜戈
- Django Rest 框架
- Python 3.5
- API 需要基于函数(所以没有类)
目标是一个以 JSON 格式返回数据(因此我只需要从 CRUD 设计原则中“读取”)供显示器内部使用的 API。
Django 本身必须连接到默认数据库和遗留的 MYSQL 数据(这可行)。我已经用settings.py 文件做到了这一点。
然后我创建了一个名为museum_api 的新应用程序;这也有效。
之后,我在python manage.py inspectdb --database=museum_data > models.py 的帮助下构建了遗留数据库的模型
上面的代码在项目的名为“musart”的根文件夹中为MYSQL数据库中的每个表生成了一个python文件(该文件夹包含:manage.py、musart和museum_api。)
然后我通过进入名为 museum_api 的文件夹创建了一个静态 JSON 响应并创建了一个文件:views.py 和 urls.py
我将它们留空了几秒钟,然后返回根文件夹并进入内部项目文件夹以编辑其中的 urls.py 文件。在那个文件中我添加了:
url(r'', include('museum_api.urls')),
其意图是 API 是人们在访问该子域时首先遇到的问题。这也很好用。
然后我回到文件夹museum_api并编辑views.py文件以创建两个静态JSON响应作为测试:
from rest_framework import status, renderers
from rest_framework.decorators import api_view
from rest_framework.response import Response
from django.http import HttpResponse
from django.utils.encoding import smart_text
@api_view(['GET'])
def view(request):
return Response({"name": "HERMÄNN", "test":"mytest"})
@api_view(['GET'])
def hello_world(request):
return Response({"message": "Hello, world!"})
def index(request):
return HttpResponse("""Hello, httpresonse is here!""")
接下来我在里面编辑了urls.py 文件:museum_api:
从 django.conf.urls 导入 url
从 。导入视图
urlpatterns = [
url(r'^view$', views.view, name='view'),
url(r'^hello$', views.hello_world, name='hello_world'),
url(r'^$', views.index, name='index'),
]
到目前为止,我已了解所有文档;每当我运行服务器并转到 url 时,我都会得到我期望的 Indexfile 或两个 JSON 响应。
在过去的几天里,我一直坚持让 API 具有交互性……这是项目的重点……我发现的所有项目和教程都使用类,这违反了核心要求之一。
在这个阶段我只有问题,没有工作代码......
1) 下一步是为每个 api 方法创建一个函数。这方面的一个示例是使用名为 artist 的 api 方法查询所有艺术家的函数。它应该采用的参数之一是“国家”。向 api 请求数据的一种可能方式是:url?artist;format=json;country=france
我会想到这样的东西(伪代码):
def artist_api(request):
data = select * from artists where country = 'france';
return (data)
2) 在 museum_api > views.py 中:为什么我需要在每个新功能之前放置一个@api_view['GET']?如果我忽略它,该功能将停止工作。
3) 我如何编写序列化程序,以便在 api 收到请求(例如国家示例)时,python 脚本知道要查询哪些数据库并返回正确的数据?
4) 与 3 相关:我需要在哪里创建 serializers.py 脚本?在我的 models.py 所在的根文件夹中?还是在应用程序文件夹中?
抱歉,问题太长了。 最好的问候
【问题讨论】:
标签: mysql django python-3.x django-rest-framework api-design