- cookie和session的区别:
- cookie是保存在浏览器端的键值对,可以用来做用户认证
- session将用户的会话信息保存在服务端,key值是随机产生的字符串,value值是session的内容,依赖于cookie将每个用户的随机字符串保存到用户浏览器上
- django中session默认保存在数据库中,django_session表
- Django orm中所有的方法(QuerySet对象的所有方法)
all(): 查询所有结果
filter(**kwargs): 它包含了与所给筛选条件相匹配的对象。获取不到返回None
get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个。获取不到会报错误
如果符合筛选条件的对象超过一个或者没有都会抛出错误。
exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象
order_by(*field): 对查询结果排序
reverse(): 对查询结果反向排序
count(): 返回数据库中匹配查询(QuerySet)的对象数量。
first(): 返回第一条记录
last(): 返回最后一条记录
exists(): 如果QuerySet包含数据,就返回True,否则返回False
values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系 model的实例化对象,而是一个可迭代的字典序列
values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
distinct(): 从返回结果中剔除重复纪录
- value和values_list的区别
value取字典的queryset,value_list取元祖的queryset
- Form和ModeForm的作用
- Form作用:在前端生成HTML代码;对数据做有效性检验;返回校验信息并展示
- ModelForm:根据模型类生成Form组件,并且可以操作数据库
- 如何实现用户的登陆认证
- cookie、session
- token 登陆成功后生成加密字符串
- JWT:json wed token缩写 他将用户信息加密到token中,服务器不保存任何用户信息,服务器通过使用保存的密钥来验证token的正确性
- django的contenttype组件的作用
- 这个组件保存了项目中所有app和model的对应关系,每当我们创建了新的model并执行数据库迁移后,ContentType表中就会自动新增一条记录
- 当一张表和多个表FK关联,并且多个FK中只能选择其中一个或其中n个时,可以利用contenttypes
- django内置的缓存机制
- 全栈缓存
MIDDLEWARE_CLASSES = (
‘django.middleware.cache.UpdateCacheMiddleware’, #第一
'django.middleware.common.CommonMiddleware',
‘django.middleware.cache.FetchFromCacheMiddleware’, #最后
)
- 视图缓存
from django.views.decorators.cache import cache_page
import time
@cache_page(15) #超时时间为15秒
def index(request):
t=time.time() #获取当前时间
return render(request,"index.html",locals())
- 模板缓存
{% load cache %}
<h3 style="color: green">不缓存:-----{{ t }}</h3>
{% cache 2 'name' %} # 存的key
<h3>缓存:-----:{{ t }}</h3>
{% endcache %}
- django的缓存使用redis
- 安装 pip install django-redis
- sertting中设置CACHES,可以设置多个缓存,根据名字使用
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": "密码",
}
}
},
- 根据名字去连接池中获取连接
from django_redis import get_redis_connection
conn = get_redis_connection("default")
- django的orm中如何设置读写分离
- 手动读写分离:通过.using(db_name)来指定要使用的数据库
- 自动读写分离
定义类:如Router
配置Router
settings.py中指定DATABASE_ROUTERS
DATABASE_ROUTERS = ['myrouter.Router',]
提高读的性能:多配置几个数据库,并在读取时,随机选取。写的时候写到主库
实现app之间的数据库分离:分库分表