飞道的博客

用 Django 开发一个 Python Web API

304人阅读  评论(0)

Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 Web 应用程序框架。它是Python API开发中最受欢迎的名称之一,自2005年成立以来,其知名度迅速提升。

Django由Django软件基金会(Django Software Foundation)维护,并获得了社区的大力支持,在全球拥有11,600多个成员。在Stack Overflow上,Django大约有191,000个带标签的问题。Spotify,YouTube和Instagram等网站都依赖Django进行应用程序和数据管理。

本文演示了使用HTTP协议的GET方法从服务器获取数据的简单API。

建立一个项目

首先,为您的Django应用程序创建一个结构;您可以在系统上的任何位置执行此操作:


   
  1. $ mkdir myproject
  2. $ cd myproject

然后创建一个虚拟环境,它能够使我们根据需要安装一些特定的包来跑通我们的程序,并且不影响当前环境,用完退出虚拟环境即可。


   
  1. $ python3 -m venv env
  2. $ source env/bin/activate

在Windows上,使用命令env \ Scripts \ activate激活Python虚拟环境。

安装Django和Django REST框架

接下来,安装Django和Django REST框架模块:


   
  1. $ pip3 install django
  2. $ pip3 install djangorestframework

实例化一个新的Django项目

既然您已经为应用程序创建了工作环境,那么您必须实例化一个新的Django项目。与像Flask这样的小框架不同,Django在此过程中包含专用命令(请注意第一个命令中的结尾.字符):


   
  1. $ django-admin startproject tutorial .
  2. $ cd tutorial
  3. $ django-admin startapp quickstart

Django使用数据库作为其后端,因此您应该在开始开发之前同步数据库。可以使用运行django-admin命令时创建的manage.py脚本来管理数据库。由于您当前位于tutorial路径中,因此请使用../命令来运行脚本,该脚本位于同一个路径中:


   
  1. $ python3 ../manage.py makemigrations
  2. No changes detected
  3. $ python4 ../manage.py migrate
  4. Operations to perform:
  5.   Apply all migrations: admin, auth, contenttypes, sessions
  6. Running migrations:
  7.   Applying contenttypes .0001_initial... OK
  8.   Applying auth .0001_initial... OK
  9.   Applying admin .0001_initial... OK
  10.   Applying admin .0002_logentry_remove_auto_add... OK
  11.   Applying admin .0003_logentry_add_action_flag_choices... OK
  12.   Applying contenttypes .0002_remove_content_type_name... OK
  13.   Applying auth .0002_alter_permission_name_max_length... OK
  14.   Applying auth .0003_alter_user_email_max_length... OK
  15.   Applying auth .0004_alter_user_username_opts... OK
  16.   Applying auth .0005_alter_user_last_login_null... OK
  17.   Applying auth .0006_require_contenttypes_0002... OK
  18.   Applying auth .0007_alter_validators_add_error_messages... OK
  19.   Applying auth .0008_alter_user_username_max_length... OK
  20.   Applying auth .0009_alter_user_last_name_max_length... OK
  21.   Applying auth .0010_alter_group_name_max_length... OK
  22.   Applying auth .0011_update_proxy_permissions... OK
  23.   Applying sessions .0001_initial... OK

在Django中创建用户

使用示例密码password123创建一个名为admin的初始用户:


   
  1. $ python3 ../manage.py createsuperuser \
  2.   --email admin@example.com \
  3.   --username admin

根据提示创建密码。

在Django中实现序列化组件和视图层

为了使Django能够将信息传递给HTTP GET请求,必须将传递对象转换为有效的响应数据。Django为此实现了序列化组件。

在您的项目中,通过创建一个名为quickstart / serializers.py的新模块来定义一些序列化器,该模块将用于数据传输:


   
  1. from django.contrib.auth.models  import User, Group
  2. from rest_framework  import serializers
  3. class UserSerializer(serializers.HyperlinkedModelSerializer):
  4.     class Meta:
  5.         model = User
  6.         fields = [ 'url''username''email''groups']
  7. class GroupSerializer(serializers.HyperlinkedModelSerializer):
  8.     class Meta:
  9.         model = Group
  10.         fields = [ 'url''name']

Django中的视图是一个接受Web请求并返回Web响应的函数。响应可以是HTML,或者是HTTP重定向,或者是HTTP错误,JSONXML文档,图像或TAR文件,或者可以从Internet获得的任何其他内容。要创建视图函数,请打开quickstart / views.py并输入以下代码。该文件模板已经存在,并且其中包含一些样板文本,因此请保留该文本并将其添加到文件中:


   
  1. from django.contrib.auth.models  import User, Group
  2. from rest_framework  import viewsets
  3. from tutorial.quickstart.serializers  import UserSerializer, GroupSerializer
  4. class UserViewSet(viewsets.ModelViewSet):
  5.      "" "
  6.     API endpoint  allows users to be viewed or edited.
  7.     " ""
  8.     queryset = User.objects.all().order_by( '-date_joined')
  9.     serializer_class = UserSerializer
  10. class GroupViewSet(viewsets.ModelViewSet):
  11.      "" "
  12.     API endpoint  allows groups to be viewed or edited.
  13.     " ""
  14.     queryset = Group.objects.all()
  15.     serializer_class = GroupSerializer

使用Django生成URL

现在,您可以生成URL,以便人们可以访问您的API。在文本编辑器中打开urls.py,并将默认示例代码替换为以下代码:


   
  1. from django.urls  import include, path
  2. from rest_framework  import routers
  3. from tutorial.quickstart  import views
  4. router = routers.DefaultRouter()
  5. router.register(r 'users', views.UserViewSet)
  6. router.register(r 'groups', views.GroupViewSet)
  7. # Use automatic URL routing
  8. # Can also include login URLs  for the browsable API
  9. urlpatterns = [
  10.     path( '', include(router.urls)),
  11.     path( 'api-auth/', include( 'rest_framework.urls', namespace= 'rest_framework'))
  12. ]

调整您的Django项目设置

此示例项目的设置模块存储在tutorial / settings.py中,因此请在文本编辑器中将其打开,然后将rest_framework添加到INSTALLED_APPS列表的末尾:


   
  1. INSTALLED_APPS = [
  2.     ...
  3.      'rest_framework',
  4. ]

测试您的Django API

现在,您可以测试已构建的API。首先,从命令行启动内置服务器:

$ python3 manage.py runserver

您可以使用curl获取URL http:// localhost:8000 / users来访问您的API:


   
  1. $ curl --get http: //localhost:8000/users/?format=json
  2. [{ "url": "http://localhost:8000/users/1/?format=json", "username": "admin", "email": "admin@example.com", "groups":[]}]

或使用Firefox浏览器等:

有关使用Django和Python的RESTful API的更深入的知识,请参阅Django文档(https://docs.djangoproject.com/en/2.2/)。

推荐阅读

如何在 Matplotlib 中更改绘图背景

Python 解释器 PyPy 7.3.3 版本发布!

有人在代码里下毒!慎用 pip install 命令

点击下方阅读原文加入社区会员

点赞鼓励一下


转载:https://blog.csdn.net/BF02jgtRS00XKtCx/article/details/110251784
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场