我来到这个世界上就是解决问题的
今天写了一个图书管理系统,我先把一些问题或者知识点整理下来
前后端的一些交互注意点(无名分组,视图函数传参等等)
首先你要明白一点,就是访问网页的过程就是输入
url
地址,然后拿到前端网页后,输入信息,提交到后台(也是通过url
地址),通过视图函数的对应关系,找到相关的视图函数,处理完业务逻辑,在返回一个页面(就是django
必会的三剑客)
基于上面的前提,我今天总结了几个注意点。
- 首先
html
文件中接收的数据格式是什么样的,由url决定,比如我在设置编辑图书时,要根据图书的id来判断跳到哪个图书的页面下,于是这里面自然就想到了 url中设置无名分组,第一个参数设置正则数字格式,然后给个名字,用于反向解析 - 接着上面讲的,这个系统里面有一个功能就是:在图书列表界面,有对单个图书进行的编辑操作,这个功能的实现原理就是:给编辑 按钮设置一个a标签(超链接), 标签里面用模板语法,通过名字 + 当前图书的id值 反向解析出 url地址 传给后端 这样就得到一个独一无二的url地址 进入到图书的编辑页面
- 同样,图书列表中的添加图书也是这个实现原理(url设置无名分组,前端界面反向解析)
- 在编辑图书的时候
- 注意一本书可能有多个作者,这个时候在视图函数中取值就得按照getlist取值,拿到列表
- **由于书籍和作者是多对多,编辑图书之后需要对图书作者关系表进行操作,这个时候由于作者是个列表,于是就需要add(*author_list),打散列表,分成多个值,而set的时候,传的是可迭代对象,不需要打散就可以**
- 增删改完,要重定向到book_list, 通过反向解析就可以了
- 一些前端小知识
- url中设置 r’^$‘表示初始页,不加任何后缀,然后前端界面 a标签中的href设置成‘/’就表示跳转到首页
- 前端日期显示需要用到过滤器例如
<td>{{ book_obj.publish_date|date:'Y-m-d' }}</td>
这样显示的格式更亲民 - 前端常用forloop.counter表示序号,可以连续
- 出版社和作者这种可能有多个值的,要通过for循环从对象列表中取出
- 首先