Django4全栈进阶之路22 项目实战(三种方式开发部门管理):方式三:FBV+ModelForm+get_object_or_404
1、视图
@login_required
def department_list_view(request):
departments = Department.objects.all()
return render(request, 'base/depart/department_list.html', {'departments': departments})
# department = DepartmentsForm()
# return render(request, 'base/depart/department_list.html', {'department': department}) def department_detail_view(request, pk):
department = get_object_or_404(Department, pk=pk)
return render(request, 'base/depart/department_detail.html', {'department': department}) @login_required
def department_create_view(request):
if request.method == 'POST':
form = DepartmentsForm(request.POST)
if form.is_valid():
department = form.save(commit=False)
department.created_by = request.user
department.updated_by = request.user
department.save()
# return redirect('department_detail', pk=department.pk)
return redirect('department_list')
else:
form = DepartmentsForm()
return render(request, 'base/depart/department_create.html', {'form': form}) @login_required
def department_edit_view(request, pk):
department = get_object_or_404(Department, pk=pk)
if request.method == 'POST':
form = DepartmentsForm(request.POST, instance=department)
if form.is_valid():
department = form.save(commit=False)
department.updated_by = request.user
# return redirect('department_detail', pk=department.pk)
return redirect('department_list')
else:
form = DepartmentsForm(instance=department)
return render(request, 'base/depart/department_edit.html', {'form': form}) @login_required
def department_delete_View(request, pk):
department = get_object_or_404(Department, pk=pk)
if request.method == 'POST':
department.delete()
return redirect('department_list')
return render(request, 'base/depart/department_delete.html', {'department': department})
2、路由
urlpatterns = [
# FBV模式+ ModelForm
path('department/', views.department_list_view, name='department_list'),
path('department/<int:pk>/', views.department_detail_view, name='department_detail'),
path('department/add/', views.department_create_view, name='department_add'),
path('department/<int:pk>/update/', views.department_edit_view, name="department_edit"),
path('depart/delete/<int:pk>/', views.depart_delete_view, name='department_delete'),
]
3、模块
department_list.html
{% extends 'base.html' %}
{% block content %}
<div style="margin-top: 16px;">
<a href="{% url 'department_add' %}" class="btn btn-primary mb-3">添加部门</a>
</div>
<div class="card mt-3">
<div class="card-header">部门列表</div>
<div class="card-body">
<table class="table table-bordered">
<thead>
<tr>
<th>ID</th>
<th>部门名称</th>
<th>父级部门</th>
<th>显示排序</th>
<th>负责人</th>
<th>联系电话</th>
<th>邮箱</th>
<th>部门状态</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{% for department in departments %}
<tr>
<td>{{ department.id }}</td>
<td>{{ department.name }}</td>
<td>{{ department.parent }}</td>
<td>{{ department.sort }}</td>
<td>{{ department.owner }}</td>
<td>{{ department.phone }}</td>
<td>{{ department.email }}</td>
<td>{{ department.status }}</td>
<td>
<a href="{% url 'department_detail' department.pk %}" class="btn btn-primary btn-sm">详情</a>
<a href="{% url 'department_edit' department.pk %}" class="btn btn-success btn-sm">编辑</a>
<a href="{% url 'department_delete' department.pk %}" class="btn btn-danger btn-sm">删除</a>
</td>
</tr>
{% empty %}
<tr>
<td colspan="9" style="text-align: center;">No departments yet.</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
</div>
</div>
department_create.html
{% block content %}
{% include 'base/depart/department_form.html' with form=form button_text='新增' form_title="新增部门" %}
{% endblock %}
department_update.html
{% block content %}
{% include 'base/depart/department_form.html' with form=form button_text='保存' form_title='编辑部门' %}
{% endblock %}
department_form.html
{% extends 'base.html' %}
{% load widget_tweaks %}
{% block content %}
<div class="card mt-3">
<div class="card-header">
{{ form_title }}
</div>
<div class="card-body">
<form method="post">
{% csrf_token %}
<div class="form-group">
<label for="{{ form.name.id_for_label }}">部门名称:</label>
{{ form.name|attr:"class:form-control" }}
</div>
<div class="form-group">
<label for="{{ form.parent.id_for_label }}">父级部门:</label>
{{ form.parent|attr:"class:form-control" }}
</div>
<div class="form-group">
<label for="{{ form.description.id_for_label }}">部门介绍:</label>
{{ form.description|attr:"class:form-control" }}
</div>
<div class="form-group">
<label for="{{ form.sort.id_for_label }}">显示排序:</label>
{{ form.sort|attr:"class:form-control" }}
</div>
<div class="form-group">
<label for="{{ form.owner.id_for_label }}">负责人:</label>
{{ form.owner|attr:"class:form-control" }}
</div>
<div class="form-group">
<label for="{{ form.phone.id_for_label }}">联系电话:</label>
{{ form.phone|attr:"class:form-control" }}
</div>
<div class="form-group">
<label for="{{ form.email.id_for_label }}">邮箱:</label>
{{ form.email|attr:"class:form-control" }}
</div>
<div class="form-group">
<label for="{{ form.status.id_for_label }}">部门状态:</label>
{{ form.status|attr:"class:form-control"}}
</div>
<button type="submit" class="btn btn-primary"> {{ button_text }}</button>
</form>
</div>
</div>
{% endblock %}
department_detail.html
{% extends 'base.html' %}
{% block content %}
<h1>{{ department.name }}</h1>
<p>{{ department.parent.name }}</p>
<p>{{ department.description }}</p>
<p>{{ department.sort }}</p>
<p>{{ department.owner }}</p>
<p>{{ department.email }}</p>
<p>{{ department.created_by.username }}</p>
<p>{{ department.created_at }}</p>
<p>{{ department.updated_by.username }}</p>
<p>{{ department.updated_at }}</p>
<a href="{% url 'department_edit' department.pk %}" class="btn btn-success btn-sm">编辑</a>
<a href="{% url 'department_delete' department.pk %}" class="btn btn-danger btn-sm">删除</a>
{% endblock %}
department_delete.html
{% extends 'base.html' %}
{% block content %}
<h1>Confirm delete</h1>
<p>Are you sure you want to delete department "{{ department.name }}"?</p>
<form method="post">
{% csrf_token %}
<button type="submit" class="btn btn-danger">Yes, delete</button>
<a href="{% url 'department_list' %}" class="btn btn-secondary">No, cancel</a>
</form>
{% endblock %}
Django4全栈进阶之路22 项目实战(三种方式开发部门管理):方式三:FBV+ModelForm+get_object_or_404的更多相关文章
- web前端全栈学习之路
web前端全栈学习之路 --- 陆续更新中 一.HTML相关 1.HTML常用标签:http://www.cnblogs.com/wyb666/p/8733699.html 2.HTML5基础: 3. ...
- 你的Node应用,对接分布式链路跟踪系统了吗?(一) 原创: 金炳 Node全栈进阶 4天前 戳蓝字「Node全栈进阶」关注我们哦
你的Node应用,对接分布式链路跟踪系统了吗?(一) 原创: 金炳 Node全栈进阶 4天前 戳蓝字「Node全栈进阶」关注我们哦
- C#.Net全栈工程师之路-学习路径
C#.Net全栈工程师之路-学习路径 按架构分: C/S架构: B/S架构: Mobile移动开发: 按技术点分: C#编程基础以及OOP面向对象编程: 数据库基础以及高级应用(MYSQL+MSSQL ...
- 战争热诚的python全栈开发之路
从学习python开始,一直是自己摸索,但是时间不等人啊,所以自己为了节省时间,决定报个班系统学习,下面整理的文章都是自己学习后,认为重要的需要弄懂的知识点,做出链接,一方面是为了自己找的话方便,一方 ...
- python全栈开发之路
一.Python基础 python简介 python数据类型(数字\字符串\列表) python数据类型(元组\字典) python数据类型(集合) python占位符%s,%d,%r,%f prin ...
- 华为全栈AI技术干货深度解析,解锁企业AI开发“秘籍”
摘要:针对企业AI开发应用中面临的痛点和难点,为大家带来从实践出发帮助企业构建成熟高效的AI开发流程解决方案. 在数字化转型浪潮席卷全球的今天,AI技术已经成为行业公认的升级重点,正在越来越多的领域为 ...
- Python全栈开发之7、模块和几种常见模块以及format知识补充
一.模块的分类 Python流行的一个原因就是因为它的第三方模块数量巨大,我们编写代码不必从零开始重新造轮子,许多要用的功能都已经写好封装成库了,我们只要直接调用即可,模块分为内建模块.自定义的模块. ...
- 全网最全postman接口测试教程和接口项目实战~从入门到精通!!!
Postman实现接口测试内容大纲一览: 一.什么是接口?为什么需要接口? 接口指的是实体或者软件提供给外界的一种服务. 因为接口能使我们的实体或者软件的内部数据能够被外部进行修改.从而使得内 ...
- 云计算Docker全面项目实战(Maven+Jenkins、日志管理ELK、WordPress博客镜像)
2013年,云计算领域从此多了一个名词“Docker”.以轻量著称,更好的去解决应用打包和部署.之前我们一直在构建Iaas,但通过Iaas去实现统一功 能还是相当复杂得,并且维护复杂.将特殊性封装到 ...
- Orlion个人博客 | 全栈工程师之路-www.orlion.ga
自己用wordpress+bootstrap搭建了一个博客,网址http://www.orlion.ga,用来记录博主学习和成长,主要关注JAVA.LANMP.前端与客户端(Android).算法与数 ...
随机推荐
- 自动化兼容性测试工具——WeTest
这个作业属于哪个课程 2021春软件工程实践|W班(福州大学) 这个作业要求在哪里 软件工程实践总结&个人技术博客 这个作业的目标 分享自动化兼容性测试工具的使用 其他参考文献 ... 目录 ...
- codec
1.codec究竟是什么 音频解码芯片:Audio codec,又叫声卡:本质就是ADC和DAC 2.codec的作用 在移动设备中,codec的作用可以归结为4种,分别如下: playback:对P ...
- 在昇腾平台上对TensorFlow网络进行性能调优
摘要:本文就带大家了解在昇腾平台上对TensorFlow训练网络进行性能调优的常用手段. 本文分享自华为云社区<在昇腾平台上对TensorFlow网络进行性能调优>,作者:昇腾CANN . ...
- day11-MySql存储结构
MySql存储结构 参考视频:MySql存储结构 1.表空间 不同的存储引擎在磁盘文件上的结构均不一致,这里以InnoDB为例: CREATE TABLE t(id int(11)) Engine = ...
- 自学UI设计有哪些书籍推荐?
自学UI设计大致分为两种情况:其一.业余学习,技能拓展,不以求职为目的;其二.谋生手段,小白进阶学习或者有转行的打算.前者,无论是学习内容或者深度都可以根据自己的需求和兴趣点来做学习选择,相对来说,学 ...
- 全局唯一ID的实现方案
为什么需要保证唯一ID? 在单机服务架构中,数据库的每一个业务表的主键ID都是允许自增的,但是在分布式服务架构的分库分表的设计,使得多个库或者多个表存储了相同的业务表,如果没有一个全局的唯一ID设计方 ...
- PHP微信三方平台-代公众号发送消息模板
1.微信三方平台代公众号实现业务接口API文档地址: https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/Offi ...
- DevOps, HybridOps and AIOps浅谈
DevOps, HybridOps and AIOps浅谈 DevOps的概念出现比较久了,很多的IT项目也都在实际的运用中.AIOps概念作为DevOps的升级版,也得到了很广大的关注,也出现了很多 ...
- 京东获得店铺的所有商品API接口(item_search_shop-获得店铺的所有商品)
京东获得店铺的所有商品API接口(item_search_shop-获得店铺的所有商品)接口展示说明及教程: 公共参数 名称 类型 必须 描述key String 是 调用key(必须以GET方式拼接 ...
- w11 U盘启动进PE看不到硬盘解决方法
w11 U盘启动进PE看不到硬盘解决方法 今天,因为要配系统,所以需要进pe,改配置文件,进去之后发现看不到系统盘,大吃一惊,然后各种找资料,最后,还是被我搞定了. 这里以戴尔为例,方法都差不多,先看 ...