一、装饰器要加入funtools.wrap装饰

保留函数的元数据(函数名/注释)

1.装饰器

def wrapper(f):
  def inner(*args,**kwargs):
    return f(*args,**kwargs)
  return inner

  

import functools

def wrapper(f):
    @functools.wraps(f)
    def inner(*args,**kwargs):
        return f(*args,**kwargs)
    return inner

1. 执行wrapper
2. 重新赋值
index = wrapper(index)
"""
@wrapper
def index(a1,a2):
"""
这是一个index函数
"""
return a1+ a2
print(index.__name__)
print(index.__doc__)

  

二、orm字段中的verbose_name

目前当注释用. 以后:在model form和form中使用.

三、路由系统中记得加入终止符 $

四、用户名和密码检测

xxxx.first() # 返回对象或None

xxxx.exists() # 返回布尔值

五、模板查找顺序

根目录templates

根据app注册顺序去每个app的tempaltes中找

六、cookie

原理

基于cookie实现
    保存在用户浏览器端的键值对,向服务端发请求时会自动携带。

操作

def login(request):
  # return HttpResponse('...')
  # return render('...')
  # return redirect('...')
# 设置cookie   data = redirect('...')   data.set_cookie()
# 读取cookie   request.COOKIES.get('xx')   return data
必须背会一下三个参数:   key, value='', max_age=None

应用场景: 用户认证 投票 每页默认显示数据

七、session

原理:随机字符串的过程....

基于session实现

依赖cookie
是一种存储数据的方式,依赖于cookie,实现本质:
    用户向服务端发送请求,服务端做两件事:生成随机字符串;为此用户开辟一个独立的空间来存放当前用户独有的值.
    在空间中如何想要设置值:
        request.session['x1'] = 123
        request.session['x2'] = 456
    在空间中取值:
        request.session['x2']
        request.session.get('x2')
    视图函数中的业务操作处理完毕,给用户响应,在响应时会将随机字符串存储到用户浏览器的cookie中.

  

cookie和session的区别?

答: cookie是存储在客户端浏览器上的键值对,发送请求时浏览器会自动携带.
session是一种存储数据方式,基于cookie实现,将数据存储在服务端(django默认存储到数据库).其本质是:
    用户向服务端发送请求,服务端做两件事:生成随机字符串;为此用户开辟一个独立的空间来存放当前用户独有的值.

在空间中如何想要设置值:
    request.session['x1'] = 123
    request.session['x2'] = 456
在空间中取值:
    request.session['x2']
    request.session.get('x2')
视图函数中的业务操作处理完毕,给用户响应,在响应时会将随机字符串存储到用户浏览器的cookie中.

  

拓展:

djanago和session相关的配置: SESSION_COOKIE_NAME = "sessionid" #Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串 SESSION_COOKIE_DOMAIN = None # api.baidu.com /www.baidu.com/ xxx.baidu.com SESSION_COOKIE_PATH = "/" # Session的cookie保存的路径 SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输 SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周) SESSION_EXPIRE_AT_BROWSER_CLOSE = False #是否关闭浏览器使得Session过期 SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存


django中的session如何设置过期时间:

  SESSION_COOKIE_AGE = 1209600 # Session的 cookie失效日期(2周)


django的session默认存储在数据库,可以放在其他地方吗:

  小系统:默认放在数据库即可.
  大系统:缓存(redis)
  文件:
    SESSION_ENGINE = 'django.contrib.sessions.backends.cache' SESSION_CACHE_ALIAS = 'default'
    CACHES = {
      'default': {
        'BACKEND':
          'django.core.cache.backends.locmem.LocMem Cache',
          'LOCATION': 'unique-snowflake',
      }
    }
  缓存(redis)
    SESSION_ENGINE = 'django.contrib.sessions.backends.cache' SESSION_CACHE_ALIAS = 'default'
    CACHES = {
      "default": {
        "BACKEND":
          "django_redis.cache.RedisCache",
          "LOCATION": "redis://127.0.0.1:6379",
        "OPTIONS": {
          "CLIENT_CLASS":
            "django_redis.client.DefaultClient",
            "CONNECTION_POOL_KWARGS": {"max_connections": 100} # "PASSWORD": "密码",
        }
      }
    }

  

操作session

读取
request.session['x']
request.session.get('xx')

设置(添加&修改) request.session['x'] = 123

删除 del request.session['x']

  

配置
  数据存储位置
    数据库(django默认)
    文件
    缓存(内存/redis)
cookie相关操作
应用场景   用户认证   短信验证过期   权限管理
强调 session中的数据是根据用户相互隔离. # 示例 def login(request):   # 获取用户提交的用户名和密码   user = request.POST.get('user')   request.session['user_name'] = user
def index(request): print(request.session['user_name'])

  

 八、Http协议

什么是HTTP协议

超文本传输协议
关于连接:一次请求一次响应之后断开连接(无状态、短连接)
关于格式:
请求:请求头+请求体 
  (http:www.baidu.com/index/?a=123)   send("GET /index/?a=123   http1.1\r\nhost:www.baidu.com\r\nuseragent:Chrome\r\n\r\n")   send("POST /index/   http1.1\r\nhost:www.baidu.com\r\nuseragent:Chrome\r\n\r\nusername=alex&pwd=123") 响应:响应头+响应体   Content-Encoding: gzip\r\nCache-Control:   private\r\n\r\n网页看到的HTML内容
扩展:常见的请求头都有哪些?
- user-agent:用什么浏览器访问的网站。 - content-type: 请求体的数据格式是什么?(服务端按照格式要求进行解析)
扩展:常见的请求方式?
- GET - POST

 九、django请求生命周期

 django请求生命周期 / 浏览器上输入http://www.xxx.com 请求到 达django后发生了什么?

02-10 20:58