用 Django 开发一个 Python Web API的方法步骤


Posted in Python onDecember 03, 2020

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应用程序创建一个结构;您可以在系统上的任何位置执行此操作:

$ mkdir myproject
$ cd myproject

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

$ python3 -m venv env
$ source env/bin/activate

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

安装Django和Django REST框架

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

$ pip3 install django
$ pip3 install djangorestframework

实例化一个新的Django项目

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

$ django-admin startproject tutorial .
$ cd tutorial
$ django-admin startapp quickstart

Django使用数据库作为其后端,因此您应该在开始开发之前同步数据库。可以使用运行django-admin命令时创建的manage.py脚本来管理数据库。由于您当前位于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

在Django中创建用户

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

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

根据提示创建密码。

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

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

在您的项目中,通过创建一个名为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 endpoint allows users to be viewed or edited.
  """
  queryset = User.objects.all().order_by('-date_joined')
  serializer_class = UserSerializer
 
class GroupViewSet(viewsets.ModelViewSet):
  """
  API endpoint allows groups to be viewed or edited.
  """
  queryset = Group.objects.all()
  serializer_class = GroupSerializer

使用Django生成URL

现在,您可以生成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)
 
# Use automatic URL routing
# Can also include login URLs for the browsable API
urlpatterns = [
  path('', include(router.urls)),
  path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

调整您的Django项目设置

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

INSTALLED_APPS = [
  ...
  'rest_framework',
]

测试您的Django API

现在,您可以测试已构建的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文档(https://docs.djangoproject.com/en/2.2/)。

到此这篇关于用 Django 开发一个 Python Web API的方法步骤的文章就介绍到这了,更多相关Django 开发Python Web内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python实现简单遗传算法
Mar 19 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
May 31 Python
解决Shell执行python文件,传参空格引起的问题
Oct 30 Python
python里运用私有属性和方法总结
Jul 08 Python
基于django ManyToMany 使用的注意事项详解
Aug 09 Python
Django admin.py 在修改/添加表单界面显示额外字段的方法
Aug 22 Python
50行Python代码实现视频中物体颜色识别和跟踪(必须以红色为例)
Nov 20 Python
Tensorflow 实现分批量读取数据
Jan 04 Python
Django-migrate报错问题解决方案
Apr 21 Python
pandas中read_csv、rolling、expanding用法详解
Apr 21 Python
django创建超级用户时指定添加其它字段方式
May 14 Python
python3.6中anaconda安装sklearn踩坑实录
Jul 28 Python
分享unittest单元测试框架中几种常用的用例加载方法
Dec 02 #Python
python 使用cycle构造无限循环迭代器
Dec 02 #Python
python 使用csv模块读写csv格式文件的示例
Dec 02 #Python
python 发送邮件的四种方法汇总
Dec 02 #Python
如何用PyPy让你的Python代码运行得更快
Dec 02 #Python
python 实现波浪滤镜特效
Dec 02 #Python
python 如何对logging日志封装
Dec 02 #Python
You might like
PHP 的 __FILE__ 常量
2007/01/15 PHP
可定制的PHP缩略图生成程式(需要GD库支持)
2007/03/06 PHP
php注销代码(session注销)
2012/05/31 PHP
百度ping方法使用示例 自动ping百度
2014/01/26 PHP
PHP常用函数之根据生日计算年龄功能示例
2019/10/21 PHP
让焦点自动跳转
2006/07/01 Javascript
借助script进行Http跨域请求:JSONP实现原理及代码
2013/03/19 Javascript
jquery ajax传递中文参数乱码问题及解决方法说明
2014/02/07 Javascript
ff chrome和ie下全局动态定位的异同及全局高度的取法
2014/06/30 Javascript
jquery获取文档高度和窗口高度汇总
2016/01/25 Javascript
weebox弹出窗口不居中显示的解决方法
2017/11/27 Javascript
ES6学习笔记之map、set与数组、对象的对比
2018/03/01 Javascript
JavaScript学习笔记之DOM操作实例分析
2019/01/08 Javascript
Vue列表循环从指定下标开始的多种解决方案
2020/04/08 Javascript
[52:20]DOTA2-DPC中国联赛正赛 SAG vs XGBO3 第一场 3月5日
2021/03/11 DOTA
Python中关于字符串对象的一些基础知识
2015/04/08 Python
python基于phantomjs实现导入图片
2016/05/13 Python
python 生成图形验证码的方法示例
2018/11/11 Python
Python3实现对列表按元组指定列进行排序的方法分析
2018/12/22 Python
Pandas之DataFrame对象的列和索引之间的转化
2019/06/25 Python
Python交互环境下打印和输入函数的实例内容
2020/02/16 Python
解析python 中/ 和 % 和 //(地板除)
2020/06/28 Python
python使用smtplib模块发送邮件
2020/12/17 Python
HTML5新增form控件和表单属性实例代码详解
2019/05/15 HTML / CSS
canvas实现手机的手势解锁的步骤详细
2020/03/16 HTML / CSS
世界著名的顶级牛排:Omaha Steak(奥马哈牛排)
2016/09/20 全球购物
介绍一下JMS编程步骤
2015/09/22 面试题
大学本科生的个人自我评价
2013/12/09 职场文书
计算机维护专业推荐信
2014/02/27 职场文书
物业保安员岗位职责
2014/03/14 职场文书
会计毕业生自荐书
2014/06/12 职场文书
十佳党员事迹材料
2014/08/28 职场文书
2014年销售助理工作总结
2014/12/01 职场文书
2014年残疾人工作总结
2014/12/06 职场文书
爱心捐款倡议书:点燃希望,传递温暖
2019/11/04 职场文书
浅谈golang package中init方法的多处定义及运行顺序问题
2021/05/06 Golang