Python-Django WebAPi基本使用方法

目的

利用django搭建一個WebApi,實現數據庫表的增刪查改。
數據傳輸基於Http協議,數據格式:JSON
ORM方式進行數據庫表的CRUD(增刪查改)python

開發步驟

使用pycharm專業版搭建一個django項目,File-->newProject


專業版的使用須要註冊碼,網上本身下載便可mysql

項目與應用

當前生成的項目只是一個框架啊,具體的實現方法在應用中sql

建立應用

python manage.py startapp apitest  #apitest是應用名

django項目中使用應用

settings.py配置數據庫

修改默認DATABASES數據庫

# DATABASES = {  # 默認數據庫sqlite鏈接
#    'default': {
#        'ENGINE': 'django.db.backends.sqlite3',
#        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
#    }
# }
DATABASES={ # mysql鏈接
    'default':{
        'ENGINE':'django.db.backends.mysql',
        'NAME':'py1',  # 數據庫名
        'USER':'root', # mysql用戶名
        'PASSWORD':'root', # mysql密碼
        'PORT':'3306',
    }
}

api的建立和調用(Activities:應用,Project1:項目名)

Activities/models.py建立活動表

from django.db import models

# Create your models here.
class activity(models.Model):
    # class Meta:
    #     db_table='activities_activity'

        id = models.AutoField(primary_key=True)
        name = models.CharField(max_length=20)
        cost = models.CharField(max_length=20)
        deposit = models.CharField(max_length=20)
        activity_price_deposit = models.CharField(max_length=20)
        toplimit = models.CharField(max_length=20)
        Statement = models.CharField(max_length=20)

遷移文件,將models中的表添加到mysql

python manage.py makemigrations  //生成遷移文件
python manage.py migrate  //進行遷移

Activities/views.py中建立5個方法的實現

from django.shortcuts import render
from .models import activity
import simplejson
import json

from django.http import JsonResponse,HttpResponse,HttpRequest

def reg(request:HttpRequest):
    return HttpResponse("test")

def delete(request:HttpRequest):
    try:
        payload = simplejson.loads(request.body)  
        id = payload['id']
        mgr = activity.objects.get(id=id)
        mgr.delete()
        return JsonResponse({'Status': 'DeleteSuccess'})
    except Exception as e:
        return JsonResponse({'Runstatus': e.args})

def update_by_id(request: HttpRequest):
    try:
        payload = simplejson.loads(request.body)
        id = payload['id']
        mgr = activity.objects.filter(id=id)
        name = payload['name']
        cost = payload['cost']
        deposit = payload['deposit']
        activity_price_deposit = payload['activity_price_deposit']
        toplimit = payload['toplimit']
        Statement = payload['Statement']
        ac = activity()
        ac.id = id
        ac.name = name
        ac.cost = cost
        ac.deposit = deposit
        ac.activity_price_deposit = activity_price_deposit
        ac.toplimit = toplimit
        ac.Statement = Statement
        ac.save()
        return JsonResponse({'Status': 'UpDateSucess'})
    except Exception as e:
        return JsonResponse({'Status': 'UpDateError'})

def Select_by_id(request: HttpRequest):
    try:
        payload = json.loads(request.body)
        id = payload['id']
        mgr = activity.objects.get(id=id)
        data={
            'name': mgr.name,
            'cost': mgr.cost,
            'deposit' : mgr.deposit,
            'activity_price_deposit': mgr.activity_price_deposit,
            'toplimit': mgr.toplimit,
            'Statement': mgr.Statement
        }
        return JsonResponse(data)
    except Exception as e:
        return JsonResponse({'Runstatus':e.args})

def Create(request: HttpRequest):
    try:
        payload = simplejson.loads(request.body)
        id = payload['id']
        mgr = activity.objects.filter(id=id)
        if mgr:  # 若是數據庫中存在
            return JsonResponse({'Status': 'Exist'})
        else:
            name = payload['name']
            cost=payload['cost']
            deposit=payload['deposit']
            activity_price_deposit=payload['activity_price_deposit']
            toplimit=payload['toplimit']
            Statement=payload['Statement']
            ac = activity()
            ac.id = id
            ac.name = name
            ac.cost=cost
            ac.deposit=deposit
            ac.activity_price_deposit=activity_price_deposit
            ac.toplimit=toplimit
            ac.Statement=Statement
            ac.save()
            return JsonResponse({'Status': 'CreateSucess'})

    except Exception as e:
        return JsonResponse({'Status': 'CreateError'})

Activities/urls.py中建立子路由(默認無此文件,需本身建立)

from django.conf.urls import url
from .views import reg,delete,Select_by_id,update_by_id,Create
urlpatterns =[
    url(r'^reg$',reg),
    url(r'^delete$',delete),
    url(r'^Select_by_id$',Select_by_id),
    url(r'^update_by_id$',update_by_id),
    url(r'^Create$',Create),
]

Project1/urls.py中建立路由

urlpatterns = [
    url('admin/',admin.site.urls),  # 根目錄
    url(r'^activities/',include('activities.urls')), # 指向子路由
]

通常報錯及解決方法

數據庫遷移異常

數據庫語句無問題時,數據遷移命令沒法使用,檢查一下mysql的版本django

項目下載與使用

百度網盤連接

連接:https://pan.baidu.com/s/1zGAy24ZonOUQJtEo4Zp2-g
提取碼:s6wr json

測試方式

http://127.0.0.1:8000/admin

帳號:admin,密碼:adminadminapi

發送Reqest請求

http://127.0.0.1:8000/activities/Create
內容包含:app

{
"id":"15",
"name":"jack",
"cost":"123",
"deposit":"test",
"activity_price_deposit":"test",
"toplimit":"test",
"Statement":"test"
}

相關文章
相關標籤/搜索