1. 程式人生 > >6.1 - 圖書增刪改查頁面

6.1 - 圖書增刪改查頁面

通過 之前 lock art 視圖 publish 註意事項 val 腳本

一、需求及註意事項

需求:
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


詳情:
需查看代碼!!

二、數據庫

技術分享圖片

三、頁面效果

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

四、主要代碼

6.1 - 圖書增刪改查頁面