虛擬環境

在開始之前可以先透過virtualenv套件來打包虛擬環境

安裝套件

1
> pip install virtualenv

接著進到欲建立環境的資料夾內輸入以下指令即可建立虛擬環境並啟用 #on windows

1
2
3
4
5
6
7
8
9
> mkdir server #建立專案名稱
> cd server

> virtualenv venv #建立虛擬環境 venv 即為虛擬環境名稱

> cd venv/Scripts
> activate #啟用虛擬環境

> dectivate #結束虛擬環境

啟用後可以發現前面多了(venv) 這樣就是啟用成功囉!

目前專案的架構會如下:

server/                  # 專案名稱
    venv/                # 虛擬環境
        Lib/    
        Scripts/        
        .gitignore     
        pyvenv.cfg        
       

環境設定

在開始之前需要安裝相關套件

1
2
> pip install Django
> pip install djangorestframework

建立Django專案

接著將路徑切回server資料夾下 開始建立專案資料夾囉!

1
> django-admin startproject server

目前專案的架構會如下:

server/                  # 專案名稱
    server/              # App名稱
        __init__.py      
        asgi.py          
        setting.py       # 專案的設定檔
        urls.py          # 專案的URL request的程式
        wsgi.py          
    manage.py            # 管理Django專案的程式
    venv/                # 虛擬環境
        Lib/    
        Scripts/        
        .gitignore     
        pyvenv.cfg

Django操作指令

建立完成後基本上就可以開始運作了

1
2
3
4
5
6
> python manage.py makemigrations #創建模型資料庫
> python manage.py migrate #模型資料庫移植

> python createsuperuser #建立超級用戶

> python manage.py runserver #運行

關於模型與資料庫的部分就不多解釋啦 因為還有牽扯到許多東西 如果想要了解如何運用的可以自行查詢資料
建立超級用戶可以管理資料庫內的東西 在運行的時候進入到 http://localhost:8000/admin/ 即可進入到管理者介面~

程式碼

urls.py
1
2
3
4
5
6
7
8
from django.contrib import admin
from django.urls import path
from server import views

urlpatterns = [
path('admin/', admin.site.urls),
path('server/', views.main),
]

在server/server資料夾下建立views.py並新增以下內容

views.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from django.http import JsonResponse
from requests import Response
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status
import base64
from django.http import HttpResponse

@api_view(['GET', 'POST'])
def main(request, format=None):

if request.method == 'POST':
myDict = request.data.dict()
imgStr = myDict['img']
fileName = myDict['fileName']
imgdata = base64.b64decode(imgStr)
with open(fileName, 'wb') as f:
f.write(imgdata) # 在server儲存影像
return JsonResponse({'hello': "success!"})

這樣就完成啦!!
因此我們只要運行程式後post至 http://localhost:8000/server/ 並夾帶我們想要丟之影像 就可以放照片到server端上並將影像存至server端

至於要怎麼post呢?
除了可以透過postman這個工具以外,我們也可以利用python的request套件來post資料~
以下為簡單的範例程式碼

upload.py
1
2
3
4
5
6
7
8
9
10
11
import os
import base64
import requests

uploadAddress = 'http://127.0.0.1:8000/server/'

with open('1.png', 'rb') as f:
base64_data = base64.b64encode(f.read())
post_data = { 'img': base64_data, 'fileName': 'ss.png' }

r = requests.post(uploadAddress, data=post_data)

整體來說就是在運行 python manage.py runserver 後我們的api就是處於可以使用的狀態下

接著我們再透過例外一個python程式(or postman工具)來post影像到該server端 這樣server端就可以接收到我們的資料啦!
(兩個檔案同時運行 python manage.py runserver & python upload.py)

這樣簡單的api就完成了!

參考資料

  1. Django REST Framework - Build an API from Scratch