Django 是 Python API 开发中最流行的框架之一,在这个教程中,咱们来学习如何使用它。python
Django 全部 Web 框架中最全面的,也是最受欢迎的一个。自 2005 年以来,其流行度大幅上升。linux
Django 是由 Django 软件基金会维护,而且得到了社区的大力支持,在全球拥有超过 11,600 名成员。在 Stack Overflow 上,约有 191,000 个带 Django 标签的问题。Spotify、YouTube 和 Instagram 等都使用 Django 来构建应用程序和数据管理。git
本文演示了一个简单的 API,经过它可使用 HTTP 协议的 GET 方法来从服务器获取数据。github
首先,为你的 Django 应用程序建立一个目录结构,你能够在系统的任何位置建立:web
$ mkdir myproject
$ cd myproject
复制代码
而后,在项目目录中建立一个虚拟环境来隔离本地包依赖关系:数据库
$ python3 -m venv env
$ source env/bin/activate
复制代码
在 Windows 上,使用命令 env\Scripts\activate
来激活虚拟环境。django
而后,安装 Django 和 Django REST 模块:json
$ pip3 install django
$ pip3 install djangorestframework
复制代码
如今你的应用程序已经有了一个工做环境,你必须实例化一个新的 Django 项目。与 Flask 这样微框架不一样的是,Django 有专门的命令来建立(注意第一条命令后的 .
字符)。flask
$ django-admin startproject tutorial .
$ cd tutorial
$ django-admin startapp quickstart
复制代码
Django 使用数据库来管理后端,因此你应该在开始开发以前同步数据库,数据库能够经过 manage.py
脚本管理,它是在你运行 django-admin
命令时建立的。由于你如今在 tutorial
目录,因此使用 ../
符号来运行脚本,它位于上一层目录:后端
$ python3 ../manage.py makemigrations
No changes detected
$ python4 ../manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying sessions.0001_initial... OK
复制代码
建立一个名为 admin
,示例密码为 password123
的初始用户:
$ python3 ../manage.py createsuperuser \
--email admin@example.com \
--username admin
复制代码
在提示时建立密码。
为了使 Django 可以将信息传递给 HTTP GET 请求,必须将信息对象转化为有效的响应数据。Django 为此实现了“序列化类” serializers
。
在你的项目中,建立一个名为 quickstart/serializers.py
的新模块,使用它来定义一些序列化器,模块将用于数据展现:
from django.contrib.auth.models import User, Group
from rest_framework import serializers
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ['url', 'username', 'email', 'groups']
class GroupSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Group
fields = ['url', 'name']
复制代码
Django 中的视图是一个接受 Web 请求并返回 Web 响应的函数。响应能够是 HTML、HTTP 重定向、HTTP 错误、JSON 或 XML 文档、图像或 TAR 文件,或者能够是从 Internet 得到的任何其余内容。要建立视图,打开 quickstart/views.py
并输入如下代码。该文件已经存在,而且其中包含一些示例文本,保留这些文本并将如下代码添加到文件中:
from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from tutorial.quickstart.serializers import UserSerializer, GroupSerializer
class UserViewSet(viewsets.ModelViewSet):
""" API 容许查看或编辑用户 """
queryset = User.objects.all().order_by('-date_joined')
serializer_class = UserSerializer
class GroupViewSet(viewsets.ModelViewSet):
""" API 容许查看或编辑组 """
queryset = Group.objects.all()
serializer_class = GroupSerializer
复制代码
如今,你能够生成 URL 以便人们能够访问你刚起步的 API。在文本编辑器中打开 urls.py
并将默认示例代码替换为如下代码:
from django.urls import include, path
from rest_framework import routers
from tutorial.quickstart import views
router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)
# 使用自动路由 URL
# 还有登陆 URL
urlpatterns = [
path('', include(router.urls)),
path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
复制代码
这个示例项目的设置模块存储在 tutorial/settings.py
中,所以在文本编辑器中将其打开,而后在 INSTALLED_APPS
列表的末尾添加 rest_framework
:
INSTALLED_APPS = [
...
'rest_framework',
]
复制代码
如今,你能够测试构建的 API。首先,从命令行启动内置服务器:
$ python3 manage.py runserver
复制代码
你能够经过使用 curl
导航至 URL http://localhost:8000/users
来访问 API:
$ curl --get http://localhost:8000/users/?format=json
[{"url":"http://localhost:8000/users/1/?format=json","username":"admin","email":"admin@example.com","groups":[]}]
复制代码
使用 Firefox 或你选择的开源浏览器:
有关使用 Django 和 Python 的 RESTful API 的更多深刻知识,参考出色的 Django 文档。
Django 的主要优势:
Django 的主要缺点:
对你的应用程序或 API 来讲,Django 是绝佳选择。下载并熟悉它,开始开发一个迷人的项目!
via: opensource.com/article/19/…
做者:Rachel Waston 选题:lujun9972 译者:MjSeven 校对:wxy