Django编写http接口实现简单POST/GET请求

最近有个需求,需要写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版权协议,转载请附上原文出处链接和本声明。