一、多对多关系

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操作)还需要调用相关的模板文件以响应给客户端。

1690511645284.png

三、sessioncookie

所有WEB框架都一定涉及sessioncookie知识。因为HTTP协议是一种无状态的协议。

3.1 Session的工作流程

1690530665817.png

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 实现手动访问路由需要登录时从哪来到哪儿去的流程图

1690534501768.png

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
最后修改:2024 年 11 月 09 日
如果觉得我的文章对你有用,请随意赞赏