内容回顾:

多对多

 class Pulisher(models.Model):
  name = models.CharField(max_length=32)
 ​
 class Book(models.Model):
  name = models.CharField(max_length=32)
     pub = models.ForeignKey('Pulisher',on_delete=models.DO_NOTHING)
 ​
 class Author(models.Model):
  name = models.CharField(max_length=32)
  books= models.ManyToManyField(to='Book')
 # 查询
 book_obj.pub   # 所关联的对象   book_obj.pub_id 所关联的对象的id
 ​
 author_obj.books  # 关系管理对象
 author_obj.books.all()   # 所关联的所有的书籍对象
 # 新增
 Book.objects.create(name='xxx',pub=对象)
 Book.objects.create(name='xxx',pub_id=对象的ID)
 ​
 obj= Book(name='xxx',pub_id=对象的ID)
 obj.save()
 ​
 obj = Author.objects.create(name='xxx')
 obj.books.set([书籍id,书籍id])
 # 删除
 Book.objects.filter(pk=pk).delete()  # QuerySet 删除
 Author.objects.get(pk=pk).delete()  # 对象 删除
 # 编辑
 Book.objects.filter(pk=pk).update(name='xxx')
 ​
 book_obj.name ='xxxx'
 book_obj.save()
 ​
 Author.objects.filter(pk=pk).update(name='xxx')
 author_obj.books.set([id,id])

cookie

定义:

保存在浏览器上的一组组键值对

为什么要有cookie?

http协议是无状态,每次请求都是相互独立,没有办法保存状态.用cookie保存状态.

cookie的特点:

  1. 由服务器让浏览器进行设置的

  2. 浏览器保存在本地的

  3. 下次访问时自动携带对应的cookie

Django中操作cookie的方法:

  1. 设置

    响应头: set-cookie : key=value

     response.set_cookie(key,value,max_age=5,path='/')
     response.set_signed_cookie(key,value,salt='xxxx',max_age=5,path='/')
  2. 获取

    请求头: cookie

     request.COOKIES # {}
     request.COOKIES.get(key)
     ​
     request.get_signed_cookie(key,salt='xxxx',default='')
  3. 删除

     response.delete_cookie(key)  

装饰器:

 from functools import wraps
 ​
 def wrapper(func):
     @wraps(func)  # 复制了原来函数的名字和注释
  def inner(request,*arg,**kwargs):
         # 之前
         ret = func(request,*arg,**kwargs)
         # 之后
         return ret
     return inner
 ​
 @wrapper  # f1 = wrapper(f1)
 def f1(request):
     pass
 ​
 f1.__name__  # inner _> f1  
 ​

response:

 from django.shortcuts import render, redirect, HttpResponse
 HttpResponse()
 render()
 redirect()

session

定义:保存在服务器上的一组组键值对,必须依赖cookie

为什么要有session?

  1. cookie保存在浏览器上,不太安全

  2. cookie的大小和个数有限制

Django中操作session

设置:

 request.session[key] = value 

获取

 request.session[key]
 request.session.get(key)

删除:

 request.session.pop('is_login')
 request.session.delete() # 删除所有的session数据
 request.session.flush()   # 删除所有的session数据和cookie

其他:

 request.session.clear_expired()
 request.session.set_expiry(value)  

配置:

 from django.conf import global_settings
 ​
 SESSION_COOKIE_NAME = 'session'   # cookie的名字
 SESSION_SAVE_EVERY_REQUEST = True # 每次请求都更新session
 SESSION_EXPIRE_AT_BROWSER_CLOSE = True # 浏览器关闭session就失效
 ​
 SESSION_ENGINE = 'django.contrib.sessions.backends.db'
 from django.contrib.sessions.backends import db
 # 数据库 缓存 缓存+数据库 文件 加密cookie

正则表达式

^ $ [0-9] [a-zA-Z] [asd]{4,6} +(一个或多个) *(0个或多个) ? (0个或1个)

\d \w .(除了换行符之外的任意字符)

分组:

 url(r'^del_publisher/(\d+)/', views.del_publisher),
 ​
 分组后从url中捕获参数,捕获的参数会按照 位置传参 传递给函数

命名分组

 url(r'^del_publisher/(?P<pk>\d+)/', views.del_publisher),
 ​
 分组后从url中捕获参数,捕获的参数会按照 关键字传参 传递给函数
 ​

url的命名和反向解析

命名:

 url(r'^login/', views.login,name='login'),

反向解析:

模板:

 {% url 'login' %}   -> "/app01/login/"  # 反向解析生成一个可以访问的地址

py文件:

 from django.urls import  reverse
 reverse('login')   ——》 "/app01/login/" # 反向解析生成一个可以访问的地址

分组

 url(r'^blog/([0-9]{4})/(\d{2})/$', views.blog,name='blog'),

模板:

 {% url 'blog' 2020 10  %}  ——》 ‘/app01/blog/2020/10/’

py文件:

 reverse('blog',args=['2019','10']  ——》 ‘/app01/blog/2020/10/’

命令分组

 url(r'^blog/(?P<year>[0-9]{4})/(?P<month>\d{2})/$', views.blog,name='blog'),

模板:

 {% url 'blog' 2020 10  %}  ——》 ‘/app01/blog/2020/10/’
 {% url 'blog' month=10 year=2019 %} ——》 ‘/app01/blog/2020/10/’

py文件:

 reverse('blog',args=['2019','10']  ——》 ‘/app01/blog/2020/10/’
 reverse('blog',kwargs={'year':'2019','month':'10'}) ——》 ‘/app01/blog/2020/10/’

namespace:

 url(r'^app01/', include('app01.urls',namespace='app01')),
 url(r'^app02/', include('app02.urls',namespace='app02')),
 {%  url 'namespace:name'  %}
 reverse('namespace:name')

session:的更多相关文章

  1. 12月15日 session:Ruby on Rails Security Guide//从第3节开始没有学习//关于find_by 和where的区别用法思考。

    http://guides.rubyonrails.org/security.html#user-management 2.session笔记见13日的随笔. http://www.cnblogs.c ...

  2. Key/Value之王Memcached初探:三、Memcached解决Session的分布式存储场景的应用

    一.高可用的Session服务器场景简介 1.1 应用服务器的无状态特性 应用层服务器(这里一般指Web服务器)处理网站应用的业务逻辑,应用的一个最显著的特点是:应用的无状态性. PS:提到无状态特性 ...

  3. ASP.NET:在一般处理程序中通过 Session 保存验证码却无法显示图片?

    using System.Drawing; using System.Web; using System.Web.SessionState; /// <summary> /// Captc ...

  4. 【转】 Key/Value之王Memcached初探:三、Memcached解决Session的分布式存储场景的应用

    一.高可用的Session服务器场景简介 1.1 应用服务器的无状态特性 应用层服务器(这里一般指Web服务器)处理网站应用的业务逻辑,应用的一个最显著的特点是:应用的无状态性. PS:提到无状态特性 ...

  5. JavaWeb学习之转发和重定向、会话技术:cookie、session、验证码实例、URLConnection使用(下载网页)(4)

    1.转发和重定向 HttpServletResponse response 转发: RequestDispatcher dispatcher = request.getRequestDispatche ...

  6. [原创]java WEB学习笔记47:Servlet 监听器简介, ServletContext(Application 对象), HttpSession (Session 对象), HttpServletRequest (request 对象) 监听器,利用listener理解 三个对象的生命周期

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  7. servlet三大作用域:request,session,application

    javaweb开发中Servlet三大域对象的应用(request.session.application(ServletContext)). 1. request request是表示一个请求,只要 ...

  8. JavaEE:Cookie和Session

    Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器.当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去.这样web资源处理的就是用户各自的数据了. ...

  9. jsp 的四个作用域 :page、request、session和application的区别 (转)

    1.简单说 page指当前页面.在一个jsp页面里有效 2.request 指从http请求到服务器处理结束,返回响应的整个过程.在这个过程中使用forward方式跳转多个jsp.在这些页面里你都可以 ...

随机推荐

  1. linux下编译时的默认库和头文件搜索路径

    链接库路径 默认的链接库路径,定义在搜索/etc/ld.so.conf下的一些路径,其包含了一些重要的系统位置:LIBRARY_PATH, 但如果定义了LD_LIBRARY_PATH, 动态库的搜索路 ...

  2. AcWing 799. 最长连续不重复子序列

    网址  https://www.acwing.com/solution/AcWing/content/2069/ 题目描述给定一个长度为n的整数序列,请找出最长的不包含重复数字的连续子序列,输出它的长 ...

  3. 【ECNU77】位与数对个数(数位DP)

    点此看题面 大致题意: 求\(\sum_{x=0}^{a-1}\sum_{y=0}^{b-1}[(x\&y)<k]\). 数位\(DP\) 显然数位\(DP\)吧. 我们设\(f_{n, ...

  4. python 各层级目录下的import方法

    ---恢复内容开始--- 以前经常使用python2.现在很多东西都切换到了python3,发现很多东西还是存在一些差异化的.跨目录import是常用的一种方法,并且有不同的表现形式,新手很容易搞混. ...

  5. 牛客网sql刷题解析-完结

    查找最晚入职员工的所有信息 解题步骤: 题目:查询最晚入职员工的所有信息        目标:查询员工的所有信息 筛选条件:最晚入职           答案: SELECT *--查询所有信息就用* ...

  6. Flink on Yarn的两种模式及HA

    转自:https://blog.csdn.net/a_drjiaoda/article/details/88203323 Flink on Yarn模式部署始末:Flink的Standalone和on ...

  7. 支付签名 MD5Util 排序工具类

    package com.skynet.wechat.wxPay.common; import java.security.MessageDigest; import java.util.Iterato ...

  8. IDEA maven设置配置

    IDEA Maven配置 1. 下载maven 下载地址 从官网上,下载一个压缩包,然后解压到任意的文件夹 Maven的安装必须需要jdk1.7+ 2. 环境变量设置 M2_HOME改为具体的路径,其 ...

  9. springboot 2.0 配置 spring.jackson.date-format 不生效

    展开 问题:application.properties中的如下配置不生效,返回时间戳 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss 原因分析: 拦截器 ...

  10. MongoDB 高级教程

    MongoDB 关系 MongoDB 的关系表示多个文档之间在逻辑上的相互联系. 文档间可以通过嵌入和引用来建立联系. MongoDB 中的关系可以是: 1:1 (1对1) 1: N (1对多) N: ...