前言 ´・ᴗ・`
- 本节先简要拓展了前面学习的视图方面的简单应用
- 本篇内容将会帮助你学习以下技能
- 1 如何使用CreateView, UpdateView, DeleteView
- 2 如何自制模板‘
- 在图书馆应用方面 本篇将会带您…
- 1 为图书馆应用添加 管理员添加书本 作者的方法
CreateView, UpdateView, DeleteView
我们上节拓展了 对于续借操作的支持
这里通过CreateView UpdateView DeleteView 来支持对作者数据 以及图书数据的增删改查
明显
- 增 CreateView
- 删 DeleteView
- 改 UpdateView
- 查 ListView (之前说过)
Django已经帮我们把这些东西建立模板 我们不用费心底层的一些debug
当然 后期还是要自己动手 这里是为了尽快上手才用Django的模板的
好 在view.py 添加:
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.urls import reverse_lazy
from .models import Author
class AuthorCreate(CreateView):
model = Author
fields = '__all__'
initial={'date_of_death':'05/01/2018',}
class AuthorUpdate(UpdateView):
model = Author
fields = ['first_name','last_name','date_of_birth','date_of_death']
class AuthorDelete(DeleteView):
model = Author
success_url = reverse_lazy('authors')
- model 我们玩过listView 知道这个就是 直接绑定数据库模型ORM的操作了
- field 指的是 你想要显示的表单的字段
比如 注册的时候写的 用户名 密码 验证码 这类的“字段” - success_url 就是你删除完以后 需要显示 你是否真的删除成功 所以跳转到author页面
这一项就是 操作成功(success)后跳转的页面 - initial 默认值设置 还记得placeholder吧
- reverse_lazy() 也就是reverse一个特殊版本
接下来就是模板了
其实就只有两种
- 增 改的模板
- 删除的模板
Django要求模板命名就有规范:)
这个是模板1 用<model的名称>_form.html
这种格式
locallibrary/catalog/templates/catalog/author_form.html:
{% extends "base_generic.html" %}
{% block content %}
<form action="" method="post">
{% csrf_token %}
<table>
{{ form.as_table }}
</table>
<input type="submit" value="Submit" />
</form>
{% endblock %}
这个是模板2:<model_name>_confirm_delete.html
locallibrary/catalog/templates/catalog/author_confirm_delete.html
{% extends "base_generic.html" %}
{% block content %}
<h1>Delete Author</h1>
<p>Are you sure you want to delete the author: {{ author }}?</p>
<form action="" method="POST">
{% csrf_token %}
<input type="submit" action="" value="Yes, delete." />
</form>
{% endblock %}
接下来url映射添加 正常操作:
path('author/create/', views.AuthorCreate.as_view(), name='author_create'),
path('author/<int:pk>/update/', views.AuthorUpdate.as_view(), name='author_update'),
path('author/<int:pk>/delete/', views.AuthorDelete.as_view(), name='author_delete'),
然后 我们还得添加权限
并且把主页index 简要修改一波:)
效果大概是这样的:
这里上代码:
locallibrary/catalog/templates/catalog/author_form.html:
{% extends "base_generic.html" %}
{% block content %}
<form action="" method="post">
{% csrf_token %}
<table>
{{ form.as_table }}
</table>
<input type="submit" value="Submit" />
</form>
{% endblock %}
locallibrary/catalog/templates/catalog/author_confirm_delete.html
{% extends "base_generic.html" %}
{% block content %}
<h1>Delete Book</h1>
<p>Are you sure you want to delete the book: {{ book }}?</p>
<form action="" method="POST">
{% csrf_token %}
<input type="submit" action="" value="Yes, delete." />
</form>
{% endblock %}
注意没有 这个模板和之前的几乎完全一样 这就是Django封装的好处
可惜 我们应该会设计自己的前端 所以这里也就玩玩就好
url.py 正常套路 添加新的映射 注意映射的名字是用在模板里面的 别乱取名字:)否则来回复制粘贴
path('book/create/', views.BookCreate.as_view(), name='book_create'),
path('book/<int:pk>/update/', views.BookUpdate.as_view(), name='book_update'),
path('book/<int:pk>/delete/', views.BookDelete.as_view(), name='book_delete'),
这下 管理员添加书本 作者的页面就搞定了
学会自制简单的模板
我们之间复制粘贴很多模板了其实
也知道模板变量的含义
这里我们不讲那些基础的语法 比如extends 还有if else 那些你看看就懂了
讲一下模板中怎么链接url
以我们加下来需要设计的的 管理员添加书本 作者这个为例:
我们要改造原有的authorlist booklist 还有主页:
使得有链接能够 联结到 我们已经做好的页面
authorlist 添加这句 (学会看懂意思 你就可以自定义了:))
{% if perms.catalog.set_book_as_returned %}
- <a href="{% url 'author_update' author.id %}">change</a>
- <a href="{% url 'author_delete' author.id %}">delete</a>
{% endif %}
perms.catalog.set_book_as_returned 这句在 权限那一篇文章我们已经讲过了:)
booklist 添加这句:
{% if perms.catalog.set_book_as_returned %}
- <a href="{% url 'book_update' book.id %}">change</a>
- <a href="{% url 'book_delete' book.id %}">delete</a>
{% endif %}
观察格式:url '<url映射的名字>' 传递的参数
看下url匹配规则咋说的:path('book/<int:pk>/delete/', views.BookDelete.as_view(), name='book_delete'),
传递的参数就到int:pk
面去了
很机智啊Django( ̄︶ ̄)↗
另外
这里并非采用硬编码 即,不是这么写的:
{% if perms.catalog.set_book_as_returned %}
- <a href="/catalog/book/{{ book.id }}/update/">change</a>
- <a href="/catalog/book/{{ book.id }}/delete/">delete</a>
{% endif %}
这就是灵活性所在——如果映射名字不变 你想改什么url都行 比如想要加密 不让外人看懂
内部却有很简单的沟通方式
最后 base_generic.html:
{% if perms.catalog.set_book_as_returned %}
<ul>
<li>-----------</li>
<li><a href="{% url 'all-borrowed' %}">borrowed books manage</a></li>
<li><a href="{% url 'book_create' %}">add books</a> </li>
<li><a href="{% url 'author_create' %}">add authors</a> </li>
</ul>
{% endif %}
赋予 图书管理员的专区 —— 添加书本和作者
当然你还可以添加书本实例 几乎是一样的简单
总结 ´◡`
这篇其实就是前面几篇的延伸
我们到这里 就已经算是能够活学活用Django的各个方面了
Django的基础就差不多了
这里建议你总结一下 看看哪里还有遗漏的问题
这是我放在github上的源码 可以参考 对照一下
后面我们就要开始起飞啦 也就是 这个图书馆应用的收官之战 总攻开启
我的专栏 希望能够帮到你 ( •̀ ω •́ )✧
-
本文专栏
手把手带你学后端(服务端) -
想学习数据库嘛? 不妨从MySQL入手
MySQL专栏 -
python这么火 想要深入学习python 玩一下简单的应用嘛?
python应用 -
谢谢大佬支持! 萌新有礼了:)