zoukankan      html  css  js  c++  java
  • 用 Django 开发一个 Python Web API

    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.  
       
    4.  
      class UserSerializer(serializers.HyperlinkedModelSerializer):
    5.  
          class Meta:
    6.  
              model = User
    7.  
              fields = ['url', 'username', 'email', 'groups']
    8.  
       
    9.  
      class GroupSerializer(serializers.HyperlinkedModelSerializer):
    10.  
          class Meta:
    11.  
              model = Group
    12.  
              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.  
       
    5.  
      class UserViewSet(viewsets.ModelViewSet):
    6.  
          """
    7.  
          API endpoint  allows users to be viewed or edited.
    8.  
          """
    9.  
          queryset = User.objects.all().order_by('-date_joined')
    10.  
          serializer_class = UserSerializer
    11.  
       
    12.  
      class GroupViewSet(viewsets.ModelViewSet):
    13.  
          """
    14.  
          API endpoint  allows groups to be viewed or edited.
    15.  
          """
    16.  
          queryset = Group.objects.all()
    17.  
          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.  
       
    5.  
      router = routers.DefaultRouter()
    6.  
      router.register(r'users', views.UserViewSet)
    7.  
      router.register(r'groups', views.GroupViewSet)
    8.  
       
    9.  
      # Use automatic URL routing
    10.  
      # Can also include login URLs for the browsable API
    11.  
      urlpatterns = [
    12.  
          path('', include(router.urls)),
    13.  
          path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
    14.  
      ]

    调整您的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浏览器等:

    视频资料自取
    http://www.makeru.com.cn/live/5286_1688.html?s=143793

  • 相关阅读:
    1月28日 layout_list_item
    1月27日 listview_MyListAdapter
    1月26日 listviewxml
    1月25日 textview
    1月24日 人月神话3
    体温填报(三)
    体温填报(二)
    体温填报(一)
    家庭记账本(六)
    家庭记账本(五)
  • 原文地址:https://www.cnblogs.com/jinwenyi/p/14081123.html
Copyright © 2011-2022 走看看