Django认识、面试题(2)

  • cookie和session的区别:
  1. cookie是保存在浏览器端的键值对,可以用来做用户认证
  2. session将用户的会话信息保存在服务端,key值是随机产生的字符串,value值是session的内容,依赖于cookie将每个用户的随机字符串保存到用户浏览器上
  3. 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的作用
  1. Form作用:在前端生成HTML代码;对数据做有效性检验;返回校验信息并展示
  2. ModelForm:根据模型类生成Form组件,并且可以操作数据库

  • 如何实现用户的登陆认证
  1. cookie、session
  2. token 登陆成功后生成加密字符串
  3. JWT:json wed token缩写 他将用户信息加密到token中,服务器不保存任何用户信息,服务器通过使用保存的密钥来验证token的正确性

  • django的contenttype组件的作用
  1. 这个组件保存了项目中所有app和model的对应关系,每当我们创建了新的model并执行数据库迁移后,ContentType表中就会自动新增一条记录
  2. 当一张表和多个表FK关联,并且多个FK中只能选择其中一个或其中n个时,可以利用contenttypes

  • django内置的缓存机制
  1. 全栈缓存
MIDDLEWARE_CLASSES = (
    ‘django.middleware.cache.UpdateCacheMiddleware’, #第一
    'django.middleware.common.CommonMiddleware',
    ‘django.middleware.cache.FetchFromCacheMiddleware’, #最后
)
  1. 视图缓存
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())
  1. 模板缓存
{% load cache %}
 <h3 style="color: green">不缓存:-----{{ t }}</h3>
  
{% cache 2 'name' %} # 存的key
 <h3>缓存:-----:{{ t }}</h3>
{% endcache %}

  • django的缓存使用redis
  1. 安装 pip install django-redis
  2. 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": "密码",
                }
            }
        },
  1. 根据名字去连接池中获取连接
 from django_redis import get_redis_connection
        conn = get_redis_connection("default")

  • django的orm中如何设置读写分离
  1. 手动读写分离:通过.using(db_name)来指定要使用的数据库
  2. 自动读写分离
定义类:如Router
配置Router
settings.py中指定DATABASE_ROUTERS
DATABASE_ROUTERS = ['myrouter.Router',] 

提高读的性能:多配置几个数据库,并在读取时,随机选取。写的时候写到主库
实现app之间的数据库分离:分库分表


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值