python-django-mysql原生sql增删改查搭建搭建web项目

先看我本地的项目结构

1 设置虚拟环境

python -m venv venv
.\venv\Scripts\activate


2 在虚拟环境中安装Django

执行   pip install -r requirements.txt

asgiref==3.8.1
backports.zoneinfo==0.2.1
Django==3.2
mysqlclient==2.2.4
pytz==2024.2
sqlparse==0.5.1
typing-extensions==4.12.2
tzdata==2024.2


3 在虚拟环境中创建一个新的Django项目:

django-admin startproject myproject
cd myproject


4 在项目中创建一个应用,例如myapp:

python manage.py startapp myapp


5 定义模型,提前建好表
在myapp/models.py中定义Book模型,但不需要使用makemigrations和migrate,因为数据库表已经提前创建好了.

CREATE TABLE `book` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL,`remark` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
from django.db import modelsclass Book(models.Model):name = models.CharField(max_length=255)remark = models.CharField(max_length=255)class Meta:db_table = 'book'  # 确保这与你的数据库表名匹配


6 在myproject/settings.py中配置MySQL数据库连接

DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'test','USER': 'root','PASSWORD': 'root','HOST': 'localhost',  # Or an IP Address that your DB is hosted on'PORT': '3306',}
}
文件里面的CsrfViewMiddleware要注释掉

7 在myapp/views.py中,使用原生SQL实现增删改查,并返回JSON结果

from django.shortcuts import render# Create your views here.
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from django.db import connection# Create a new book
# @csrf_exempt
def create_book(request):if request.method == 'POST':data = request.POSTname = data.get('name')print(12312)print(name)remark = data.get('remark')with connection.cursor() as cursor:cursor.execute("INSERT INTO book (name, remark) VALUES (%s, %s)", [name, remark])return JsonResponse({'message': 'Book created successfully', 'status': 200})else:return JsonResponse({'error': 'Invalid request', 'status': 201})# Update an existing book
# @csrf_exempt
def update_book(request):if request.method == 'POST':data = request.POSTname = data.get('name')remark = data.get('remark')id = data.get('id')with connection.cursor() as cursor:cursor.execute("UPDATE book SET name = %s, remark = %s WHERE id = %s", [name, remark, id])if cursor.rowcount == 0:return JsonResponse({'error': 'Book not found', 'status': 201})return JsonResponse({'message': 'Book updated successfully', 'status': 200})else:return JsonResponse({'error': 'Invalid request', 'status': 201})# Delete a book
# @csrf_exempt
def delete_book(request):if request.method == 'POST':data = request.POSTid = data.get('id')with connection.cursor() as cursor:cursor.execute("DELETE FROM book WHERE id = %s", [id])if cursor.rowcount == 0:return JsonResponse({'error': 'Book not found', 'status': 201})return JsonResponse({'message': 'Book deleted successfully', 'status': 200})else:return JsonResponse({'error': 'Invalid request', 'status': 201})# List all books
def list_books(request):with connection.cursor() as cursor:cursor.execute("SELECT id, name, remark FROM book")books = cursor.fetchall()return JsonResponse({'books': books, 'status': 200}, safe=False)

8 在myapp/urls.py中配置URL路径:

from django.urls import path
from . import viewsurlpatterns = [path('books', views.list_books, name='list_books'),path('books/create', views.create_book, name='create_book'),path('books/update', views.update_book, name='update_book'),path('books/delete', views.delete_book, name='delete_book'),# 添加其他URL路径
]


9 在myproject/urls.py中包含myapp的URL

from django.contrib import admin
from django.urls import include, pathurlpatterns = [path('admin/', admin.site.urls),path('api/', include('myapp.urls')),  # 注意这里的'api/'
]


10 启动

python manage.py runserver

添加

编辑

删除

部署到linux的步骤,没有写,,。。。

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

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

相关文章

数据结构--二叉树随记

二叉树主要分为四类:满二叉树、完全二叉树、二叉搜索树、平衡二叉搜索树。 高度,深度,层 满二叉树 满二叉树就是每一层节点都是满的,整棵树像一个正三角形: 满二叉树有个优势,就是它的节点个数很好算。假设深度为 h,那…

C# 数据类型转换

文章目录 前言注意事项1. 隐式转换(Implicit Conversion)2. 显式转换(Explicit Conversion, 也称为强制转换)3. 使用转换方法4. 使用 Convert 类5. 使用 Parse 和 TryParse 方法示例代码 前言 在C#中,数据类型转换是一…

讲一讲Redis五大数据类型的底层实现

讲一讲Redis五大数据类型的底层实现 Redis五大数据类型的底层实现 Redis的五大数据类型分别是字符串(String)、列表(List)、哈希(Hash)、集合(Set)和有序集合(Zset&…

枚举的应用

1.枚举的语法特点 枚举是jdk1.5提供的一个特性 枚举是一个特殊的类,这个类的对象的数量是有限的。在定义枚举类的同时就已经确定了类对象及类对象的数量。 枚举使用enum关键字定义 class A{} enum A{} 在枚举类中的第一行,就需要提供枚举类的对象&a…

Fake Location 限制解除(运动世界校园,keep......)

一觉起来成绩还是正常的,运动世界校园的审核是非常严格的,因为在这之前,我帮助同学登入别的账号进行跑步,发现过来几天全被检测到了异常,成绩也是直接无效了哈,我们今天再搞一个关于keep的,因为当时关于kee…

三大编程思想(POP、OOP、AOP、FOP)及oop 五大设计原则

概述 POP:面向过程编程(Procedure Oriented Programming) OOP:面向对象编程(Object Oriented Programming) AOP:面向切面编程(Aspect Oriented Programming) FOP&#x…

Linux-自旋锁

概述 自旋锁是一种多线程同步机制,用于保护共享资源免受并发访问的影响。在多个线程 尝试获取锁时,它们会持续自旋(即在一个循环中不断检查锁是否可用)而不是立即 进入休眠状态等待锁的释放。这种机制减少了线程切换的开销&#…

数据库中的JSON数据类型

数据库中的JSON(JavaScript Object Notation)数据类型是一种用于存储JSON格式数据的特殊数据类型。JSON是一种轻量级的数据交换格式,易于人们阅读和编写,同时也易于机器解析和生成。在数据库中引入JSON数据类型,可以使…

pikachu靶场SSRF-curl测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、实现ssrf攻击 四、源代码分析 五、结论 一、测试环境 1、系统环境 渗透机:本机(127.0.0.1) 靶 机:本机(127.0.0.1) 2、使用工具/软件 测试网址:…

DNS 与 ICMP

DNS(Domain Name System)快速了解 DNS 是一整套从域名映射到 IP 的系统 DNS 背景 TCP/IP 中使用 IP 地址和端口号来确定网络上的一台主机的一个程序. 但是 IP 地址不方便记忆 于是人们发明了一种叫主机名的东西, 是一个字符串, 并且使用 hosts 文件来描述主机 名和 IP 地…

微信开发者工具:音乐小程序报错

报错信息 GET http://localhost:3000/1.mp3 net::ERR CONNECTION REFUSED (env: Windows,mp,1.06.2303220;lib:3.6.0) 原因:小程序没有直接获取本地文件,为了提高访问速度,而采用放到网络服务器中网络访问的方式获取文件内容 解决办法&#…

测试主分支

测试主分支 输入汉字圆点.字母md有点别扭,以后锁定大小写,用.MD后缀 添加一行文字试试能不能自动从gitee同步到github 声明:本文使用八爪鱼rpa工具从gitee自动搬运本人原创(或摘录,会备注出处)博客&#…

JMeter如何设置HTTP代理服务器?

1、 2、添加线程组 3、设置HTTP代理服务器,目标控制器选择“测试计划>线程组” 过滤掉不需要的信息 4、设置电脑手动代理 5、点击启动,在浏览器操作就可以了

通过matlab建立excel,A1中输入F1,A2到A4为空。A5为F2,A6到A8为空。A9为F3依次类推。每个4个单元格增加1次F序号

% 初始化元胞数组 numElements 4 * 10; % 总共的元胞数量,按照每4个单元格一个F值来计算 str cell(numElements, 1); % 创建一个numElements x 1的元胞数组 % 填充元胞数组 for i 1:4:numElements str{i} [F, num2str(ceil(i/4))]; % 计算F后面的序号&a…

OpenCV-物体跟踪

文章目录 一、物体跟踪的定义二、OpenCV中的物体跟踪算法三、OpenCV物体跟踪的实现步骤四、代码实现五、注意事项 OpenCV是一个开源的计算机视觉和机器学习软件库,它提供了丰富的功能来实现物体跟踪。以下是对OpenCV中物体跟踪的详细解释: 一、物体跟踪的…

QT 如何置顶窗口并激活

基本上,客户端软件都会有置顶某个窗口的需求。置顶窗口激活窗口,两者不是同一个问题。有时候窗口置顶了,并不代表该窗口属于激活状态。本文将尝试把这两个问题一起解决了,请看下文: 一、置顶窗口 通过函数setWindowF…

Ubuntu16.04安装openssl库

Ubuntu16.04安装openssl库 Chapter1 Ubuntu16.04安装openssl库 Chapter1 Ubuntu16.04安装openssl库 原文链接:https://blog.csdn.net/weixin_36584476/article/details/107321893 记录一下省得忘了 1.首先去openssl官网下载源码www.openssl.org/source/&#xff0…

进程同步、互斥

进程同步、互斥的基本概念 系统中的某些资源,虽然可以提供给多个进程使用,但一个时间段内只允许一个进程访问该资源。 我们把一个时间段内只允许一个进程使用的资源称为临界资源。许多物理设备(比如摄像头、打印机)都属于临界资源…

python爬虫加解密分析及实现

第一种: 1、找到加密的接口地址,通过加密的接口地址全局搜索 2、通过打断点的方式,操作页面,跑到断点处时,即可找到加密串,如图二; 3、找到用的是哪种加密方式,如: cr…

Unity Apple Vision Pro 保姆级开发教程-准备阶段

视频教程: Unity PolySpatial 开发Apple Vision Pro教程, 三十分钟快速了解 Unity Vision Pro 中文课堂教程地址: Unity3D Vision Pro 开发教程【保姆级】 | Unity 中文课堂 开发Apple Vision Pro 使用原生开发和unity 开发有什么区别 如果你的项目需要…