后台接口搭建步骤Django框架(pycharm社区版一样适用)

第一步:创建项目

打开命令行界面,输入以下命令:

django-admin startproject (项目名称)

第二步:创建应用

进入项目根目录,确保与manage.py文件处于同一级,输入下述命令:

python manage.py startapp (应用名称)

第三步:创建数据库

使用Navicat创建数据库(此处不做强行要求,能实现创建数据库即可)

第四步:配置数据库链接

在与项目同名的文件夹下,找到并打开settings.py文件

修改配置如下:

python 复制代码
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',   # 数据库引擎
        'NAME': 'mysite',       # 数据库名,先前创建的
        'USER': 'root',         # 用户名,可以自己创建用户
        'PASSWORD': '',         # 密码
        'HOST': '127.0.0.1',    # mysql服务所在的主机ip
        'PORT': '3306'         # mysql服务端口
    }
}

在INSTALLED_APPS中添加你的应用

python 复制代码
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    '你的应用名称'
]

注释掉csrf中间件

python 复制代码
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

第五步:配置路由

在与项目同名的文件夹下,找到并打开urls.py文件

修改配置如下:

python 复制代码
from django.urls import path,include

urlpatterns = [
    # path('admin/', admin.site.urls),
    path('api/', include('你的应用的名字.urls'))
]

第六步:创建数据库表

在应用文件夹下,找到并打开models.py

定义class类,每个类对应一张数据库表

python 复制代码
class Devices(models.Model):
    dev_code = models.CharField(max_length=24)
    dev_name = models.CharField(max_length=50)
    address = models.CharField(max_length=100)
    status = models.BooleanField()


class Records(models.Model):
    dev = models.ForeignKey(to=Devices,on_delete=models.CASCADE)
    duration = models.IntegerField(default=0)
    amount = models.DecimalField(max_digits=10, decimal_places=2)
    create_time = models.DateTimeField(auto_created=True)

运行(数据迁移,创建表)

1)python manage.py makemigrations

2)python manage.py migrate

第七步:编写数据接口

在应用文件夹下,找到并打开views.py

定义class类,每个类就是一个接口,有get(查询)、post(添加)、put(修改)、delete(删除)

python 复制代码
from django.http import JsonResponse
from django.views import View
from api.models import *
from datetime import datetime
import math
import json

# Create your views here.


class DevicesApi(View):
    def get(self, request):
        pagesize = 5
        result = Devices.objects.filter()
        params = request.GET
        keyword = params.get('key', '')
        page = params.get('page', '')
        sort = params.get('sort', '0')
        if(keyword != ''):
            result = result.filter(community_name__contains=keyword)

        if(sort == '1'):
            result = result.order_by('-id')
        elif(sort == '2'):
            result = result.order_by('id')
        records = result.count()
        print(page+'a')
        if(page != ''):
            page = int(page)
            start = (page - 1) * pagesize
            end = page * pagesize
            result = result[start:end]

        total = math.ceil(records / pagesize)

        data = []
        for item in result:
            data.append({
                'id': item.id,
                'dev_code': item.dev_code,
                'community_name': item.community_name,
                'dev_address': item.dev_address,
                'dev_status': item.dev_status
            })
        return JsonResponse({'code': 200, 'data':data, 'total': total, 'page': page})

    def post(self,request):
        data = json.loads(request.body)
        # print(data)
        obj = Devices()
        obj.dev_code = data['dev_code']
        obj.community_name = data['community_name']
        obj.dev_address = data['dev_address']
        obj.dev_status = 0
        obj.save()
        return JsonResponse({'code': 200})


class DevicesDel(View):
    def post(self, request):
        data = json.loads(request.body)
        # print(data)
        Devices.objects.filter(id__in=data).delete()
        return JsonResponse({'code': 200})

class DevicesEdit(View):
    def get(self, request):
        devID = int(request.GET.get('id',0))
        if(devID>0):
            obj = Devices.objects.get(id=devID)
            if(obj.dev_status):
                obj.dev_status = 0
            else:
                obj.dev_status = 1
            obj.save()
        return JsonResponse({'code': 200})

class DevicesInfo(View):
    def get(self, request):
        devID = int(request.GET.get('id', 0))
        result = {}
        if(devID > 0):
            obj = Devices.objects.get(id=devID)
            # print(obj)
            result = {'id': obj.id, 'dev_code': obj.dev_code, 'community_name': obj.community_name, 'dev_address': obj.dev_address, 'dev_status': obj.dev_status}
        return JsonResponse({'code': 200, 'data': result})

class RecordApi(View):
    def post(self, request):
        data = json.loads(request.body)
        obj = Records()
        obj.dev_id_id = data['dev_id']
        obj.use_times = data['use_times']
        obj.amount = data['amount']
        obj.create_time = datetime.now()
        obj.save()
        return JsonResponse({'code': 200})
    def get(self, request):
        pagesize = 5
        result = Records.objects.filter().order_by('-id')
        params = request.GET
        page = params.get('page', '')
        records = result.count()
        if (page != ''):
            page = int(page)
            start = (page - 1) * pagesize
            end = page * pagesize
            result = result[start:end]

        total = math.ceil(records / pagesize)
        data = []
        for item in result:
            data.append({
                'id': item.id,
                'dev_code': item.dev_id.dev_code,
                'community_name': item.dev_id.community_name,
                'dev_address': item.dev_id.dev_address,
                'dev_status': item.dev_id.dev_status,
                'use_times': item.use_times,
                'amount': item.amount,
                'dev_id': item.dev_id_id
            })
        return JsonResponse({'code': 200, 'data': data, 'total': total, 'page': page})
相关推荐
ctlover15 分钟前
Streamlit 框架
python
ι:30 分钟前
MATLAB 与 Python 搭建无人机地面站:优势、劣势与选型逻辑
python·matlab·无人机
船厂电气自动化ai大模型39 分钟前
AI大模型与数学 第32课 函数凹凸性与二阶导数:拐点求解、凹凸区间计算(10道二阶导数计算题)
数据结构·人工智能·python·深度学习·算法
jufeng13071 小时前
【系列:手搓自主 AI Agent:Hermes 架构原理剖析 · 第 7 篇】
python·ai agent·权限系统
梦想很大很大1 小时前
如果有一个本地优先的 Workflow 工具,你们团队会愿意用吗?
python·agent·workflow
用户8356290780511 小时前
Python 自动化 Word 文本框处理:创建、定位、填充内容与管理
后端·python
数据知道3 小时前
反序列化漏洞:Java、PHP、Python 三条线各讲透
java·网络·python·安全·网络安全·php
努力的小Qin3 小时前
梯度下降如何实现参数优化:从线性回归到 Sigmoid 分类
人工智能·python·神经网络
strength_zhou20133 小时前
Python检查MongoDB索引列中的字段是否存在
python·mongodb
zander2584 小时前
LeetCode 739:每日温度——为什么单调栈要持续弹出
开发语言·python·算法