日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

初识Django —Python API接口编程入门

發(fā)布時(shí)間:2025/4/16 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 初识Django —Python API接口编程入门 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

初識(shí)Django

—Python API接口編程入門(mén)

一、WEB架構(gòu)的簡(jiǎn)單介紹

Django是什么?

Django是一個(gè)開(kāi)放源代碼的Web應(yīng)用框架,由Python寫(xiě)成。我們的目標(biāo)是用Python語(yǔ)言,基于Django框架,利用MVC模型,實(shí)現(xiàn)后臺(tái)方面的針對(duì)數(shù)據(jù)庫(kù)的API開(kāi)發(fā)。先了解一下互聯(lián)網(wǎng)的WEB架構(gòu),

如上圖:

互聯(lián)網(wǎng)的WEB架構(gòu)大致分為三層,web層、app層和數(shù)據(jù)庫(kù)層。Web層:如apache網(wǎng)站服務(wù)器;app層主要是應(yīng)用業(yè)務(wù);DB指后臺(tái)數(shù)據(jù)庫(kù)。隨著互聯(lián)網(wǎng)的高速發(fā)展,網(wǎng)站訪問(wèn)量的增長(zhǎng)、數(shù)據(jù)的累積、負(fù)載的過(guò)高,應(yīng)用和數(shù)據(jù)庫(kù)的設(shè)計(jì)也面臨了更多的挑戰(zhàn)。業(yè)務(wù)的拆分、數(shù)據(jù)庫(kù)的切分已不是什么新名詞。為了方便日后系統(tǒng)的平滑擴(kuò)展,我們?cè)谙到y(tǒng)設(shè)計(jì)的時(shí)候就需要規(guī)劃好APP業(yè)務(wù)實(shí)現(xiàn)模式。在這里,我們?cè)O(shè)計(jì)的APP也分為前臺(tái)和后臺(tái),前臺(tái)主要是展現(xiàn),如界面、FORM等,后臺(tái)為API接口,用來(lái)聯(lián)系前臺(tái)界面和數(shù)據(jù)庫(kù)的交互,本文只涉及到APP設(shè)計(jì)中的后臺(tái)API接口設(shè)計(jì)和用Python實(shí)現(xiàn)的部分。

?

當(dāng)然一個(gè)項(xiàng)目的開(kāi)發(fā)離不開(kāi)團(tuán)隊(duì)的合作,我們用GitLab來(lái)做開(kāi)發(fā)代碼的版本管理,關(guān)于git的安裝和使用本文不以說(shuō)明。

二、開(kāi)發(fā)環(huán)境搭建

1、安裝Python2.8

2、安裝Django模塊

3、Python開(kāi)發(fā)編輯器PyCharm

有了以上環(huán)境,我們就可以開(kāi)工了,數(shù)據(jù)庫(kù)可以直接用Sqlite,如果用mysql的話要安裝mysqldb模塊。

?

三、模塊設(shè)計(jì)要求

新人報(bào)道,先到項(xiàng)目組領(lǐng)個(gè)接口開(kāi)發(fā)任務(wù)吧。

項(xiàng)目組分配任務(wù):完成XX數(shù)據(jù)模型的接口設(shè)計(jì)

涉及到的表有:XX_TAB

涉及到的API接口有:

1、list,獲取XX_TAB表數(shù)據(jù),傳入?yún)?shù)XX_ID,從數(shù)據(jù)庫(kù)中列出XX_ID相同的行。

2、add,刪除XX_TAB表一行數(shù)據(jù),傳入PK_ID、XX_ID

3、update,更新XX_TAB表一行數(shù)據(jù),傳入PK_ID、XX_ID

4、delete,刪除XX_TAB表一行數(shù)據(jù),傳入PK_ID、XX_ID

說(shuō)白了就是在應(yīng)用層實(shí)現(xiàn)對(duì)XX_TAB標(biāo)的查詢和增刪改操作,以用于前臺(tái)APP的調(diào)用,前臺(tái)APP不直接針對(duì)數(shù)據(jù)庫(kù)做任何操作,由調(diào)用API接口來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的查詢、增刪改。這樣設(shè)計(jì)的目的是降低業(yè)務(wù)模塊間的耦合性,提高APP和數(shù)據(jù)庫(kù)的靈活性,便于以后業(yè)務(wù)的升級(jí)變更,也是考慮到今后數(shù)據(jù)庫(kù)數(shù)據(jù)量的增長(zhǎng)而便于數(shù)據(jù)庫(kù)的拆分和平滑擴(kuò)展。

?

四、實(shí)際開(kāi)發(fā)

1、Django基本格式介紹

前面已經(jīng)說(shuō)過(guò),我們是團(tuán)隊(duì)開(kāi)發(fā)的,先將同學(xué)們?cè)趃it上已寫(xiě)得代碼pull下來(lái),第一次下載代碼,我是用git clone的命令復(fù)制到本地的,如下:

git clone http://git.xxx.cn/xxxtest/xxx.git

cd xxxtest? #cd到項(xiàng)目目錄下

python manage.py runserver 127.0.0.1:8000? #啟動(dòng)項(xiàng)目

注意:我是用git下載的代碼,不是自己新建的project。如果同學(xué)們是新建項(xiàng)目的話,還需按部就班從django-admin.py startproject [project_name]開(kāi)始。

創(chuàng)建完項(xiàng)目后,Django框架會(huì)自動(dòng)生成一些文件和文件夾,注意settings.py文件,關(guān)于數(shù)據(jù)庫(kù)設(shè)置處,默認(rèn)如下代碼:

DATABASES?= {
????'default': {
????????'ENGINE':?'django.db.backends.sqlite3',
????????'NAME': os.path.join(BASE_DIR,?'db.sqlite3'),
??? }
}

在命令行下運(yùn)行python manage.py runserver命令后,在項(xiàng)目文件下會(huì)自動(dòng)生成一個(gè)db.sqlite3數(shù)據(jù)文件,Django默認(rèn)數(shù)據(jù)庫(kù)為sqlite,可改成MySQL、Oracle、PG等,具體設(shè)置如MySQL如下:

DATABASES = {

??? 'default': {

??????? 'ENGINE': 'django.db.backends.mysql',

??????? 'NAME': 'test',

??????? 'USER': 'test',

??????? 'PASSWORD': 'test123',

??????? 'HOST':'localhost',

??????? 'PORT':'3306',

??? }

}

了解了數(shù)據(jù)庫(kù)的配置,我們還需要了解一下項(xiàng)目目錄下的主要幾個(gè)文件:

PROJECT_NAME: 項(xiàng)目的容器。

manage.py: 一個(gè)實(shí)用的命令行工具,可讓你以各種方式與該 Django 項(xiàng)目進(jìn)行交互。

[PROJECT_NAME]/__init__.py: 一個(gè)空文件,告訴 Python 該目錄是一個(gè) Python 包。

[PROJECT_NAME]/settings.py: 該 Django 項(xiàng)目的設(shè)置/配置。

[PROJECT_NAME]/urls.py: 該 Django 項(xiàng)目的 URL 聲明; 一份由 Django 驅(qū)動(dòng)的網(wǎng)站"目錄"。

[PROJECT_NAME]/wsgi.py: 一個(gè) WSGI 兼容的 Web 服務(wù)器的入口,以便運(yùn)行你的項(xiàng)目。

上面是每個(gè)項(xiàng)目的通用介紹,回到實(shí)際的開(kāi)發(fā)中來(lái)。

2、新建app和表定義

我們現(xiàn)在已經(jīng)有了項(xiàng)目,我要做的是某個(gè)表的api接口,于是我在項(xiàng)目下新建了一個(gè)app,新建app用以下命令:

django-admin startapp ?xx_tab

這樣我們就新建了一個(gè)xx_tab命名的app,我們要做一些修改:

1、還是打開(kāi)settings.py文件,找到INSTALLED_APPS參數(shù),在最后面加入xx_tab的app名,如下:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework_swagger',
'rest_framework',
'rest_framework_jwt',
'xx_tab’,
]
?

2、修改xx_tab目錄下得而models.py文件,定義我們需要建的表

# Create your models here.
class Xx_Tab(models.Model):
pk_id = models.AutoField(primary_key=True)
xx_id = models.IntegerField()
xx_name = models.CharField(max_length=200)

?

3、修改url

完成數(shù)據(jù)庫(kù)表的定義后,考慮到使用http來(lái)訪問(wèn)數(shù)據(jù)庫(kù)的,那就離不開(kāi)http的url地址。前面在文件介紹中說(shuō)過(guò)用django-admin.py startproject [project_name]命令生成項(xiàng)目后,在項(xiàng)目層目錄下會(huì)有url的python文件,在每個(gè)項(xiàng)目下用django-admin startapp ?xx_tab命令生成的app中也會(huì)有url的python文件,url好比是網(wǎng)站網(wǎng)頁(yè)的目錄,是用來(lái)在web界面上訪問(wèn)的地址。一般,url會(huì)對(duì)于view,view好比是網(wǎng)頁(yè),url指向view。

項(xiàng)目rul、app rul和app view之間的調(diào)用關(guān)系,如下圖:

?

Project rul格式:

# 幾個(gè)測(cè)試接口 router = routers.DefaultRouter() ? urlpatterns = [
url('^hello/$', hello),
url('^simple/$', Simple.as_view()), ? url( r'/log/', include(xx_tab.urls')), ]

App rul格式

urlpatterns = [
url(r'list/$', views.get_xx_tabs,),
url(r'detail/([0-9]+)$', views.get_xx_tab),
url(r'delete/([0-9]+)$', views.delete_xx_tab),
url(r'update/([0-9]+)$', views.update_xx_tab),
url(r'add/$', views.add_xx_tab),
]

以上是兩層url調(diào)用舉例:

url在瀏覽器中的完整寫(xiě)法應(yīng)該如下:

http://127.0.0.1/xx_tab/list/?xx_id=1

4、用Django生成數(shù)據(jù)庫(kù)中的表

完成了在Django框架models.py文件中定義了xx_tab表的相關(guān)信息,我們就可以用django命令來(lái)生成表。

python manage.py makemigrations xx_tab

注意:xx_tab是app名,此命令會(huì)在xx_tab app下migrations目錄下生成一個(gè)0001_initial.py文件,此文件定義了建表信息,如果發(fā)現(xiàn)表定義有問(wèn)題,在修改models.py中的定義后,需要?jiǎng)h除0001_initial.py文件,重跑python manage.py makemigrations xx_tab,重新生成0001_initial.py。

執(zhí)行python manage.py migrate xx_tab,在數(shù)據(jù)庫(kù)中生成xx_tab表。

打開(kāi)Sqlite數(shù)據(jù)庫(kù),在windows下可用

d:\dt\sqlite\sqlite3.exe db.sqlite3 打開(kāi)當(dāng)前的數(shù)據(jù)庫(kù),sqlite3.exe可在網(wǎng)上下載。

.table可查看當(dāng)前的表。

.schema tab_name 可查看表結(jié)構(gòu)定義。

5、API接口,實(shí)現(xiàn)ADD單行數(shù)據(jù)

我們要模擬從前臺(tái)發(fā)出一個(gè)get或post請(qǐng)求,調(diào)用要寫(xiě)的api接口實(shí)現(xiàn)插入數(shù)據(jù)庫(kù)的功能,

如下界面,模擬前臺(tái)調(diào)用

?

?

?

上面是一個(gè)插入演示頁(yè)面,post相關(guān)表字段值,完成對(duì)數(shù)據(jù)庫(kù)的一行數(shù)據(jù)插入。

完成這已插入過(guò)程的邏輯關(guān)系如下:

?

View.py主要是接收前臺(tái)post過(guò)來(lái)的數(shù)據(jù),并在完成處理、存儲(chǔ)后返回相關(guān)信息。

Service.py主要處理數(shù)據(jù),格式化數(shù)據(jù)

數(shù)據(jù)庫(kù)接口層主要處理對(duì)數(shù)據(jù)庫(kù)的數(shù)據(jù)存儲(chǔ)和訪問(wèn)。

view.py

開(kāi)頭,以下這幾行是必不可少的

# -*- coding: utf-8 -*- from rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.response import Response

?

因?yàn)樵趗rls.py中我們定義的是url(r'add/$', views.add_xx_tab)

add指向views.add_xx_tab

所以我們?cè)趘iews中需要定義add_xx_tab函數(shù)

?

@api_view(['POST', 'GET'])
def xx_tab_add(request, *args): ????????? #1、接收request數(shù)據(jù) #2、處理數(shù)據(jù)
#3、返回結(jié)果 ?

基于django rest_framework,在處理client http request時(shí)需要用到@api_view修飾。

同時(shí),我們也需要弄清楚對(duì)于從client端GET或POST過(guò)來(lái)的數(shù)據(jù)我們?cè)趺刺幚怼?/p>

#1、接收request數(shù)據(jù)

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

#2、處理數(shù)據(jù)

首先要判斷get或post過(guò)來(lái)的數(shù)據(jù)是否滿足我們的要求,例如缺少字段、類(lèi)型錯(cuò)誤等。

如果數(shù)據(jù)沒(méi)有問(wèn)題,再存入數(shù)據(jù)庫(kù)。

主要是對(duì)上面dict的處理,主要都是python語(yǔ)句實(shí)現(xiàn),不涉及Django,此處省略。

邏輯過(guò)程:

1、判斷傳入的request是否缺少相應(yīng)的字段

2、判斷傳入的request是否有類(lèi)型錯(cuò)誤

方法:

例如雇員表,add一行需要有以下信息,先定義一個(gè)list,用來(lái)和傳入數(shù)據(jù)作對(duì)比即可

emp = ["empno:int","ename:str","job:str","mgr:int","hiredate:str","sal:int",

"comm:int","deptno:int"]

如果

#3、返回結(jié)果

直接返回插入成功即可。

?

本文簡(jiǎn)單介紹基于Django api后臺(tái)接口開(kāi)發(fā)方法,新學(xué)Django,內(nèi)容僅供參考。

轉(zhuǎn)載于:https://www.cnblogs.com/dtstack/p/9668479.html

總結(jié)

以上是生活随笔為你收集整理的初识Django —Python API接口编程入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。