python 高级码农成才之路

Django的视图类

2021-03-14  本文已影响0人  幼姿沫

1.FBV和CBV的区别和定义

FBV Function Base View    基于函数的视图函数来处理请求

CBV Class    Base View    基于类的视图函数来处理请求

如何给CBV加装饰器

Class Base Views 导入Method_Decorator装饰器

给方法加      method

给dispatch加  dispatch

给类加        class

2.django中常用的视图响应方式

response HttpResponse JsonResponse字符串  redirect 跳转不同页面

视图函数中,验证装饰器有哪些?

验证是否已经登录            @annoymous_required

验证用户是否已经通过身份认证@login_required

允许超级用户才能访问视图 @superuser_only

检查是否是ajax请求      @ajax_required

检查用户是否属于有权限的用户组访问 @group_required

用于改进某个视图的响应时间,想知道运行需要多长时间 @timeit

3.FBV视图函数和CBV视图类的区别

视图函数 view                    视图类  class

优点  容易实现跟理解,流程简单        容易拓展跟代码重复使用,

可以用混合类继承,单独使用类方法处理http请求,

有许多内置的通用视图函数

直接使用装饰器

缺点 代码难以重用,

处理http请求的时候要有分支表达式  不容易理解,代码流程负载,

父类混合类中隐藏很多代码,

使用装饰器的时候需要额外导入或者覆盖方法

4.Django如何实现高并发

uWsgi服务器实现web开发的请求响应流程 + Nginx实现负载均衡 + Djangoweb框架

Nginx + gunicorn + gevent + Django

5.如何提高Django应用程序的性能

1.前端优化

客户端http请求  精灵图 / 雪碧图  将网页中加载的图片统一加载,减少加载速度

使用浏览器缓存页面  将静态页面资源进行缓存加载,缓存时间自定义

对html + css + javascript 进行压缩,减少网络通信量

2.后端优化

动态数据缓存设置过期时间

使用celery消息队列实现异步操作,发邮件发短信

nginx项目部署配置合适的配置参数提升效率增加并发量

安全因素的话就是使用固态硬盘读写

服务器横向扩展

Django中当用户登录到A服务器进入登陆状态,下次被Nginx代理到B服务器会出现什么影响

如果说在A服务器服务端的session信息没有共享到B服务器,这就是说之前的登陆状态就没有了下次就不会登陆成功

6.Celery 异步处理的理解

celery是python开发简洁灵活可靠的分布式任务队列

本质是生产者消费者模式,生产者生产任务发送到消息队列,消费者负责处理任务

celery侧重于实时操作,对调度的支持也很好,每天可以处理数以百万计的任务

简单 celery工作流程配置简单

快速 一个单进程的celery可以处理百万个任务

灵活 celery的各个组件均可扩展和自定义

高可用 当任务中断或者执行失败的时候,它可以重新建立连接尝试执行任务

celery的应用场景有哪些

异步任务 用户需要在某一网站等待的时间长,把这种操作交给celery,直接返回给用户。

等待celery执行完毕之后给了用户,可以提高网站的并发以及用户体验感。

发送邮件验证

定时任务  定时清除冗余数据批量在几百台机器执行命令和任务,

celery可以轻松搞定。

Celery的工作原理是什么 ?

消息中间件Broker 任务执行单元Worker  结果存储Backend

celery  (异步任务  /  定时任务)

async          celery

----------    ----------

发送

----------    ----------

消息中间件

broker

----------    ----------

监控            监控

----------    ----------

任务执行单元    任务执行单元

celery worker  celery worker

----------    ----------

存储            存储

----------    ----------

结果存储

BackEnd

celery分布式任务队列 其实就是生产者消费者模式。

包含异步任务和定时任务。

异步任务是通常在业务逻辑中被触发并且发往消息队列

定时任务由celery beat在一定的周期内将任务发往消息队列。

任务执行单元worker实时监视消息队列获取队列中的任务执行,

worker执行任务后将结果保存在backend中

消息中间件  redis / mongodb / Amazon

任务执行单元  负责从消息队列中取出任务执行,

可以启动一个或多个,也可以启动在不同的机器节点

任务执行消息队列任务的执行就是分布式的核心

结果存储    将任务消息队列中的结果存储在数据库中 mongodb/redis/django ORM

上一篇 下一篇

猜你喜欢

热点阅读