DJANGO增删改查

2023-11-17

https://www.cnblogs.com/yuanlianghong/p/10987877.html

@一、Django的工作流
1:用户通过浏览器输入相应的 URL 发起 HTTP 请求(一般是 GET/POST)

2:Django 接受到请求,检测 urls.py 文件,找到和用户输入的 URL 相匹配的项,并调用该 URL 对应的视图函数(view),例如,通常来说 urls.py 文件里的代码是这样的:

url(r’^homepage/$', views.home_page)
则当用户输入的 URL 为 www.某个网址.com/homepage 时,django 检测到该 URL 与上面的代码 匹配,于是调用后面的 views.home_page 视图函数,把相应的请求交给该视图函数处理。

3:视图函数被调用后,可能会访问数据库(Model)去查询用户想要请求的数据,并加载模板文件(Template),渲染完数据后打包成 HttpResponse 返回给浏览器(Http协议)

二、准备工作
大致工作流程就是这样,从流程可以看出,我们需要做的就是:

#准备工作,创建app
python3 manage.py startapp app01
#在配置文件(settings–>INSTALLED_APPS)中添加
INSTALLED_APPS = [
‘django.contrib.admin’,
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.messages’,
‘django.contrib.staticfiles’,
‘app01.apps.App01Config’, #或者app01
]
复制代码
三、编写url、Http请求的视图(view)函数
复制代码
#1、编写相应的 url(urls文件中)
from app01 import views
urlpatterns = [
url(r’^admin/‘, admin.site.urls),
url(r’^login/', views.login),
]

#2、编写处理 Http 请求的视图函数(View)
def login(request):
pass #功能代码块,暂用pass填充
复制代码
四、搭建需要渲染的模板(template)
复制代码
#3、编写需要渲染的模板(template)

#3.1通常建立static文件夹放入静态文件(bootstrap,js,css,image),然后在settings中配置路径
STATIC_URL = ‘/static/’ #接口前缀,和静态文件夹static无关
STATICFILES_DIRS = [
os.path.join(BASE_DIR,‘static’) #静态文件夹路径
]

#3.2登录Html文件搭建

登录页面

#提交数据到后台使用form表单,action指定提交地址(3种方式) #1.全路径 #2.只写路径后缀 #3.不写,默认当前路径(http://127.0.0.1:8080/login/)提交

username:

password:

#提交数据方式: 或
复制代码 五、具体视图函数功能实现 5.1登录视图测试 复制代码 #4.1根据用户请求类型,执行对应功能 ''' 由于form表单提交数据默认get请求,实际提交数据是POST请求,需要修改客户端的请求类型(获取客户端请求类型:request.method)。 通过直接修改会报错(403),还需注释settings中 MIDDLEWARE 的'django.middleware.csrf.CsrfViewMiddleware', ''' def login(request): if request.method =='POST': return HttpResponse('OK') return render(request,'login.html')

#4.2获取用户数据(GET/POST请求获取方式一致)
‘’’
尝试打印 print(request.POST),可将其看做字典存放了post提交的数据。
字典中的value是列表结构,但取值时拿到的是单个元素;
获取列表元素:
request.POST.get(‘username’);默认获取列表最后一个元素。
        request.POST[‘username’];不推荐使用(键不存在直接报错)

 若字典中value有多个元素可使用(用户爱好,多选框):
         request.POST.getlist('username');  

‘’’
def login(request):
if request.method ==‘POST’:
print(request.POST) #可将其看做字典,存放了post提交的所有数据

    #获取列表数据,使用的username是根据前端<input...name="username"> name属性
    print(request.POST.get('username'))  
    print(request.POST['username']
          
    print(request.POST.getlist('username')  #获取列表中所有数据
    return HttpResponse('OK')
          
return render(request,'login.html')

复制代码
5.2数据库的连接和配置
复制代码
#4.3连接数据库
‘’’
使用PyCharm连接数据库:
DataBase–>DataSource–>下载驱动–>配置参数–>Test Connection

Django连接数据库配置(settings文件):
1.修改配置 DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.mysql’,
‘NAME’: ‘day55’,
‘HOST’: ‘127.0.0.1’,
‘PORT’: 3306,
‘USER’: ‘root’,
‘PASSWORD’: ‘51cwdqgcs’,}}
2.用pymysql替换默认的mysql_db模块连接数据库
在项目文件夹或应用文件下__init__.py写入
import pymysql
pymysql.install_as_MySQLdb()
‘’’
复制代码
5.3 Django的ORM
复制代码
class User(models.Model): #在app01–>models中创建类继承 models.Model
id = models.AutoField(primary_key=True) #添加相应字段
name = models.CharField(max_length=32) #CharField定义时必须指定max_length参数
password = models.CharField(max_length=32)
再执行数据库迁移命令
‘’’
1.django的ORM不能自动创建库(手动创建数据库),但可以自动创建表。
2.
python3 manage.py makemigrations 将数据库变动记录到migrations文件夹下
python3 manage.py migrate 将数据库变动同步到数据库
‘’’
复制代码
5.4通过ORM实现数据库的增、删、改、查

复制代码
#4.5通过测试Djang的ORM(增、删、改、查)
#增
def reg(request):
if request.method==‘POST’:
username = request.POST.get(‘username’)
password = request.POST.get(‘password’)
#操作数据库user表插入数据
#方法一
#user_obj=models.User.objects.create(name=username,password=password)
#方法二
user_obj=models.User(name=username,password=password)
user_obj.save()
# print(user_obj)
# print(user_obj.name)
# print(user_obj.password)
return HttpResponse(‘注册成功’)
return render(request,‘reg.html’)

#增(完善):在数据展示页面增加‘添加’数据按钮
#href属性指定跳转的页面(注册)
添加数据
#完成添加数据后,点击按钮重定向’数据展示’页面
return redirect(‘/userlist/’)
复制代码

复制代码
#查
def userlist(request):
user_list=models.User.objects.all() #获取所有数据
#user_list是QuerySst对象,点query获取当前对象内部sql语句
print(user_list.query)
#循环打印用户信息,放入html
#for user_obj in user_list:
#print(user_obj.password,user_obj.name)
return render(request,‘userlist.html’,locals())
复制代码

复制代码
#定义修改视图函数
def edit(request):
if request.method == ‘POST’:
print(request.POST)
print(request.GET)
username = request.POST.get(‘username’)
password = request.POST.get(‘password’)
# 获取编辑对象的id方式
edit_id = request.POST.get(‘edit_id’)
# 更新数据库
models.User.objects.filter(id=edit_id).update
(name=username,password=password)
#重定向’数据展示’ 页面
return redirect(‘/userlist’)
# 获取用户想要修改的数据的id
edit_id = request.GET.get(‘edit_id’)
# 将该数据查询出来渲染到一个编辑页面
# 查询数据方式1
user_obj = models.User.objects.filter(id=edit_id).first()
# 查询数据方式2
# # user_obj = models.User.objects.get(id=edit_id)
# print(user_obj,type(user_obj))
# 将当前数据渲染到一个编辑页面上
return render(request,‘edit.html’,locals())
复制代码

复制代码
#删除
#在数据展示页面增加‘删除’数据按钮,在指定跳转路径后拼接用户ID(GET请求可以携带的参数就是在路径后拼接)
删除
#定义删除视图函数
def delete_user(request):
delete_id=request.GET.get(‘delete_id’)
# res_1 = models.User.objects.filter(id=delete_id)
# print(res_1) # QuerySet对象 <QuerySet [User:jason]>

#QuerySet对象索引取值获取数据对象
# res = models.User.objects.filter(id=delete_id)[0]
# res=models.User.objects.filter(id=delete_id).first()
# print(res)  #数据对象,才能res.id取值

#删除queryset内所有数据对象
res = models.User.objects.filter(id=delete_id).delete()
return redirect('/userlist/')

复制代码

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DJANGO增删改查 的相关文章

  • 如何为未捕获的异常处理程序编写单元测试

    我有一个函数可以捕获uncaught例外情况 如下 有没有办法编写一个单元测试来执行uncaught exception handler 功能正常 但测试正常退出 import logging def config logger logge
  • 如何调整 matplotlib 单选按钮的大小和纵横比?

    我已经尝试了几个小时来使简单的单选按钮列表的大小和纵横比正确 但没有成功 首先 导入模块 import matplotlib pyplot as plt from matplotlib widgets import RadioButtons
  • 如何使用 Python boto3 获取 redshift 中的列名称

    我想使用 python boto3 获取 redshift 中的列名称 创建Redshift集群 将数据插入其中 配置的机密管理器 配置 SageMaker 笔记本 打开Jupyter Notebook写入以下代码 import boto3
  • Python MySQL 操作错误:1045,“用户 root@'localhost' 的访问被拒绝

    我试图通过以下方式从我的 python 程序访问数据库 db mysql connect host localhost user Max passwd maxkim db TESTDB cursor db cursor 但是 我在第一行代码
  • Python“非规范化”unicode 组合字符

    我正在寻找标准化 python 中的一些 unicode 文本 我想知道是否有一种简单的方法可以在 python 中获得组合 unicode 字符的 非规范化 形式 例如如果我有序列u o xaf i e latin small lette
  • 时间序列数据预处理 - numpy strides 技巧以节省内存

    我正在预处理一个时间序列数据集 将其形状从二维 数据点 特征 更改为三维 数据点 时间窗口 特征 在这样的视角中 时间窗口 有时也称为回顾 指示作为输入变量来预测下一个时间段的先前时间步长 数据点的数量 换句话说 时间窗口是机器学习算法在对
  • 为什么在Python解释器中输入_会返回True? [复制]

    这个问题在这里已经有答案了 我的翻译行为非常奇怪 gt gt gt True gt gt gt type True
  • App Engine 实体到字典

    将 google app engine 实体 在 python 中 复制到字典对象的好方法是什么 我正在使用 db Expando 对象 所有属性均为扩展属性 Thanks 有一个名为foo尝试 foo dict
  • 检索 geodjango 多边形对象的边界框

    如何在 geodjango 中获取 MultiPolygon 对象的边界框 在 API 中找不到任何内容http geodjango org docs geos html http geodjango org docs geos html
  • pygame:使用 sprite.RenderPlain 绘制精灵组的顺序

    我有一个精灵组 需要按一定的顺序绘制 以便其精灵按应有的方式重叠 然而 即使使用运算符模块函数 sorted self sprites key attrgetter y x 对组进行排序 顺序也是错误的 我该如何解决这个问题 直截了当地说
  • 为正则表达式编写解析器

    即使经过多年的编程 我很羞愧地说我从未真正完全掌握正则表达式 一般来说 当问题需要正则表达式时 我通常可以 在一堆引用语法之后 想出一个合适的正则表达式 但我发现自己越来越频繁地使用这种技术 所以 自学并理解正则表达式properly 我决
  • Python守护进程:保持日志记录

    我有一个将一些数据记录到磁盘的脚本 logging basicConfig filename davis debug log level logging DEBUG logging basicConfig filename davis er
  • 基于值而不是类型的单次调度

    我在 Django 上构建 SPA 并且有一个庞大的功能 其中包含许多功能if用于检查我的对象字段的状态名称的语句 像这样 if self state new do some logic if self state archive do s
  • 跨应用程序使用 Django 模型?

    因此 在我的 Django 项目中 我有几个不同的应用程序 每个应用程序都有自己的模型 视图 模板等 让这些应用程序进行通信的好方法 Django 方式 是什么 一个具体的例子是一个会议应用程序 它有一个会议模型 我有一个家庭应用程序 我想
  • 确定分割形状几何体的“左”侧和“右”侧

    我的问题是 我怎样才能确定哪一个Aside and Bside的侧面已经分割的旋转矩形几何体 http nbviewer jupyter org urls dl dropbox com s ll3mchnx0jwzjnf determine
  • PyInstaller“ValueError:源代码字符串不能包含空字节”

    我得到了一个ValueError source code string cannot contain null bytes执行命令时pyinstaller main py在具有和不具有管理员权限的cmd中 Traceback most re
  • 高效创建抗锯齿圆形蒙版

    我正在尝试创建抗锯齿 加权而不是布尔 圆形掩模 以制作用于卷积的圆形内核 radius 3 no of pixels to be 1 on either side of the center pixel shall be decimal a
  • 在matlab中,如何读取python pickle文件?

    在 python 中 我生成了一个 p 数据文件 pickle dump allData open myallData p wb 现在我想在Matlab中读取myallData p 我的Matlab安装在Windows 8下 其中没有Pyt
  • Heroku 与 django 通道的正确 procfile/要求是什么?

    tl dr django 频道应用程序在本地使用 manage py runserver 运行 但不在 heroku 上运行 我是 django 通道的新手 尝试使用 heroku 通道部署一个非常基本的 django 应用程序 我最初使用
  • django jet 中的自定义徽标

    我目前正在尝试对 django 管理面板的皮肤进行一些定制 以使其更符合我们的品牌 目前我们使用 django jet 来美化管理面板 django jet 可以自定义 css html 吗 所有评论都说我应该更改一些 html 文件 但我

随机推荐

  • V4l2框架基础知识(三)

    V4L2框架概述 V4L2框架主要部分组成 V4L2 device 管理所有设备 media device media device框架管理运行时的pipeline V4L2 device 这个是整个输入设备的总结构体 可以认为他是整个V4
  • ROS节点运行管理launch文件

    launch 文件是一个 XML 格式的文件 可以启动本地和远程的多个节点 还可以在参数服务器中设置参数 作用 可以简化节点的配置与启动 提高ROS程序的启动效率 一 新建 1 新建launch文件 如 turtlesim 在功能包下添加
  • gdb

    100个gdb技巧 Debugging with GDB gdb调试基础 g选项 在编译时要加上 g选项 生成的可执行文件才能用gdb进行源码级调试 g选项的作用是在可执行文件中加入源代码的信息 比如可执行文件中第几条机器指令对应源代码的第
  • Windows10+ubuntu 双系统安装(针对联想小新air14)

    联想小新air14 Windows10 ubuntu 双系统安装 一 准备工作 1 查看电脑配置 1 查看BIOS模式 2 搞清楚硬盘单双 2 制作系统盘 1 资源准备 2 写盘 3 磁盘分区 二 安装过程 1 用做好的系统盘安装系统 2
  • LaTeX的基本使用

    看前说明 说明 这篇文章介绍了latex的基本使用 基本覆盖了latex入门的知识点 由本人自己学习研究整理出来 不可被他人拿来进行不当的商用等等 违者必究 大家利用下面完整的latex文档 在编译器中编译 对比latex文档和生成文件之间
  • MyEclipse中关闭项目的作用及操作方法

    1 关闭项目的操作方式 选中项目 右键 点击Close Project 便可关闭当前项目 如图 关闭后的项目状态如图所示 2 开启项目的操作方式 双击项目或右键项目 点击Open Project 弹出如下窗口 点击 No 按钮 开启当前项目
  • JUC 之 线程局部变量 ThreadLocal

    ThreadLocal 基本概念 ThreadLocal 提供线程局部变量 这些变量与正常的变量不同 因为每一个线程在访问 ThreadLocal 实例的时候 通过其get 或者 set 方法 都有自己的 独立初始化的变副本 ThreadL
  • react、umi、dva

    React 一 React的简介 1 介绍 React 是一个用于构建用户界面的 JAVASCRIPT 库 React主要用于构建UI 很多人认为 React 是 MVC 中的 V 视图 React 起源于 Facebook 的内部项目 用
  • Mac升级Catalina(10.15)后 clion不能运行,提示「xcrun: error: invalid active developer path ...」

    Mac升级Catalina 10 15 后 使用clion 运行失败 提示内容如下 xcrun error invalid active developer path Library Developer CommandLineTools m
  • MQTT-保留消息和遗嘱消息

    遗嘱消息 为什么需要遗嘱消息 MQTT的订阅发布机制 解耦了消息的发送方和接收方 这使我们没有办法获取对端的状态 为了解决该问题 MQTT提供了遗嘱消息 为意外断线的客户端提供了对外发出通知的能力 如何使用遗嘱消息 使用遗嘱消息 客户端需要
  • 【笔记】关于win导入外部动态磁盘时“包名称无效”的解决办法

    网易博客搬家 原贴时间 2015 02 22 一 问题背景 硬盘闲置 电脑重装系统以后装上硬盘 计算机 中无盘符 磁盘管理中显示硬盘为 外部动态磁盘 右键 导入外部磁盘 提示 包名称错误 二 尝试过程 1 重启电脑 无效 2 换sata接口
  • DBeaver教程:连接达梦数据库DM8

    本文介绍如何通过dbeaver连接达梦数据库进行管理 DBeaver 是一个基于 Java 开发 免费开源的通用数据库管理和开发 DBeaver 采用 Eclipse 框架开发 支持插件扩展 并且提供了许多数据库管理工具 ER 图 数据导入
  • linux查看所有文件

    这本阿里P8撰写的算法笔记 再次推荐给大家 身边不少朋友学完这本书最后加入大厂 Github 疯传 史上最强悍 阿里大佬 LeetCode刷题手册 开放下载了 1 linux文件结构 linux文件结构是树形的 根目录是 其它所有文件都是在
  • OCR加持白描App,让AI成为视障者的眼睛

    现实中 你可以轻松无障碍地阅读各类平面印刷文字以及身边的一切 或许你未曾想过 视障人群该怎么办呢 统计数据显示 中国大约有1700万的视障群体 相当于每100个人中就有超过1位是视障人士 但我们在日常生活中却很少见到他们 那是因为视障群体在
  • 3、ARIMA序列预测Matlab代码、可视化(可做算法对比)

    1 文件包中程序均收集 整理 汇总自网络 2 文件包完整内容 1 ARIMA 功能函数 仅包含一个ARIMA算法函数 需要调用到自己的程序中使用 函数部分代码及预览图 function result ARIMA algorithm data
  • 应用程序本地化

    一 简介 使用本地化功能 可以轻松地将应用程序翻译成多种语言 甚至可以翻译成同一语言的多种方言 如果要添加本地化功能 需要为每种支持的语言创建一个子目录 称为 本地化文件夹 通常使用 lproj作为拓展名 当本地化的应用程序需要载入某一资源
  • pytorch 中register_buffer()

    今天在看DSSINet代码的ssim py时 遇到了一个用法 class NORMMSSSIM torch nn Module def init self sigma 1 0 levels 5 size average True chann
  • Docker网络体系结构:设计可扩展、可移植的Docker容器网络

    原文地址 译者 本人翻译水平有限 目的仅是为了学好Docker 如有错误请见谅 翻译版本 v1 01 将不断优化翻译质量 本文包含以下内容 Docker容器就是将应用及其所依赖运行环境的完整文件系统打成一个包 包括所需代码 运行库 系统工具
  • 一文读懂人脸识别技术

    2019 08 27 17 06 26 本文内容涵盖人脸识别发展历程 市场研究 核心技术 商业应用以及产业落地 个人看法等干货研究 注意 本文干货满满 约有2万7千字 强烈建议大家先收藏后学习 01 发展史 1 人脸识别的理解 人脸识别 F
  • DJANGO增删改查

    https www cnblogs com yuanlianghong p 10987877 html 一 Django的工作流 1 用户通过浏览器输入相应的 URL 发起 HTTP 请求 一般是 GET POST 2 Django 接受到