6.1 - 图书增删改查页面

一、需求及注意事项

需求:
1.列出图书列表、出版社列表、作者列表
2.点击作者,会列出其出版的图书列表
3.点击出版社,会列出其下的图书列表
4.可以创建、修改、删除 图书、作者、出版社

完成及注意事项:
1.注册
/register/
2.登录
/login/
3.注销
/logout/
4.图书列表
/book_list/
/add_book/
/update_book/303/
/del_book/
5.出版社列表
/publisher_list/
/add_publisher/
/update_publisher/105/
/update_book/306/105/publisher/ # 通过出版社,修改该书,之后返回出版社页面
/del_publisher/
/book_list/105/publisher/ # 通过出版社,查看该出版社得图书列表
/add_book/105/publisher/ # 通过出版社,增加该出版社得某本书
/del_book/105/publisher/ # 通过出版社,删除该出版社得某本书
6.作者列表
/author_list/
/add_author/
/update_author/67/
/update_book/307/67/author/ # 通过作者,修改该书,之后返回作者页面
/del_author/
/book_list/67/author/ # 通过作者,查看该作者得图书列表
/add_book/67/author/ # 通过作者,增加该作者得某本书
/del_book/67/author/ # 通过作者,删除该作者得某本书

7.验证是否登录(session),跳转到之前访问得页面:
采用中间件 mymiddleware.py
def process_request(self,request):pass
白名单 黑名单

8.验证是否登录,装饰器!
def check_login(func):pass
最后采用中间件,
否则每一个函数都有要加装饰器。(@check_login)

9.批量插入测试数据
脚本 myscript.py
models.Book.objects.bulk_create(ret1)

10.自定义分页器
mypage.py
from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger
封装
上一页,下一页,首页,尾页

11.模板继承
base.html
{% extends 'base.html' %}
{{ block.super }} 可以引用基类模板的内容

12.静态文件
jquery-3.2.1.js
bootstrap-3.3.7

ajax发送post请求时
init_ajax.js
取 csrf token 的值发送

删除,页面得模态框 插件
sweetalert

13.settings配置文件
中间件
mysql

终端打印sql语句

logging
登录注册,会有日志记录

14.自定义过滤器和标签
templatetags/my_tag_filter.py
{% load my_tag_filter %}
{{ path|update_path:book.id}}

15.urls
分发,名称空间,有名分组,反向解析
re_path(r'^update_book/(?P<id>\d+)',views.update_book),
正则反向解析,需要赋值
return redirect(reverse('book:book_publisher',args=(type_id,)))

16.FBV CBV
FBV(function base views) 视图里使用函数处理请求
CBV(class base views) 视图里使用类处理请求

path('login/',views.LoginView.as_view(), name = 'login')
class LoginView(View):pass
给CBV加装饰器:
@method_decorator(check_login)
def dispatch(self, request, *args, **kwargs):pass

17.表单forms组件
myforms.py

为forms组件赋初值
https://docs.djangoproject.com/en/2.0/ref/forms/api/
publisher_form.initial = {'name':publisher.name}

表单控件
给每一个key添加样式
def __init__(self,*args,**kwargs):pass
select下拉框:新增加的出版社,想不重启,立刻就显示:
def __init__(self,*args,**kwargs):pass
新增加书时,选择新增加的出版社
不能立刻通过校验is_valid 需要等一会,就通过了

18.DateTimeField
auto_now
auto_now_add
timezone

http://www.nanerbang.com/article/5488/
django:DateTimeField如何自动设置为当前时间并且能被修改:

DateTimeField.auto_now 如果为true 无法赋值,每次更新为最新时间;
DateTimeField.auto_now_add 如果为true 无法赋值,第一次创建时间

from django.db import models
import django.utils.timezone as timezone
class Doc(models.Model):
add_date = models.DateTimeField('保存日期',default = timezone.now)
mod_date = models.DateTimeField('最后修改日期', auto_now = True)

19.ORM表关系
一对一,(author authordetail)
删除author时,应该删除authordetail,关联的author就被删除了!

一对多,(book publisher)
删除出版社下面的某本书,拿到书的id,删除这本书;

多对多,(book author)
清除绑定关系,不应该删除书;

启动:
配置sql
python manage.py makemigrations
python manage.py migrate


详情:
需查看代码!!

二、数据库

三、页面效果

四、主要代码

猜你喜欢

转载自www.cnblogs.com/alice-bj/p/9114084.html
6.1