零基礎教你玩轉Django之02篇 —— 編寫Gua的RESTful API

全網第一篇系列講述Django線上項目實戰的文章。sql

上一篇咱們主要講了一下環境的搭建,那麼這一節,咱們要說這麼幾個東西:數據庫

  • 什麼是RESTful API
  • 在Django中如何使用MongoDB
  • 編寫Gua的API

啥是RESTful?

如今一提起來API,就都會提到一個叫 RESTful 的概念。那到底啥事 RESTful API 呢?django

最通讀是講法,就是 RESTful API 就是正確是使用 http 請求。只要是用正確的姿式,正確的使用http,就是 RESTful API。編程

RESTful API 有如下幾大特徵:json

  1. 請使用正確的http request method來請求數據。GET/POST/PUT/DELETE/PATCH;
  2. 面向資源編程,經過API提交的參數最好是名詞,就像下面的gua:
http://www.peekpa.tech/gua複製代碼
  1. API應該體現版本,須要在URL中加入v1,v2這種版本號:
http://www.peekpa.tech/v1/gua複製代碼
  1. 須要體現API,因此最好加上api字樣:
http://www.peekpa.tech/api/v1/gua複製代碼
  1. 使用 HTTPS:
https://www.peekpa.tech/api/v1/gua複製代碼
  1. 響應式設置代碼狀態;
  2. API的參數,能夠加入變量:
http://www.peekpa.tech/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。api

Django和MongoDB的結合

通常狀況,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,那麼咱們看到這張圖裏面,對應的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 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 上,想要獲取代碼的同窗,請關注微信公衆號『皮爺擼碼』,而後回覆『網站代碼』便可得到連接地址。

相關文章
相關標籤/搜索