最近有个需求,需要写api来实现一些功能。就尝试一下了。各种找资料。哈哈哈。写的不好请见谅。
直接上个思路吧。。。
一、创建一个Django项目:
1.进入自己要存放Django项目的路径运行一下命
django-admin startproject Django_api
2.配置Django
进入项目目录运行命令
python manage.py startapp testapi ##创建app

修改setting配置添加app
在APP下写一个功能(apps.py):
import os
##实现俩个数相加
def add(x,y):
return x + y
编写视图函数(views.py)
from django.shortcuts import render
from django.http import HttpResponse,JsonResponse ##JsonResponse返回json数据
from datetime import datetime
from . import apps ##导入刚才写的函数
# Create your views here.
"""
简单body请求报文
{
"x":int,
"y":int,
}
"""
##简单定义返回报文
res = {
"status": "",
"date":datetime.now(),
"msg":""
}
def add_number(request):
if request.method == 'POST':
##判断POST请求body是否为空
if request.body.decode() == '':
res['status'] = "Error"
res['msg'] = "body is Null!"
return JsonResponse(res)
##不为空就将body转换成字典
else:
body = eval(request.body)
##确保字段不为空
if body['x'] == '' or body['y'] == '':
res['status'] = "Error"
res['msg'] = "please check body!"
return JsonResponse(res)
else:
res['status'] = "Success"
res['msg'] = apps.add(body[x],body[y])
return JsonResponse(res)
else:
res['status'] = "Error"
res['msg'] = "request method not is POST!"
return JsonResponse(res)
设置二级路由(urls.py 需要创建)
from django.urls import path,include
from . import views
urlpatterns = [
path('add_num/',views.add_number,name="add_num"),
]
设置一级路由(与setting.py 同级的urls.py)
from django.contrib import admin
from django.urls import path,include
from testapi import urls
urlpatterns = [
path('admin/', admin.site.urls),
path('testapi/',include(urls))
]
运行测试
python manage.py runserver

发现报错哈哈哈
后台查看日志原来是CSRF的问题
在修改一下视图函数
from django.shortcuts import render
from django.http import HttpResponse,JsonResponse ##JsonResponse返回json数据
from django.views.decorators.csrf import csrf_exempt
from datetime import datetime
from . import apps ##导入刚才写的函数
# Create your views here.
"""
简单body请求报文
{
"x":int,
"y":int,
}
"""
##简单定义返回报文
res = {
"status": "",
"date":datetime.now(),
"msg":""
}
@csrf_exempt
def add_number(request):
if request.method == 'POST':
##判断POST请求body是否为空
if request.body.decode() == '':
res['status'] = "Error"
res['msg'] = "body is Null!"
return JsonResponse(res)
##不为空就将body转换成字典
else:
body = eval(request.body)
##确保字段不为空
if body['x'] == '' or body['y'] == '':
res['status'] = "Error"
res['msg'] = "please check body!"
return JsonResponse(res)
else:
res['status'] = "Success"
res['msg'] = apps.add(body['x'],body['y'])
return JsonResponse(res)
else:
res['status'] = "Error"
res['msg'] = "request method not is POST!"
return JsonResponse(res)
在测试一下看一下
这次我们传入参数
{“x”:1,“y”:2}

测试成功了
我们试一下其他的出POST以外的其他请求:
测试请求报文中某一个字段为空:
实战一个base64编解码的接口
修改apps.py
import os
from base64 import b64decode,b64encode
##实现俩个数相加
def add(x,y):
return x + y
##编码
def b_bm(str):
return b64encode(str.encode("utf-8")).decode()
##解码
def b_jm(str):
return b64decode(str).decode("utf-8")
修改视图
from django.shortcuts import render
from django.http import HttpResponse,JsonResponse ##JsonResponse返回json数据
from django.views.decorators.csrf import csrf_exempt
from datetime import datetime
from .apps import add,b_bm,b_jm ##导入刚才写的函数
# Create your views here.
##简单定义返回报文
res = {
"status": "",
"date":datetime.now(),
"msg":""
}
@csrf_exempt
def add_number(request):
if request.method == 'POST':
##判断POST请求body是否为空
if request.body.decode() == '':
res['status'] = "Error"
res['msg'] = "body is Null!"
return JsonResponse(res)
##不为空就将body转换成字典
else:
body = eval(request.body)
##确保字段不为空
if body['x'] == '' or body['y'] == '':
res['status'] = "Error"
res['msg'] = "please check body!"
return JsonResponse(res)
else:
res['status'] = "Success"
res['msg'] = add(body['x'],body['y'])
return JsonResponse(res)
else:
res['status'] = "Error"
res['msg'] = "request method not is POST!"
return JsonResponse(res)
@csrf_exempt
def b64(request):
if request.method == 'POST':
if request.body.decode() == '':
res["status"] = "Error"
res["msg"] = "body is Null!"
return JsonResponse(res)
else:
body = eval(request.body) ##获取POST body
if body['B64_TYPE'] == '加密' and body['CONTENT'] != '':
res["status"] = 'Success'
res["msg"] = b_bm(body['CONTENT'])
return JsonResponse(res)
elif body['B64_TYPE'] == '解密' and body['CONTENT'] != '':
res["status"] = 'Success'
res["msg"] = b_jm(body['CONTENT'])
return JsonResponse(res)
else:
res["status"] = 'Error'
res["msg"] = 'please check body!'
return JsonResponse(res)
else:
res['status'] = "Error"
res['msg']= "request method not is POST!"
return JsonResponse(res)
修改二级路由
from django.urls import path,include
from . import views
urlpatterns = [
path('add_num/',views.add_number,name="add_num"),
path('b64/',views.b64,name="b64"),
]
运行测试
加密的
解密的
其他请求方法
也可把爬虫的数据放在接口里。让后请求接口就可以获取数据了。例如:
添加二级路由:
path(‘rept/’,views.rept,name=“rept”)
接口测试:
还有就是一写orm的操作。实现增删改查
这里就不补充了。自己可以试试。
写的不好,请各位指正。。。
版权声明:本文为weixin_40618452原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。