开发者社区> 问答> 正文

列举django的内置组件?

列举django的内置组件?

展开
收起
珍宝珠 2019-11-22 12:43:57 2909 0
1 条回答
写回答
取消 提交回答
  • 表单form:
    
    - 对用户请求的数据进行校验
    - 生成HTML标签
    
    PS:
    - form对象是一个可迭代对象。
    - 问题:如何实现choice的数据实时更新?(动态数据,而不是写死)
    - 解决:给该字段定义成ModelChoiceField的时候利用好"queryset"参数
    
      class UserForm(Form):
        ut_id = ModelChoiceField(queryset=models.UserType.objects.all())      # 从另一张依赖表中提取数据
                
      依赖表:
      class UserType(models.Model):
        title = models.CharField(max_length=32)
    
    信号signal:
    
    django的信号其实就是django内部为开发者预留的一些自定制功能的钩子。
    只要在某个信号中注册了函数,那么django内部执行的过程中就会自动触发注册在信号中的函数。
    如:
    
    pre_save & post_save    在ORM模型的save()方法调用之前或之后发送信号
    pre_delete & post_delete    在ORM模型或查询集的delete()方法调用之前或之后发送信号
    request_started & request_finished    当接收和关闭HTTP请求时发送信号
    m2m_changed    当多对多字段被修改时发送信号
    
    场景:
    在数据库某些表中添加数据时,可以进行日志记录。
    
    中间件middleware:
    
    对所有的【请求】进行【批量】处理,说得直白一点中间件是帮助我们在视图函数执行之前和执行之后都可以做一些额外的操作,它本质上就是一个自定义类。其影响的是全局,需谨慎使用。
    
    应用:用户登录校验
    问题:为甚么不使用装饰器?
    如果不使用中间件,就需要给每个视图函数添加装饰器,太繁琐。
    
    权限:
    
    用户登录后,将权限放到session中,然后再每次请求进来在中间件里,根据当前的url去session中匹配,
    判断当前用户是否有权限访问当前url,有权限就继续访问,没有就返回,
    检查的东西就可以放到中间件中进行统一处理,在process_request方法里面做的,
    我们的中间件是放在session后面,因为中间件需要到session里面取数据。
    
    会话session:
    
    cookie与session区别
    (a)cookie是保存在浏览器端的键值对,而session是保存的服务器端的键值对,但是依赖cookie。(也可以不依赖cookie,可以放在url,或请求头但是cookie比较方便)
    (b)以登录为例,cookie为通过登录成功后,设置明文的键值对,并将键值对发送客户端存,明文信息可能存在泄漏,不安全;
       session则是生成随机字符串,发给用户,并写到浏览器的cookie中,同时服务器自己也会保存一份。
    (c)在登录验证时,cookie:根据浏览器发送请求时附带的cookie的键值对进行判断,如果存在,则验证通过;
       session:在请求用户的cookie中获取随机字符串,根据随机字符串在session中获取其对应的值进行验证
    

    跨域请求cors(场景:前后端分离时,本地测试开发时使用):

    如果网站之间存在跨域,域名不同,端口不同会导致出现跨域,但凡出现跨域,浏览器就会出现同源策略的限制。
    解决:在我们的服务端给我们响应数据,加上响应头 --> 在中间件加的。

    缓存cache:
       
    常用的数据放在缓存里面,就不用走视图函数,请求进来通过所有的process_request,会到缓存里面查数据,有就直接拿,没有就走视图函数。
    关键点:1:执行完所有的process_request才去缓存取数据
        2:执行完所有的process_response才将数据放到缓存
    
    关于缓存问题
    1:为什么放在最后一个process_request才去缓存?
    因为需要验证完用户的请求,才能返回数据
    
    2:什么时候将数据放到缓存中?
    第一次走中间件,缓存没有数据,会走视图函数,取数据库里面取数据,
    当走完process_response,才将数据放到缓存里,因为,走process_response的时候可能给我们的响应加处理。
      3:为什么使用缓存?
      将常用且不太频繁修改的数据放入缓存。
      以后用户再来访问,先去缓存查看是否存在,如果有就返回
      否则,去数据库中获取并返回给用户(再加入到缓存,以便下次访问)
    
    CSRF-TOKEN:
      目标:防止用户直接向服务端发起POST请求。
      对所有的post请求做验证,将jango生成的一串字符串发送给后台,一种是从请求体发过来,一种是放在隐藏的标签里面。
      方案:先发送GET请求时,将token保存到:cookie、Form表单中(隐藏的input标签),
      以后再发送请求时只要携带过来即可。
    
    2019-11-22 12:44:09
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
编程语言如何演化—— 以 JS 的 private 为例 立即下载
编程语言如何演化-以JS的private为例 立即下载
低代码开发师(初级)实战教程 立即下载