全網第一篇系列講述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 上,想要獲取代碼的同窗,請關注微信公衆號『皮爺擼碼』,而後回覆『網站代碼』便可得到連接地址。