一、多对多关系
1.定义多对多关系
关系名称 = models.ManyToManyField(to)
# 分别创建了两个作者的信息
# author1 = Author.objects.create(name='黄健华')
# author2 = Author.objects.create(name='王琪凯')
# 获取1号作者,然后为1号作者添加一本图书
# author1 = Author.objects.get(pk=1)
# 反向关系
# author1.book_set.create(title='Django3.2实践100例')
# 获取2号作者
author2 = Author.objects.get(pk=2)
# 获取1号图书
book1 = Book.objects.get(pk=1)
# 为1号图书添加一个作者(因为一本书可以有多个作者)
# 正向关系
book1.authors.add(author2)
二、 Django
框架的设计模式
当请求路由时(http://127.0.0.1:8000/books/show/1),先去urls.py文件
匹配相应的路由。当匹配到以后,执行相关的视图函数,而在视图函数中
有可能要调用模型的相关方法来完成数据的CURD操作,完成相关的操作后
(尤其是完成SELECT操作)还需要调用相关的模板文件以响应给客户端。
三、session
与cookie
所有WEB框架都一定涉及session
与cookie
知识。因为HTTP
协议是一种无状态的协议。
3.1 Session的工作流程
3.2 HttpRequest.session
存储session
信息
HttpRequest.session['key'] = value
...
...
HttpRequest.session.save()
为什么SESSIONID作为COOKIE响应到客户端呢?
如果只有唯一一次请求和响应的话,SESSIONID可以由程序员在响应头中
添加任意一个KEY/VALUE,把SESSIONID响应到客户端。如sessionid:3。
但问题是绝对不可能只有一次请求,那么在发送第二次、第三次甚至第N次请求时
都需要带有SESSIONID发送到服务器,以表明身份。但是自定义的响应头是无法自动
附加在请求中的,需要程序员手动添加,那么也就意味"所有(如下定单、交易、退换货、修改
配送地址、商品评论等)"的HTTP请求中都需要来添加自定义的请求头行。那么最好的解决方案是:
有一个"东西"可以在发送请求时,自动的附加在请头中 --- COOKIE,所以为了保证后续可以自动
将SESSIONID附加在请求头,才在返回时返回的是COOKIE。
exists()
方法用于检查会话数据中是否存在指定的键,语法结构是:
HttpRequest.session.exists(key)
is_empty()
方法用于检查会话是否为空,语法结构是:
HttpRequest.session.is_empty()
get()
方法用于获取会话中指定键的数据,语法结构是:
HttpRequest.session.get(key)
delete()
方法用于删除会话中指定的键的数据,语法结构是:
HttpRequest.session.delete(key)
clear()
方法用于清除会话中所有的键值对,语法结构是:
HttpRequest.session.clear()
clear_expired()
方法用于清除会话中已过期的数据,语法结构是:
HttpRequest.session.clear_expired()
3.3 实现手动访问路由需要登录时从哪来到哪儿去的流程图
cookie
的构造函数是:
HttpResponse.set_cookie(key,value,max_age=None,expires=None,path='/')
如在响应模板时添加cookie
,代码如下:
response = render(request,'index.html',locals())
response.set_cookie(key,value)
return response