# # 一、多对多关系 ## 1.定义多对多关系 ```python 关系名称 = models.ManyToManyField(to) ``` ```python # 分别创建了两个作者的信息 # 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][1] # 三、`session`与`cookie` > 所有WEB框架都一定涉及`session`与`cookie`知识。因为`HTTP`协议是一种无状态的协议。 ## 3.1 Session的工作流程 ![1690530665817.png][2] ## 3.2 `HttpRequest.session` 存储`session`信息 ```python HttpRequest.session['key'] = value ... ... HttpRequest.session.save() ``` > 为什么SESSIONID作为COOKIE响应到客户端呢? > > 如果只有唯一一次请求和响应的话,SESSIONID可以由程序员在响应头中 > > 添加任意一个KEY/VALUE,把SESSIONID响应到客户端。如sessionid:3。 > > 但问题是绝对不可能只有一次请求,那么在发送第二次、第三次甚至第N次请求时 > > 都需要带有SESSIONID发送到服务器,以表明身份。但是自定义的响应头是无法自动 > > 附加在请求中的,需要程序员手动添加,那么也就意味"所有(如下定单、交易、退换货、修改 > > 配送地址、商品评论等)"的HTTP请求中都需要来添加自定义的请求头行。那么最好的解决方案是: > > 有一个"东西"可以在发送请求时,自动的附加在请头中 --- COOKIE,所以为了保证后续可以自动 > > 将SESSIONID附加在请求头,才在返回时返回的是COOKIE。 `exists()`方法用于检查会话数据中是否存在指定的键,语法结构是: ```python HttpRequest.session.exists(key) ``` `is_empty()`方法用于检查会话是否为空,语法结构是: ```python HttpRequest.session.is_empty() ``` `get()`方法用于获取会话中指定键的数据,语法结构是: ```python HttpRequest.session.get(key) ``` `delete()`方法用于删除会话中指定的键的数据,语法结构是: ```python HttpRequest.session.delete(key) ``` `clear()`方法用于清除会话中所有的键值对,语法结构是: ```python HttpRequest.session.clear() ``` `clear_expired()`方法用于清除会话中已过期的数据,语法结构是: ```python HttpRequest.session.clear_expired() ``` ## 3.3 实现手动访问路由需要登录时从哪来到哪儿去的流程图 ![1690534501768.png][3] `cookie`的构造函数是: ```python HttpResponse.set_cookie(key,value,max_age=None,expires=None,path='/') ``` 如在响应模板时添加`cookie`,代码如下: ```python response = render(request,'index.html',locals()) response.set_cookie(key,value) return response ``` [1]: https://www.63zi.com/usr/uploads/2024/11/1778624983.png [2]: https://www.63zi.com/usr/uploads/2024/11/3563742978.png [3]: https://www.63zi.com/usr/uploads/2024/11/20914678.png Loading... # # 一、多对多关系 ## 1.定义多对多关系 ```python 关系名称 = models.ManyToManyField(to) ``` ```python # 分别创建了两个作者的信息 # 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][1] # 三、`session`与`cookie` > 所有WEB框架都一定涉及`session`与`cookie`知识。因为`HTTP`协议是一种无状态的协议。 ## 3.1 Session的工作流程 ![1690530665817.png][2] ## 3.2 `HttpRequest.session` 存储`session`信息 ```python HttpRequest.session['key'] = value ... ... HttpRequest.session.save() ``` > 为什么SESSIONID作为COOKIE响应到客户端呢? > > 如果只有唯一一次请求和响应的话,SESSIONID可以由程序员在响应头中 > > 添加任意一个KEY/VALUE,把SESSIONID响应到客户端。如sessionid:3。 > > 但问题是绝对不可能只有一次请求,那么在发送第二次、第三次甚至第N次请求时 > > 都需要带有SESSIONID发送到服务器,以表明身份。但是自定义的响应头是无法自动 > > 附加在请求中的,需要程序员手动添加,那么也就意味"所有(如下定单、交易、退换货、修改 > > 配送地址、商品评论等)"的HTTP请求中都需要来添加自定义的请求头行。那么最好的解决方案是: > > 有一个"东西"可以在发送请求时,自动的附加在请头中 --- COOKIE,所以为了保证后续可以自动 > > 将SESSIONID附加在请求头,才在返回时返回的是COOKIE。 `exists()`方法用于检查会话数据中是否存在指定的键,语法结构是: ```python HttpRequest.session.exists(key) ``` `is_empty()`方法用于检查会话是否为空,语法结构是: ```python HttpRequest.session.is_empty() ``` `get()`方法用于获取会话中指定键的数据,语法结构是: ```python HttpRequest.session.get(key) ``` `delete()`方法用于删除会话中指定的键的数据,语法结构是: ```python HttpRequest.session.delete(key) ``` `clear()`方法用于清除会话中所有的键值对,语法结构是: ```python HttpRequest.session.clear() ``` `clear_expired()`方法用于清除会话中已过期的数据,语法结构是: ```python HttpRequest.session.clear_expired() ``` ## 3.3 实现手动访问路由需要登录时从哪来到哪儿去的流程图 ![1690534501768.png][3] `cookie`的构造函数是: ```python HttpResponse.set_cookie(key,value,max_age=None,expires=None,path='/') ``` 如在响应模板时添加`cookie`,代码如下: ```python response = render(request,'index.html',locals()) response.set_cookie(key,value) return response ``` [1]: https://www.63zi.com/usr/uploads/2024/11/1778624983.png [2]: https://www.63zi.com/usr/uploads/2024/11/3563742978.png [3]: https://www.63zi.com/usr/uploads/2024/11/20914678.png 最后修改:2024 年 11 月 09 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏