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

第一步:创建项目

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

django-admin startproject (项目名称)

第二步:创建应用

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

python manage.py startapp (应用名称)

第三步:创建数据库

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

第四步:配置数据库链接

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

修改配置如下:

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

在INSTALLED_APPS中添加你的应用

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

注释掉csrf中间件

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文件

修改配置如下:

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

第六步:创建数据库表

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

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

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(删除)

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 = 5result = Devices.objects.filter()params = request.GETkeyword = 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) * pagesizeend = page * pagesizeresult = 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 = 0obj.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 = 0else:obj.dev_status = 1obj.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 = 5result = Records.objects.filter().order_by('-id')params = request.GETpage = params.get('page', '')records = result.count()if (page != ''):page = int(page)start = (page - 1) * pagesizeend = page * pagesizeresult = 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})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/18535.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二区5分纯生信|单细胞+非负矩阵+AlphaFold+机器学习组合

说在前面 学文不看刊 这篇分析总体来说工作量不算大,scRNA联合bulkRNA分析,多种机器学习组合预测模型,最后用了AlphaFold2预测蛋白及AutoDock分子对接 非常适合小白学习和模仿,其次在筛选出核心基因后可以再加几个外部数据集观…

勒索软件统计数据揭示了网络勒索的惊人速度

本文通过各种报告摘录,提供了有关当前勒索软件形势的统计数据和见解。 全球勒索病毒危机加剧 NTT安全控股《2024全球威胁情报报告》(2024年5月) 据NTT安全控股公司的《2024年全球威胁情报报告》显示,勒索软件和勒索事件在2023年激…

50 http通用服务器

虽然我们说,应用层协议是我们程序猿自己定的 但实际上,已经有大佬们定义了一些现成的,又非常好用的应用层协议,供我们直接参考使用,http(超文本传输协议)就是其中之一 目录 认识urlurlencode和…

为WPF的Grid添加网格边框线

在WPF中使用Grid绘制表格的时候,如果元素较多、排列复杂的话,界面会看起来很糟糕,没有层次,这时用网格或边框线分割各元素(标签或单元格)将会是页面看起来整齐有条理。 默认没有边框线的如下图所示&#xf…

二叉树习题精讲-相同的树

相同的树 100. 相同的树 - 力扣(LeetCode)https://leetcode.cn/problems/same-tree/description/ /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ bool i…

OpenSSL自签名证书

文章目录 生成1. 生成根证书的私钥(root_private_key.pem)2. 创建根证书的CSR和自签名证书(root_csr.pem)3. 生成服务器证书的私钥(server_private_key.pem)4. 创建服务器证书的CSR(server_priv…

考研经验总结——复试上岸(附通信原理)

上岸啦,一志愿拟录取,初试第5、复试4,总成绩第4 文章目录 一、复试流程二、注意事项三、简历模板3.1 基本信息3.2 报考情况3.3 校内实践3.4 荣誉奖励3.5 项目经验3.6 自我介绍 四、通信原理五、最后的总结 一、复试流程 1、 复试流程 准备复…

设计模式(简要,应付软考)

简单工厂模式(Simple Factory Pattern): 又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 单例实例&#…

03- Redis 中的 Hash 数据类型和应用场景

1. 介绍 Hash 是一个键值对(key - value)集合,其中 value 形式如: value [{field1, value1}, ...{fieldN, valueN}]。Hash 特别适合用于存储对象。 Hash 和 String 对象的区别如下: Redis Stringuid:1:name ------…

如何让APP打开时无广告(一秒学会)

相信大家平时在玩手机的时候多多少少都会在意过打开app时的启动广告,虽然可以自己点击跳过,但是确实十分麻烦,很多人想知道如何跳过app启动广告。 现在网上很多切换手机中英文、安装拦截软件等等,我都试过了! 统统不管…

基于Netty实现WebSocket服务端

本文基于Netty实现WebSocket服务端,实现和客户端的交互通信,客户端基于JavaScript实现。 在【WebSocket简介-CSDN博客】中,我们知道WebSocket是基于Http协议的升级,而Netty提供了Http和WebSocket Frame的编解码器和Handler&#…

N1912A P 系列双通道功率计

N1912A 双通道功率计 产品综述 <<<P 系列双通道功率计>>> Keysight N1912A P 系列双通道功率计可以提供峰值功率、峰均比、平均功率、上升时间、下降时间 NS 脉冲宽度测量。 “ 功能特点 30 MHz 视频带宽 能够以高达 100 MSa/s 的采样率执行单次实时捕…

2种方法将集合数据List构建成树形结构

文章目录 递归循环构建树结构hutool.TreeUtil.build构建树结构 递归循环构建树结构 先查最外层树节点数据&#xff0c;再递归遍历每一层子节点数据 public ApiResultDto<List<LocationDto>> getTreeByParams(LocationSearchDto searchDto, SecurityUser user) {// …

柔性自驱动生物“电子衣”促进伤口愈合

引用信息 文 章&#xff1a;Combined Amniotic Membrane and Self-Powered Electrical Stimulator Bioelectronic Dress Promotes Wound Healing 期 刊&#xff1a;ACS Applied Materials & Interfaces&#xff08;影响因子&#xff1a;9.5&#xff09; 发表时间…

如何高效搜索?99%的人都不知道的搜索进阶小技巧

如何高效搜索任何你想要的信息&#xff1f; 比如怎么找第一手的行业研究报告&#xff1f; 在哪查高清无码的图片素材&#xff1f; 怎么搜最新的AI工具教程&#xff1f; 遇到以上问题你会怎么搜&#xff1f; 可能大部分人都是直接打开百度查关键词&#xff0c;虽然随便一搜…

【贪心算法】C++ 解决算法题:买卖股票 / K次取反 / 按身高排序 / 优势洗牌

1. 前言 1.1 贪心算法介绍 贪心算法&#xff08;Greedy Algorithm&#xff09;是一种在每一步选择中都采取当前状态下最优决策的算法。贪心算法通常用来解决最优化问题&#xff0c;其核心思想是通过局部最优解逐步推导出全局最优解。 在贪心算法中&#xff0c;我们并不总是考…

Java面试进阶指南:高级知识点问答精粹(一)

Java 面试问题及答案 1. 什么是Java中的集合框架&#xff1f;它包含哪些主要接口&#xff1f; 答案&#xff1a; Java集合框架是一个设计用来存储和操作大量数据的统一的架构。它提供了一套标准的接口和类&#xff0c;使得我们可以以一种统一的方式来处理数据集合。集合框架主…

云计算-交互式数据处理 (Interactive Data Processing)

AWS Glue DataBrew (AWS Glue DataBrew) 数据预处理是任何数据分析任务之前的重要步骤。AWS Glue DataBrew 是一个可视化工具&#xff0c;允许我们预处理数据&#xff0c;包括清洗和规范化数据。此AWS服务提供许多数据准备功能&#xff0c;包括分组、联接、过滤、重新采样、排序…

【数据结构(邓俊辉)学习笔记】二叉树04——Huffman树

文章目录 0. 概述1. 无前缀冲突编码2. 编码成本3. 带权编码成本4. 编码算法5. 算法实现流程6. 时间复杂度与改进方案 0. 概述 学习Huffman树。 1. 无前缀冲突编码 在加载到信道上之前&#xff0c;信息被转换为二进制形式的过程称作编码&#xff08;encoding&#xff09;&…

【随笔】Git 实战篇 -- Git Rebase出错?手把手教你如何优雅地解决常见问题 (四十二)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…