作为一个修电脑的老家伙,有的时候要开发一个啥系统的,就需要搞定后台,后台老板要搞定,才有底气。

一般我们搞定接口,都是用restful API.
rest 指的是一组架构约束条件和原则,提供了一个新的架构设计思路,满足这些约束条件和原则的应用程序或设计就是 RESTful

在REST规则中,有两个基础概念:对象、行为
对象就是我们要操作的对象,例如添加用户的操作,那么对象就是user
行为有4种常用的:查看、创建、编辑、删除

rest的提出者很巧妙的利用http现有方法来对应这4种行为:GET - 查看POST - 创建PUT - 编辑DELETE - 删除

今天要讲的是rest_framework框架,它是基于Django的,帮助我们快速开发符合RESTful规范的接口框架。

我们先来说说序列化器这个东西。在rest_framework中,序列化器是一个位于客户端和后台之间的中间层。这个中间层一个最基本的作用就是接受前端JSON字符串转化为后台python可以识别的对象;从后台获取python对象然后转化为给前端的JSON格式字符串。当然如果它仅仅是这个作用的话那用json.dumps和json.loads差不多了。一个亮点在于序列化器可以定义一些字段,让进出的数据可以“一个萝卜一个坑”地填入序列化器,从而就可以方便地进行格式转化,顺便还可以做做数据校验这种工作。序列化器的另一个方便之处在于它可以和django的模型层进行互动,从而大幅度减少了编码量。下面我们来看看具体的序列化器

序列化器的类在rest_framework.serializers中,最基本的一个序列化器类是Serializer。

我们通过继承Serializer类定义自己的序列化器类。通常在类中需要指出本序列化器所有需要进行处理的字段名和字段类型,看起来有点像在定义一个Model或者一个Form。

OK, 开战吧。
先准备环境,安装django和djangorestframework

pip install django
pip install djangorestframework

建一个项目:

django-admin startproject xxx
cd xxx
python manage.py startapp yyy

项目建好后,改配置:

INSTALLED_APPS = [...'bb','rest_framework'
]

文件末尾增加如下REST_FRAMWORK配置, 以使Api权限生效

REST_FRAMEWORK = {'DEFAULT_PERMISSION_CLASSES': ['rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly',]
}

安装好mysql后,就可以:

mysql -u root -p
show databases;

为Django项目创建数据库

create database rouboinfo default charset utf8 collate utf8_general_ci;

项目里面数据库的信息也要改
默认是:

DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': os.path.join(BASE_DIR, 'db.sqlite3'),}
}

改成:

'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'rouboinfo','USER': 'root','PASSWORD': 'root','HOST': '127.0.0.1','PORT': '3306',}

初始化数据库

python manage.py makemigrations
python manage.py migrate

定义数据库表。
这里我们只演示一个记录设备启动次数的api接口所需的基本字段。

from django.db import modelsclass DeviceReport(models.Model):"""收集设备相关的统计数据report_id自增id作为主键report_type上报类型,比如启动上报:openreport_time上报时间戳device_id可以描述设备的idip_address公网ip地址"""report_id = models.IntegerField(primary_key=True)report_type = models.CharField(max_length=100)report_time = models.DateTimeField(auto_now_add=True)device_id = models.CharField(max_length=200)ip_address = models.CharField(max_length=50)

在每次修改model之后,都需要进行迁移和生效动作,毕竟我们修改了数据库结构了。

python manage.py makemigrations
python manage.py migrate

执行成功后,会生成rouboapi_devicereport的表。
然后做接口:
实现序列化器
我们使用Django REST framework 提供的序列化器简化代码。

在项里面建一个api文件夹
建立Serializers.py文件

from rest_framework import serializers
from ..models import DeviceReport#class DeviceReportSerializer(serializers.HyperlinkedModelSerializer):"""序列化上报接口数据#class Meta:#    model = DeviceReport#    fields = ('report_id', 'report_type', 'report_time', 'device_id', 'ip_address')class DeviceReportSerializer(serializers.ModelSerializer):class Meta:model = DeviceReport  # 要序列化的模型fields = '__all__'  # 要序列化的字段

建立views.py

from rest_framework import generics
from .serializers import DeviceReportSerializer
from ..models import DeviceReportclass DeviceReportlist(generics.ListCreateAPIView):queryset = DeviceReport.objects.all()serializer_class = DeviceReportSerializerclass DeviceReportDetail(generics.RetrieveUpdateDestroyAPIView):queryset = DeviceReport.objects.all()serializer_class = DeviceReportSerializer

建立url文件

from django.urls import path
from . import viewsapp_name = 'bb'   # 指定命名空间urlpatterns = [path('report/', views.DeviceReportlist.as_view(), name='report_list'),path('report/<pk>/', views.DeviceReportDetail.as_view(), name='report_list_detail'),]

然后配置项目路由:

from django.contrib import admin
from django.urls import path, include
from rest_framework.documentation import include_docs_urlsurlpatterns = [path('admin/', admin.site.urls),path('api/bb/', include('bb.api.urls', namespace='bb')),

就可以运行起来了:

python manage.py runserver

浏览器中输入:http://localhost:8000/api/bb/report/

建立一个用户登陆,就可以操作了

python manage.py createsuperuser

不建立一个用户,是无权限操作的。
登陆后就可以看到操作按钮了

查询下数据库,就有结果了:

然后加上文档:

from django.contrib import admin
from django.urls import path, include
from rest_framework.documentation import include_docs_urlsurlpatterns = [path('admin/', admin.site.urls),path('api/bb/', include('bb.api.urls', namespace='bb')),path('docs/', include_docs_urls(title='文档')),
]

http://localhost:8000/docs/

文档是这样子的:

大功告成!

更多精彩,请关注微信公众号:python爱好部落

asp.net mvc post 后台model_搭建restful api后台相关推荐

  1. 使用CodeIgniter框架搭建RESTful API服务

    RESTful不仅仅是一套协议标准更是一种设计思路. 在2011年8月的时候,我写了一篇博客<使用CodeIgniter框架搭建RESTful API服务>,介绍了RESTful的设计概念 ...

  2. Spring MVC中使用 Swagger2 构建Restful API

    0.Spring MVC配置文件中的配置 [java] view plain copy <!-- 设置使用注解的类所在的jar包,只加载controller类 --> <span s ...

  3. dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3(十)之Spring MVC中使用 Swagger2 构建Restful API...

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010046908/article/details/55047193 1.Swagger2是什么? ...

  4. 使用 dynamic 类型让 ASP.NET Core 实现 HATEOAS 结构的 RESTful API

    上一篇写的是使用静态基类方法的实现步骤: 使用dynamic (ExpandoObject)的好处就是可以动态组建返回类型, 之前使用的是ViewModel, 如果想返回结果的话, 肯定需要把View ...

  5. ginapi服务器性能,基于gin web框架搭建RESTful API服务

    这篇主要学习go项目中的项目结构.项目规范等知识,ROM采用的database/sql的写法. 1.技术框架 利用的是ginweb框架,然后ROM层选用database/sql,安装mysql驱动.安 ...

  6. ASP.NET MVC 2示例Tailspin Travel UI层分析

    Tailspin Travel 是一个旅游预订的应用程序示例,最新版本采用ASP.NET MVC 2技术构建,主要使用 DataAnnotations 验证, 客户端验证和ViewModels,还展示 ...

  7. 使用ASP.NET Core 3.x 构建 RESTful API - 1. 开始

    以前写过ASP.NET Core 2.x的REST API文章,今年再更新一下到3.0版本. 预备知识:ASP.NET Core 和 C# 工具:Visual Studio 2019最新版(VSCod ...

  8. Spacebuilder:为什么选择asp.net mvc?

    该资料为Spacebuilder官方内部资料,主要详细阐述了Spacebuilder从1.0到2.0的在架构上的改变,为什么选择了微软最新的asp.net mvc技术,如何搭建一个更好的Web2.0社 ...

  9. angular.js的路由和模板在asp.net mvc 中的使用

    首先创建asp.NET mvc 程序,创建一个web api : 1 public class UserController : ApiController 2 { 3 private static ...

最新文章

  1. Android 判断某个服务是否正在运行
  2. BZOJ3945 : 无聊的邮递员
  3. JAVA web项目报错no sigar-x86-winnt.dll in java.library.path
  4. Aliyun Java Initializr 和 Spring 官方的到底有什么区别?
  5. 操作系统(二十九)预防死锁
  6. Juniper Space License Issue on Citrix Xen Environment
  7. 如何使用Java 8流快速替换列表中的元素
  8. Coursera自动驾驶课程第10讲:Feedforward Neural Networks
  9. 手机访问服务器中的数据库文件,手机连接服务器数据库文件在哪里
  10. hyper-v虚拟服务器内存满了,在Hyper-V Dynamic Memory里设置虚拟内存
  11. django-动态的读取静态目录路径
  12. Java指定几个标点符号(或分割)分割字符
  13. HTTP、websocket、XMPP、COAP、MQTT和DDS协议对比
  14. Activity启动模式之SingleTask模式各种跳转
  15. python爬取网易云课堂python课程
  16. echarts树状图怎么设置主节点和子节点的距离_教你秒懂CAD出图比例正确设置技巧...
  17. 如何生成一个二维码?
  18. Labelme标注流程
  19. 崩坏3服务器维护什么时候维护好,崩坏3 11月1日更新了什么_维护到什么时候结束...
  20. QT播放本地视频和网络视频

热门文章

  1. 介绍Calico eBPF数据平面:Linux内核网络、安全性和跟踪(Kubernetes、kube-proxy)
  2. 代码重新发布后docker服务会不会受影响_分享点经验 | 浅谈微服务架构
  3. 联想万全t260磁盘阵列_联想万全T260G3服务器安装windows2008R2系统
  4. pcre安装_Nginx | Nginx的介绍和安装
  5. Android中MediaRecorder.stop()报错 java.lang.RuntimeException: stop failed.
  6. delete index mysql_为什么MySQL不建议delete删除数据「心得分享」
  7. asp activex 读取服务器上的文件,webshell中上传asp文件调用服务器ActiveX控件溢出获取shell...
  8. oracle迁移需要注意配置文件,xtts迁移实践
  9. OpenShift 4.3 - 基于虚拟机的BareMetal离线安装(1-2)
  10. 带有服务器回调的通用客户端——服务器 DotNet远程处理