全网第一篇系列讲述Django线上项目实战的文章。sql
上一篇咱们主要讲了一下环境的搭建,那么这一节,咱们要说这么几个东西:数据库
如今一提起来API,就都会提到一个叫 RESTful 的概念。那到底啥事 RESTful API 呢?django
最通读是讲法,就是 RESTful API 就是正确是使用 http 请求
。只要是用正确的姿式,正确的使用http,就是 RESTful API。编程
RESTful API 有如下几大特征:json
http://www.peekpa.tech/gua复制代码
http://www.peekpa.tech/v1/gua复制代码
http://www.peekpa.tech/api/v1/gua复制代码
https://www.peekpa.tech/api/v1/gua复制代码
http://www.peekpa.tech/api/v1/gua?num=100100&style=1复制代码
GET: 返回列表或者单条数据POST: 新增的数据PUT: 返回更新数据PATCH: 局部更新,返回更新数据DELETE: 返回空文档复制代码
code
里;data
里面:{ "code":10001, "data": { "id": 1, "name": "peekpa" }}复制代码
以上就是RESTful API的规范,实际操做起来,可能多多少少会有出入,请以具体的需求为准来设计API。api
通常状况,Django使用的都是 RDB(Relational Database),好比MySQL,还有自带的sqllite。咱们这里将要使用的是MongoDB,非关系型数据库。浏览器
为啥这里要使用MongoDB,是由于以前项目的数据都在MongoDB里面存储的,因此这里为了省事儿,就直接使用原来的数据库了。bash
在Django里面使用MongoDB,首先,咱们须要安装库:服务器
mongoengine==0.15.0djangorestframework==3.10.3Markdown==3.1.1django-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
,那么咱们看到这张图里面,对应的DatabseName
是ZhouyiTest
,CollectionName
是gua64
,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 serializersfrom .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 = Gua fields = "__all__"复制代码
接着,咱们就要编写View了,修改Gua/views.py
文件:
from rest_framework.response import Responsefrom rest_framework.views import APIViewfrom rest_framework.renderers import JSONRendererfrom .models import Guafrom .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 = Gua fields = "__all__"复制代码
那么这个时候再请求一下接口,就会发现,gua_two
那个已经到了最下面了:
好了,系列文章今天这一章节就先说到这里,正好立刻就要双11了,又到了一年一度买服务器的时候了。照目前的趋势,皮爷今年确定又会购买服务器了,服务器是真的不嫌多啊,一台服务器能够写网站,两台服务器就能够玩 RPC,三台能够搞集群。。。
下面这个连接你们能够在双十一的时候在阿里云享受优惠,注意,每一年就此一次,错过了可就要等一年的哦:
https://www.aliyun.com/1111/2019/group-buying-share?ptCode=59102A206508DC8B402167FFD766D480647C88CF896EF535&userCode=nrkmbo9q&share_source=copy_link
喜欢的同窗,能够把皮爷的文章分享出来,让跟多的人一块儿来学习。这个系列教程的文章,皮爷都会讲源代码放到 GitHub 上,想要获取代码的同窗,请关注微信公众号『皮爷撸码』,而后回复『网站代码』便可得到连接地址。