初識Djangopython
—Python API接口編程入門mysql
Django是什麼?git
Django是一個開放源代碼的Web應用框架,由Python寫成。咱們的目標是用Python語言,基於Django框架,利用MVC模型,實現後臺方面的針對數據庫的API開發。先了解一下互聯網的WEB架構,web
如上圖:sql
互聯網的WEB架構大體分爲三層,web層、app層和數據庫層。Web層:如apache網站服務器;app層主要是應用業務;DB指後臺數據庫。隨着互聯網的高速發展,網站訪問量的增加、數據的累積、負載的太高,應用和數據庫的設計也面臨了更多的挑戰。業務的拆分、數據庫的切分已不是什麼新名詞。爲了方便往後系統的平滑擴展,咱們在系統設計的時候就須要規劃好APP業務實現模式。在這裏,咱們設計的APP也分爲前臺和後臺,前臺主要是展示,如界面、FORM等,後臺爲API接口,用來聯繫前臺界面和數據庫的交互,本文只涉及到APP設計中的後臺API接口設計和用Python實現的部分。數據庫
固然一個項目的開發離不開團隊的合做,咱們用GitLab來作開發代碼的版本管理,關於git的安裝和使用本文不以說明。apache
一、安裝Python2.8django
二、安裝Django模塊編程
三、Python開發編輯器PyCharmwindows
有了以上環境,咱們就能夠開工了,數據庫能夠直接用Sqlite,若是用mysql的話要安裝mysqldb模塊。
新人報道,先到項目組領個接口開發任務吧。
項目組分配任務:完成XX數據模型的接口設計
涉及到的表有:XX_TAB
涉及到的API接口有:
一、list,獲取XX_TAB表數據,傳入參數XX_ID,從數據庫中列出XX_ID相同的行。
二、add,刪除XX_TAB表一行數據,傳入PK_ID、XX_ID
三、update,更新XX_TAB表一行數據,傳入PK_ID、XX_ID
四、delete,刪除XX_TAB表一行數據,傳入PK_ID、XX_ID
說白了就是在應用層實現對XX_TAB標的查詢和增刪改操做,以用於前臺APP的調用,前臺APP不直接針對數據庫作任何操做,由調用API接口來實現對數據庫的查詢、增刪改。這樣設計的目的是下降業務模塊間的耦合性,提升APP和數據庫的靈活性,便於之後業務的升級變動,也是考慮到從此數據庫數據量的增加而便於數據庫的拆分和平滑擴展。
前面已經說過,咱們是團隊開發的,先將同窗們在git上已寫得代碼pull下來,第一次下載代碼,我是用git clone的命令複製到本地的,以下:
git clone http://git.xxx.cn/xxxtest/xxx.git
cd xxxtest #cd到項目目錄下
python manage.py runserver 127.0.0.1:8000 #啓動項目
注意:我是用git下載的代碼,不是本身新建的project。若是同窗們是新建項目的話,還需循序漸進從django-admin.py startproject [project_name]開始。
建立完項目後,Django框架會自動生成一些文件和文件夾,注意settings.py文件,關於數據庫設置處,默認以下代碼:
DATABASES = { |
在命令行下運行python manage.py runserver命令後,在項目文件下會自動生成一個db.sqlite3數據文件,Django默認數據庫爲sqlite,可改爲MySQL、Oracle、PG等,具體設置如MySQL以下:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'test', 'USER': 'test', 'PASSWORD': 'test123', 'HOST':'localhost', 'PORT':'3306', } } |
瞭解了數據庫的配置,咱們還須要瞭解一下項目目錄下的主要幾個文件:
PROJECT_NAME: 項目的容器。
manage.py: 一個實用的命令行工具,可以讓你以各類方式與該 Django 項目進行交互。
[PROJECT_NAME]/__init__.py: 一個空文件,告訴 Python 該目錄是一個 Python 包。
[PROJECT_NAME]/settings.py: 該 Django 項目的設置/配置。
[PROJECT_NAME]/urls.py: 該 Django 項目的 URL 聲明; 一份由 Django 驅動的網站"目錄"。
[PROJECT_NAME]/wsgi.py: 一個 WSGI 兼容的 Web 服務器的入口,以便運行你的項目。
上面是每一個項目的通用介紹,回到實際的開發中來。
咱們如今已經有了項目,我要作的是某個表的api接口,因而我在項目下新建了一個app,新建app用如下命令:
django-admin startapp xx_tab
這樣咱們就新建了一個xx_tab命名的app,咱們要作一些修改:
一、仍是打開settings.py文件,找到INSTALLED_APPS參數,在最後面加入xx_tab的app名,以下:
INSTALLED_APPS = [ |
二、修改xx_tab目錄下得而models.py文件,定義咱們須要建的表
# Create your models here. |
完成數據庫表的定義後,考慮到使用http來訪問數據庫的,那就離不開http的url地址。前面在文件介紹中說過用django-admin.py startproject [project_name]命令生成項目後,在項目層目錄下會有url的python文件,在每一個項目下用django-admin startapp xx_tab命令生成的app中也會有url的python文件,url比如是網站網頁的目錄,是用來在web界面上訪問的地址。通常,url會對於view,view比如是網頁,url指向view。
項目rul、app rul和app view之間的調用關係,以下圖:
Project rul格式:
# 幾個測試接口 router = routers.DefaultRouter() urlpatterns = [ url( r'/log/', include(xx_tab.urls')), ] |
App rul格式
urlpatterns = [ |
以上是兩層url調用舉例:
url在瀏覽器中的完整寫法應該以下:
http://127.0.0.1/xx_tab/list/?xx_id=1
完成了在Django框架models.py文件中定義了xx_tab表的相關信息,咱們就能夠用django命令來生成表。
python manage.py makemigrations xx_tab
注意:xx_tab是app名,此命令會在xx_tab app下migrations目錄下生成一個0001_initial.py文件,此文件定義了建表信息,若是發現表定義有問題,在修改models.py中的定義後,須要刪除0001_initial.py文件,重跑python manage.py makemigrations xx_tab,從新生成0001_initial.py。
執行python manage.py migrate xx_tab,在數據庫中生成xx_tab表。
打開Sqlite數據庫,在windows下可用
d:\dt\sqlite\sqlite3.exe db.sqlite3 打開當前的數據庫,sqlite3.exe可在網上下載。
.table可查看當前的表。
.schema tab_name 可查看錶結構定義。
咱們要模擬從前臺發出一個get或post請求,調用要寫的api接口實現插入數據庫的功能,
以下界面,模擬前臺調用
上面是一個插入演示頁面,post相關表字段值,完成對數據庫的一行數據插入。
完成這已插入過程的邏輯關係以下:
View.py主要是接收前臺post過來的數據,並在完成處理、存儲後返回相關信息。
Service.py主要處理數據,格式化數據
數據庫接口層主要處理對數據庫的數據存儲和訪問。
view.py
開頭,如下這幾行是必不可少的
# -*- coding: utf-8 -*-
from rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.response import Response
由於在urls.py中咱們定義的是url(r'add/$', views.add_xx_tab)
add指向views.add_xx_tab
因此咱們在views中須要定義add_xx_tab函數
@api_view(['POST', 'GET'])
def xx_tab_add(request, *args):
#一、接收request數據
#二、處理數據
#三、返回結果
基於django rest_framework,在處理client http request時須要用到@api_view修飾。
同時,咱們也須要弄清楚對於從client端GET或POST過來的數據咱們怎麼處理。
#一、接收request數據
if request.method == 'GET': do_something() elif request.method == 'POST': do_something_else() |
若是是GET,須要處理request .query_params;若是是post須要處理request .data
if request.method == 'GET': for k in request .query_params: dict[k] = request .query_params[k] return dict elif request.method == 'POST': for k in request.data dict[k] = request .data [k] return dict |
#二、處理數據
首先要判斷get或post過來的數據是否知足咱們的要求,例如缺乏字段、類型錯誤等。
若是數據沒有問題,再存入數據庫。
主要是對上面dict的處理,主要都是python語句實現,不涉及Django,此處省略。
邏輯過程:
一、判斷傳入的request是否缺乏相應的字段
二、判斷傳入的request是否有類型錯誤
方法:
例如僱員表,add一行須要有如下信息,先定義一個list,用來和傳入數據做對比便可
emp = ["empno:int","ename:str","job:str","mgr:int","hiredate:str","sal:int",
"comm:int","deptno:int"]
若是
#三、返回結果
直接返回插入成功便可。
本文簡單介紹基於Django api後臺接口開發方法,新學Django,內容僅供參考。