用 Django 开发一个 Python Web API的方法步骤
作者:Python中文社区 发布时间:2021-05-24 02:36:11
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/)。
来源:https://blog.csdn.net/BF02jgtRS00XKtCx/article/details/110251784


猜你喜欢
- 什么是协程协程(Coroutine)是一种比线程更加轻量级的并发方式,它不需要线程上下文切换的开销,可以在单线程中实现并发。协程通常具有以下
- 均方损失函数:这里 loss, x, y 的维度是一样的,可以是向量或者矩阵,i 是下标。很多的 loss 函数都有 size_averag
- 在Web上使用菜单可以极大地节约页面的空间,同时也比较的符合用户从Windows上继承下来的UI操作体验。在以往的Web页菜单设计中,我们普
- 一、正则与LIKE的区别 Mysql的正则表达式仅仅使SQL语言的一个子集,可以匹配基本的字符、字符串。例如:select * f
- 字符串是不可变类型,可以重新赋值,但不可以索引改变其中一个值,只能拼接字符串建立新变量索引和切片索引:越界会报错切片:越界会自动修改不包含右
- 本文实例讲述了Python 日志logging模块用法。分享给大家供大家参考,具体如下:demo.py(日志,输出到控制台):import
- 引言写这个小爬虫主要是为了爬校园论坛上的实习信息,主要采用了Requests库源码URLs.py主要功能是根据一个初始url(包含page页
- 继打游戏、看视频等摸鱼行为被监控后,现在打工人离职的倾向也会被监控。有网友爆料称知乎正在低调裁员,视频相关部门几乎要裁掉一半。而在知乎裁员的
- 目录循环加判断retrying我们在程序开发中,经常会需要请求一些外部的接口资源,而且我们不能保证每次请求一定会成功,所以这些涉及到网络请求
- 本文实例讲述了php实现的CSS更新类及其用法,非常实用。分享给大家供大家参考。具体如下:CSSUpdate.class.php类文件如下:
- 本文实例为大家分享了python3实现人脸识别的具体代码,供大家参考,具体内容如下第一种:import cv2import numpy as
- 交叉表(cross-tabulation,简称crosstab)是⼀种⽤于计算分组频率的特殊透视表。语法详解:pd.crosstab(ind
- 1. 下载RPM安装包, 因为安装MySQL的时候,软件会需要一依赖关系, 所以建议把所有的安装包下载下载, 再依次安装所以的RPM包。 2
- help函数是python的一个内置函数(python的内置函数可以直接调用,无需import),它是python自带的函数,任何时候都可以
- 有用的 Python 单行代码片段,只需一行代码即可解决特定编码问题!在本文中,云朵君将分享20 个 Python 一行代码,你可以在 30
- 下表列出了所有Python语言支持的成员运算符。 例如:试试下面的例子就明白了所有的Python编程语言提供会员运算符:#!/us
- Django文件上传,供大家参考,具体内容如下需求1、完成学生信息注册操作2、将学生信息入库3、将上传文件存放至项目下media文件夹下4、
- 阅读作者的上一篇相关文章:段正淳的css笔记(3)标题右侧“更多”的实现 段正淳的css笔记(4)1、css代码的简写css缩写的语法,对新
- 上下文管理器是一种 Python 构造,它提供了一个类似 try-finally 的环境,具有一致的接口和方便的语法,例如通过&ld
- 方法不是主流的。有一组数据,大概10万个左右,每一单位的值不会大于30000,要求按照由大到小的顺序不重复输出。参考无忧cosin的方法后(