全网第一篇系列讲述Django线上项目实战的文章。

上一篇我们主要讲了一下环境的搭建,那么这一节,我们要说这么几个东西:

  • 什么是RESTful API
  • 在Django中如何使用MongoDB
  • 编写Gua的API

啥是RESTful?

现在一提起来API,就都会提到一个叫 RESTful 的概念。那到底啥事 RESTful API 呢?

最通读是讲法,就是 RESTful API 就是正确是使用 http 请求。只要是用正确的姿势,正确的使用http,就是 RESTful API。

RESTful API 有以下几大特征:

  1. 请使用正确的http request method来请求数据。GET/POST/PUT/DELETE/PATCH;
  2. 面向资源编程,通过API提交的参数最好是名词,就像下面的gua:
http://<yourdomain.com>/gua
  1. API应该体现版本,需要在URL中加入v1,v2这种版本号:
http://<yourdomain.com>/v1/gua
  1. 需要体现API,所以最好加上api字样:
http://<yourdomain.com>/api/v1/gua
  1. 使用 HTTPS:
https://<yourdomain.com>/api/v1/gua
  1. 响应式设置代码状态;
  2. API的参数,可以加入变量:
http://<yourdomain.com>/api/v1/gua?num=100100&style=1
  1. 针对不同的method,对应的返回值要规范:
GET: 返回列表或者单条数据
POST: 新增的数据
PUT: 返回更新数据
PATCH: 局部更新,返回更新数据
DELETE: 返回空文档
  1. 如果有错误信息,则需要在返回的数据里面,将错误码写在code里;
  2. 返回的数据详细内容,放在data里面:
{"code":10001,"data": {"id": 1,"name": "peekpa"}
}

以上就是RESTful API的规范,实际操作起来,可能多多少少会有出入,请以具体的需求为准来设计API。

Django和MongoDB的结合

一般情况,Django使用的都是 RDB(Relational Database),比如MySQL,还有自带的sqllite。我们这里将要使用的是MongoDB,非关系型数据库。

为啥这里要使用MongoDB,是因为之前项目的数据都在MongoDB里面存储的,所以这里为了省事儿,就直接使用原来的数据库了。

在Django里面使用MongoDB,首先,我们需要安装库:

mongoengine==0.15.0
djangorestframework==3.10.3
Markdown==3.1.1
django-filter==2.2.0

可以直接通过命令来安装:

$ pip install djangorestframework markdown Django-filter mongoengine

安装好之后,我们需要在settings.py改一些设置。

首先将DATABASES改为,将原来系统模板生成的配置修改为None:

DATABASES = {'default': {'ENGINE': None,}
}

然后我们需要加入以下代码:

from mongoengine import connectMONGODB_DATABASES = {"default": {"name": <DatabaseName>, #这里填写的是MongoDB的DatabaseName"host": <88.88.88.88>, # MongoDB的host IP地址"tz_aware": True, #设置时区},
}connect(<DatabaseName>, host=<IP address>, port=<port Num>)

这里说的可能有点抽象,我们拿下面的一个具体例子来说一下:

上图是我云服务器上的一个MongoDB内容截图,假设我的云服务器的公网IP地址是11.12.13.15,那么我们看到这张图里面,对应的DatabseNameZhouyiTestCollectionNamegua64,MongoDB的端口号27017

那么我们按照上面的参数,就需要把之前的代码填写成一下这个样子:

from mongoengine import connectMONGODB_DATABASES = {"default": {"name": "ZhouyiTest", "host": "11.12.13.15", "tz_aware": True, #设置时区},
}connect("ZhouyiTest", host="11.12.13.15", port=27017)

接着,在settings.py文件里,我们要把rest_framework加到INSTALLED_APPS里面:

INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','apps.Gua.apps.GuaConfig','rest_framework' #新加的内容
]

然后,我们去Gua/models.py文件里面,去编写 Gua 的bean:

from mongoengine.fields import *
from mongoengine.document import Document# Create your models here.class Gua(Document):meta = {'collection': 'gua64'} #这里和之前提到的CollectionName一一对应gua_number = StringField()gua_sub_title = StringField()gua_title = StringField()gua_serial_text = StringField()gua_serial = StringField()gua_onw = StringField()gua_two = StringField()gua_three = StringField()gua_four = StringField()gua_five = StringField()

接着,我们在Gua目录下面,创建一个serializer.py文件,用来编写序列化,将里面的代码改写成这样:

from rest_framework import serializers
from .models import Guaclass GuaSerializer(serializers.Serializer):gua_number = serializers.CharField()gua_sub_title = serializers.CharField()gua_title = serializers.CharField()gua_serial_text = serializers.CharField()gua_serial = serializers.CharField()gua_onw = serializers.CharField()gua_two = serializers.CharField()gua_three = serializers.CharField()gua_four = serializers.CharField()gua_five = serializers.CharField()class Meta:model = Guafields = "__all__"

接着,我们就要编写View了,修改Gua/views.py文件:

from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework.renderers import JSONRenderer
from .models import Gua
from .serializer import GuaSerializer# Create your views here.
class GuaView(APIView):renderer_classes = [JSONRenderer]def get(self, request, format=None):check_num = request.GET.get('checkNum')result = Gua.objects.filter(gua_serial=check_num).first()serializer = GuaSerializer(result)return Response(data=serializer.data)

最后一步,我们需要将URL注册到urls.py文件里,所以,urls.py文件修改为:

from apps.Gua.views import GuaViewurlpatterns = [path('admin/', admin.site.urls),path('gua', GuaView.as_view()),
]

这个时候,启动Django项目,我们在浏览器里面,输入:

http://127.0.0.1:8000/gua?checkNum=111111

来看一下页面:

好的,说明我们的接口已经完成,通过URL可以顺利的从数据库里面捞数据了。

这里有个小细节,就是我们看到这个json结果里面,所有的key都是按照顺序排列的,如何能够修改顺序呢?当然,在Java里面,我们使用LinkedHashMap就可以实现,但是在Python里面,我们可以在serializer.py文件里面修改。

假设我们把gua_two修改到最后一个,也就是把代码编程下面这样:

class GuaSerializer(serializers.Serializer):gua_number = serializers.CharField()gua_sub_title = serializers.CharField()gua_title = serializers.CharField()gua_serial_text = serializers.CharField()gua_serial = serializers.CharField()gua_one = serializers.CharField()gua_three = serializers.CharField()gua_four = serializers.CharField()gua_five = serializers.CharField()gua_two = serializers.CharField() #移动到最后class Meta:model = Guafields = "__all__"

那么这个时候再请求一下接口,就会发现,gua_two那个已经到了最下面了:

好了,系列文章今天这一章节就先说到这里,正好马上就要双11了,又到了一年一度买服务器的时候了。照目前的趋势,皮爷今年肯定又会购买服务器了,服务器是真的不嫌多啊,一台服务器可以写网站,两台服务器就可以玩 RPC,三台可以搞集群。。。

下面这个链接大家可以在双十一的时候在阿里云享受优惠,注意,每年就此一次,错过了可就要等一年的哦:

https://www.aliyun.com/1111/2019/group-buying-share?ptCode=59102A206508DC8B402167FFD766D480647C88CF896EF535&userCode=nrkmbo9q&share_source=copy_link

喜欢的同学,可以把皮爷的文章分享出来,让跟多的人一起来学习。这个系列教程的文章,皮爷都会讲源代码放到 GitHub 上,获取整套教程源码唯一途径,关注『皮爷撸码』,回复『peekpa.com』

零基础教你玩转Django之02篇 —— 编写Gua的RESTful API相关推荐

  1. 零基础教你玩转Django之03篇 —— 完善Gua的API,分页和POST请求

    全网第一篇系列讲述Django线上项目实战的文章. 上一篇我们主要完成了Gua的API很简单的GET操作,那么这一节,我们要说这么几个东西: 使用RESTful API的规范来完善Gua的API 完善 ...

  2. 零基础教你玩转ESP8266(一) 重识ESP8266

    零基础教你玩转ESP8266(一) 重识ESP8266     单片机菜鸟 单片机菜鸟 当前离线 积分 24734 TA的每日心情 开心 2018-10-25 09:07 签到天数: 507 天 [L ...

  3. python3语音识别模块_零基础教你玩转语音控制,学习语音控制技术,打造智能生活很简单...

    大家好,我是阿乐,今天给大家讲解一下LD3320语音识别模块. 先来看看模块实物,它是长这个样子的: LD3320语音识别模块实物 我现在用来给大家做讲解的这个模块是已经集成了单片机在上面,这样子开发 ...

  4. 零基础教你搭建一个自己的靶场!

    零基础教你搭建一个自己的靶场! 目录 零基础教你搭建一个自己的靶场! 前言 部署 准备工作 安装环境 docker 的安装 docker-compose的安装 配置环境 安装 下载 配置 总结 前言 ...

  5. 零基础写Java知乎爬虫之进阶篇

    转载自 零基础写Java知乎爬虫之进阶篇 前面几篇文章,我们都是简单的实现了java爬虫抓取内容的问题,那么如果遇到复杂情况,我们还能继续那么做吗?答案当然是否定的,之前的仅仅是入门篇,都是些基础知识 ...

  6. 安琪拉教鲁班玩Java反射-业务场景篇

    安琪拉教鲁班玩Java反射-业务场景篇 Java 语言中有很多特性,其中有一项很重要的特性就是反射,我们在很多框架类的代码中可能会看到反射的身影,那实际在业务逻辑层是否可以用反射特性做些事情呢? 安琪 ...

  7. MySQL零基础从入门到精通(多表篇)

    MySQL零基础从入门到精通(多表篇) MySQL零基础从入门到精通(多表篇) 实际开发中,一个项目通常需要很多张表才能完成.例如:一个商城项目就需要分类表(category).商品表(product ...

  8. 【乘风破浪的开发者】华为云云享专家胡琦:快快使用ModelArts,零基础也能玩转AI!

    "自2018年10月发布以来,ModelArts累计服务了众多行业十几万开发者,通过基础平台的完备性和面向行业的知识沉淀以及平台化能力,使得AI应用开发更简单高效", 正如华为轮值 ...

  9. 零基础教你Unity制作像素鸟游戏 【文末源码】

    爆肝三天终于写完了,一文教你从零开启Unity制作像素鸟游戏 前言 一,新建目录 二,制作材质 三,场景搭建 四,创建地图 五,制作管道 六,创建主角 七,小鸟动起来 八,游戏状态控制 九,摄像机跟随 ...

最新文章

  1. CentOS 6.0 系统 LAMP(Apache+MySQL+PHP)安装步骤
  2. 22:00直播|当加班男程序猿 被美女主播~ 捕到后...
  3. tensorflow处理简单线性回归
  4. js 强校验 弱校验_还在手写表单校验逻辑?试试spring validation吧
  5. gradle 构建包含源码配置
  6. 【华为云技术分享】详解浏览器跨域的几种方法
  7. api postmain 鉴权_认证鉴权与API权限控制在微服务架构中的设计与实现(一)
  8. 【MySQL】【备份】mydumper安装与使用细节
  9. 利用SCCM2012中的导入计算机功能来实现定制化的操作系统部署
  10. 论文Mathtype公式自动编号
  11. RabbitMQ用户角色及权限控制
  12. 这个春天我能感觉的到
  13. 什么是软件设计模式?
  14. 使用selenium爬取百度文库文章(动态)
  15. acc转mp3最好用的格式转换器推荐?
  16. 精益管理研究院陈逸超 | 用精益思维创造数据价值金矿
  17. python桌面精灵_360uu游戏盒子
  18. 解决Vmware虚拟机startx进入图形界面卡退、白屏、黑屏的问题
  19. 2020年最好用的几个PHP开发工具推荐
  20. 图形处理(八)点云重建(上)点云滤波、尖锐特征边增采样、移除离群点

热门文章

  1. 工程导论第二章工程与科学
  2. Python Matplotlib 画心形曲线
  3. 手机端如何禁用默认键盘
  4. java生成函数签名
  5. jointjs使用总结
  6. 树莓派wiringPi安装及交叉编译
  7. 零基础如何备考PMP项目管理?
  8. 基于KMeans的微博聚类
  9. nginx强制www
  10. 通过二维码上传手机文件到服务器