Django--案例

案例1:用户管理

1. 展示用户列表

  • url
  • 函数
    • 获取所有用户信息
    • HTML渲染

将数据库获取的对象当做参数传递给前端HTML:
在这里插入图片描述注意字典的键是双引号。

补充:时间在模板中如何使用字符串
在这里插入图片描述

2.添加用户

  • url
  • 函数
    • 通过GET方式,看到页面,输入内容。
    • 通过POST方式,提交 -> 写入到数据库。
      在这里插入图片描述
      在这里插入图片描述可以在列表的html中添加一个a标签链接到add 中,因为是在同一个网址下,即![在这里插入图片描述](https://img-blog.csdnimg.cn/7b277d2c3e314577bd8156725ff0e295.png在这里插入图片描述

3.删除用户

  • url
  • 函数

同样先添加 删除的 URL 和函数 ,
在这里插入图片描述

开始时可以直接URL后面添加 ?uid=xx 来指定删除对应id 的数据.
在这里插入图片描述

在这里插入图片描述
由于不能让用户去输入对应id的URL来实现删除,所示设置a标签进行跳转删除

在这里插入图片描述这样就通过前面的for循环在每一列后面添加了删除的a标签来跳转到删除的URL 而id即使用当前的obj.id来实现指定id的删除
结果如下:
在这里插入图片描述
由于在当前的同样的网址下操作,所以Href后面的网址 http://127.0.0.1:8000 同样可以省去
在这里插入图片描述

再设置删除后面的跳转的页面

在这里插入图片描述

#案例2

设计数据库表
在这里插入图片描述
max_digits参数表示数字长度,而decimal_places表示小数点后面的长度

通过ForeignKey来设置外键,参数中的to 表示与哪张表进行关联,to_fields与表中哪一列关联,
on_delete=models.CASCADE 表示级联删除,当外键中对应的部门删除后,对应的主键也会被删除;
on_delete=models.SET_NULL 表示当外键被删除后,主键内容不是被删除,而是被置空;

可以在Django中通过元组来为其做约束,
在这里插入图片描述这里约束之后选择性别的时候只能是1,或2。

设计数据库
在这里插入图片描述修改配置文件,连接MySQL
在这里插入图片描述
DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.mysql’,
‘NAME’:‘test1’,
‘USER’:‘root’,
‘PASSWORD’:‘root’,
‘HOST’:‘127.0.0.1’,
‘PORT’:3306,
}
}

通过Django命令生成 数据库表

python manage.py makemigrations
python manage.py migrate

还可以通过
在这里插入图片描述快速生成命令。

设置HTML 前端 通过Bootstrap 框架
可以参考 https://v3.bootcss.com/components/#navbar-default网站
在这里插入图片描述
###注意在 Pycharm 中可以通过ctrl +alt+L 自动调整代码格式

通过前端设计(主要通过在bootstrap寻找模板)得到前端页面:部门列表显示界面和部门添加页面
![在这里插入图片描述](https://img-blog.csdnimg.cn/b5ace1c6d0e9406799fea4061edd7bb6.png在这里插入图片描述在这里插入图片描述
页面设计成功,完成实际功能。
提交按钮的方式为POST方式去提交,所以再在views中设计代码

注意,在form 中为写action的话,会将数据提交到当前的地址
在这里插入图片描述即当前的地址
在这里插入图片描述
注意,添加部门是通过POST 获得数据,而删除部门使用的是GET的方式获得数据
在这里插入图片描述
##编辑部门
在编辑部门的时候,因为要将原来的部门中数据在 编辑页面的中显示,所以需要传递值过来,这里的方法是通过传id到编辑页面 再通过id再数据库寻找到数据,当然可以通过上面的方式在html中获取到id,

#这里还可以通过url匹配来传递id:

首先使用正则表达

在这里插入图片描述

相当于每次在url中带了一个前面传过来的nid,
在这里插入图片描述这样就可以获得nid
在这里插入图片描述最后再传递到指定的页面
在这里插入图片描述再进行数据库、重定向操作
在这里插入图片描述
Django支持模板继承

在上面的html中许多页面的模板都是一样的,之前采取的方式是通过重复的html代码来实现,这样比较复杂

这里由于Django支持模板的继承

{% block content %}{% endblock %} (content表示内容,不是固定的,只需要继承页面的保持一直即可)

通过 {% block content %} 特殊占位符将页面中模板填充到block 里面,其它页面需要这个模板只需要通过{% extends ‘layout.html’(继承的页面文件) %}继承,
然后编写*{% block content %}与{% endblock %}中间的部分就可以。

在这里插入图片描述
这样重复的部分就不需要进行编写

在这里插入图片描述这样如果之后导航需要修改,只需要改模板中的,其它页面继承的也会随之自动修改。

如果有的页面需要不同的js、css,同样也可以通过
{% block js %} (加上该页面独特的js){% endblock %}
{% block css %}(加上该页面独特的css){{% endblock %}
在这里插入图片描述右边为继承页面

#用户列表

注意:
1:python中datatime转字符串的方式

time=obj.create_time (datatime类型)
t=time.strftime(“%Y-%m-%d”)(字符串类型)

注意:在如果在模板语法,即html页面中使用以上的python语言是通过obj.create_time | date:“Y-m-d (H:i:s)”

在这里插入图片描述

2.在通过元组中套用选择,并使用到choices的时候,因为数据库储存的是1,2等,想要找到1、2对应的字符串,可以直接通过xxxx.get_xxx.display直接显示
在这里插入图片描述
例如如图中,可以通过

在这里插入图片描述注意,如果在模板语法,即html页面中使用以上的python语言不需要加()

3:在做外键与别的表关联的时候,主键的表中往往是存储的是外键表中的id,如果想要获得对应id的行中每列的数据,可以通过id去查询外键的表。
还可以直接通过
在这里插入图片描述
可以通过对象.(外键对象)dapart.title(外键表中对应字段)直接获取需要的外键表数据。
在这里插入图片描述

案例3 订单表

同样设计model(数据库对应表)、url 、views.py、继承的父html 对应的标签、再设计oredel_list.html

再去https://v3.bootcss.com/javascript/#modals获得Bootstrap对话框的模板

在这里插入图片描述在这里插入图片描述为button绑定下面对话框

方法一:为上面按钮添加两个属性 data-toggle与 data-target
在这里插入图片描述在这里插入图片描述
效果如下:在这里插入图片描述方法二:通过JS绑定事件,

在这里插入图片描述

官方文档上显示通过JS调用
在这里插入图片描述在这里插入图片描述在这里插入图片描述

设置对话框的内容(内容应该是通过modelform表示)
在对应的py文件中,通过modelform将数据传输到前端form表单
在这里插入图片描述效果展示:
在这里插入图片描述如果想上下排布,可以修改div class="col-xs-6"为div class=“col-xs-12”
在这里插入图片描述效果展示:
在这里插入图片描述订单号应该是后台自动生成,所以在modelform中将订单号进行排除。

在这里插入图片描述效果展示:
在这里插入图片描述点击保存,将数据都放到数据库,即绑定按钮事件,然后发送Ajax请求
在这里插入图片描述![在这里插入图片描述](https://img-blog.csdnimg.cn/cf066ccf063943fa8f5ee892dafa981e.png

提示 效果展示:

在这里插入图片描述为页面添加数据库订单列表
在这里插入图片描述并添加页码
在这里插入图片描述为对话框中保存按钮添加清空表单、关闭对话框、并页面自动刷新页面的功能
在这里插入图片描述为列表添加删除的功能
在这里插入图片描述在这里插入图片描述这里像之前部门列表一样主要是通过点击就跳转页面进删除,这里修改其成为点击就直接删除
在这里插入图片描述修改为input的标签,并为其 添加 btn-delete的自定义样式,并绑定事件

在这里插入图片描述
添加删除对话框,在模板中找到警告框,并对应修改模板中内容
在这里插入图片描述在这里插入图片描述data-dismiss=“modal” 属性可以实现在点击取消按钮后对话框消失的功能

完善删除按钮的实际功能

方法,在点击删除按钮的时候,获取对应行的id,通过id进行删除

方式1:通过删除按钮将对应id放在某个标签中,再点击确认的时候再将对应的id。
方式2:设置一个默认值为0的全局变量,再点击删除的按钮的时候,将全局变量设置为对应的id,点击确认的时候再将该全局变量获取

方式二
先为删除按钮添加自定义属性,并为其绑定事件

在这里插入图片描述设置全局变量,并在点击事件中获取对应的全局变量的值
在这里插入图片描述
为删除弹窗中确认键绑定事件
在这里插入图片描述
为绑定的事件添加ajax,并将数据传输到后台在这里插入图片描述在后台通过.exists()来先判断是否数据存在,

在这里插入图片描述

在这里插入图片描述成功后进行页面刷新,方法有直接删除对应标签,或者简单的方法location.reload();
在这里插入图片描述完成删除按钮功能!

修改编辑按钮的功能

这里由于编辑的弹窗与新建弹窗内容差不多,所以共用一个form
在这里插入图片描述此处form的id为myModalLabel

然后将对应编辑的原内容显示在form中
发送AJAX去后端获取当前行的相关数据

在这里插入图片描述如果数据不存在
在这里插入图片描述就不会再弹出编辑框。
在这里插入图片描述所以为显示对话框设置条件
在这里插入图片描述
如果从数据库获取的数据,应该是一个对象,
在这里插入图片描述也可以直接从数据库获取的数据,获取的数据为一个字典
在这里插入图片描述获取字典的格式: row_dict=models.Order.objects.filter(id=uid).values(“xxx”,“xxx”,“xxx”).first()

类似之前的
queryset,
queryset = models.Order.objects.all(), 里面表示的是queryset = [obj,obj,obj,] 里面内容为对象;

			queryset = models.Order.objects.all().values("id","title"),里面表示的是queryset = [ {'id':1,'title':"xx"},{'id':2,'title':"xx"}, ] 里面内容为字典;

			queryset = models.Order.objects.all().values_list("id","title")里面表示的元组# queryset = [ (1,"xx"),(2,"xxx"), ];


			这里的JSON序列化只支持字典,所以一般用.values

现在将数据放在对话框中,获取到对应的标签id,然后将对应值放在对应标签中
在这里插入图片描述
因为这里与新建订单用的是同一个对话框,所以需要在使用时都需要将之前内容清空
在这里插入图片描述编辑显示的内容解决,现在完成编辑中保存的按钮功能
因为编辑与新建使用的同时一个对话框,而编辑的时候保存按钮是对原有数据库的内容进行修改,而不是跟新建一样在数据库中添加内容。

设置一个全局变量 (如:Edit_ID),并将编辑中uid赋值给这个全局变量
在这里插入图片描述
为了防止在点击编辑后,再点击新建,Edit_ID还是上次那个, 所以在新建事件中需要将Edit_ID置空
在这里插入图片描述这里将Edit_ID设置为flase,即表示undefined

所以之后就可以在保存按钮中根据判断,如果Edit_ID为flase即undefined时,就表示为新建的保存,否则就为编辑的保存。
在这里插入图片描述这里方便代码整体性,将编辑函数与添加函数单独拿出来写,将之前添加绑定事件中函数放在doAdd中,同时编写doEdit函数

在这里插入图片描述这里的url应该带上相应的uid

这里还可以做一层验证,也可以不做
在这里插入图片描述通过instance与save 实现modelform的对原数据的修改,同时通过error在前端显示输入的错误信息
在这里插入图片描述
在这里插入图片描述
主要是通过Edit_ID为ture与flase来决定是新建还是编辑。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值