当前位置: 首页 > 科技观察

说说Django框架_0

时间:2023-03-18 18:10:28 科技观察

Django是python开发者比较熟悉的框架。这是一个web开发框架,Django大而全。最著名的应该是它的全自动化管理。在后台,我们只需要使用ORM,做一些简单的对象定义,就可以自动生成相应的数据库表结构和一个功能齐全的管理后台。Django框架的特点和功能比较齐全,开发效率高。但是,性能扩展相对有限。使用Django的项目在流量达到一定规模后需要进行重构以满足性能需求。比较适合中小型网站。Django的设计理念是代码和风格完全分离。Django从根本上消除了在模板中编码和处理数据的可能性。Django先进的APP设计理念,APP是可插拔的,这是一个难得的创意。如果不需要,可以直接删除,对整个系统影响不大。这一点作为一个常年Java开发者不得不说。我觉得这个设计和微服务思想中的Application是一样的。Java开发者最熟悉的就是spring全家桶,spring全家桶也是大家用的。必须熟悉springboot和springcloud的各种服务治理。当我们开发的后端服务随着业务的发展越来越臃肿时,就需要拆分成多个服务,多个服务实现了解耦,相互调用。如果我们需要下载一个服务的时候,就会变得相对简单。Django框架也有一定的缺点。Django包含了一些轻量级和不常用的功能模块,使用起来不如flask框架方便。性能相对较低。当然,这也不完全是框架的问题,还有一部分是python的问题。Python本身是一种解释型语言,其他python框架也存在同样的问题。WSGI协议&uwsgi&wsgiref&Gunicornpythonweb程序一般分为两部分,服务端程序和应用程序,服务端程序负责封装socket服务端,在客户端请求服务端时组织客户端请求的各种数据和信息。应用程序负责具体的逻辑处理。为了方便应用程序的开发,出现了很多Web框架,Django就是其中之一。服务端程序需要对不同的web框架提供不同的支持。因此,需要一个标准。只要服务器程序和应用程序,即web框架都支持这个标准,服务器程序就可以和web框架结合使用。WSGI是一种规范,它规定了用python编写的网络应用程序与网络服务器程序之间的接口格式。常见的符合WSGI协议的服务端程序有uwsgi和Gunicorn,django框架自带的服务端程序是wsgiref,等django项目上线时可以换成uwsgi或Gunicorn。Django的请求生命周期图片来自网站,入侵删除1.浏览器发起请求。2、WSGI创建socket服务器,接收请求HttpRequest,对请求进行第一次封装,然后将请求发送给对应的web框架Flask和Django。3.中间件处理请求,帮助我们验证请求或者在请求对象中添加相关数据。4.URL路由,根据当前请求的URL找到对应的视图函数和映射。5、view视图进行业务处理,ORM处理数据,从数据库中取数据返回给view视图,view视图将数据渲染到对应的template模板并返回数据。6.中间件处理响应。7.WSGI返回对应的HttpResponse。8.浏览器渲染。列出django中间件的5个方法?以及django中间件的应用场景?1.process_request:收到客户端信息后立即执行,在视图函数之前。2.process_response:返回客户端信息前最后一次执行,视图函数之后。3.process_view:获取视图函数的名称和参数,执行process_view()方法。4.process_exception:当视图函数失败时执行。5.process_template_response:视图函数执行完后立即执行,前提是视图返回的对象中有render()方法。Django中ORM获取数据查询集合常用的方法有filter和exclude方法。字符串模糊匹配可以使用icontains、in等方法。qs1=Article.objects.filter(title__icontains='django')qs2=Article.objects.filter(id__range=[1,9])qs3=Article.objects.filter(id__in=[1,3,6,7,9])qs4=Article.objects.filter(author=request.user).exclude(id=1)Django中QuerySet的特点有哪些DjangoQuerySet有两个主要特点:一个是惰性(lazy),另一个是self-带缓存。article_list=Article.objects.filter(title__contains="django")当我们定义article_list时,Django的数据接口QuerySet并没有对数据库进行任何查询。无论你添加多少过滤器,Django永远不会查询数据库。只有当你需要对article_list做进一步的操作时(比如打印出查询结果,判断是否存在,统计查询结果的长度),Django才会真正执行到数据库的查询(见下面的示例1)。这个过程称为查询集的执行(评估)。Django设计的初衷是尽量减少对数据库的无效操作,比如查询结果,而不浪费大量的计算资源。什么是基于函数的视图(FBV)和基于类的视图(CBV)及其各自的优势FBV(functionbaseviews)是利用视图中的函数来处理请求。CBV(ClassBaseViews)就是在视图中使用类来处理请求。Python是一种面向对象的编程语言。如果只用函数来开发,会错过很多面向对象的优点(继承、封装、多态)。所以后来Django加入了Class-Based-View,这样我们就可以使用类来写View了。这样做的好处主要有以下两个:1.提高代码的复用性,可以使用面向对象的技术,比如Mixin(多重继承)。2、可以使用不同的函数来处理不同的HTTP方法,而不用传递很多if判断,提高代码可读性。您能举出几种减少数据库查询次数的方法吗?利用Django查询集的惰性和自缓存功能。使用select_related和prefetch_related方法在数据库级别执行Join操作。使用缓存。Django的模型继承方式有哪些?它们有什么区别以及何时使用它们?Django的模型继承有以下三种方式:1.抽象模型继承(abstractmodel)。2.多表模型继承(multi-tableinheritance)。3.代理模式。区别如下:Django不会为抽象模型在数据库中生成自己的数据表。父类中的abstract=TrueMeta不会传递给子类。如果发现多个模型有很多共同字段,就需要使用抽象模型继承。多表模型继承与抽象模型继承最大的区别在于,Django还会为父类模型创建自己的数据表,并隐式地在父类和子类之间建立一对一的关系。如果我们只是想改变某个模型的行为,而不是添加额外的字段或创建额外的数据表,我们可以使用代理模型。设置代理模型需要在子类模型的Meta选项中设置proxy=True,Django不会为代理模型生成新的数据表。djangorest框架是如何实现用户访问频率控制的?从rest_framework.throttling导入SimpleRateThrottle。这里使用的throttle类继承了SimplePateThrottle类,该类使用django内置的缓存来存储访问记录。通过全局节流设置,所有视图类默认使用UserThrottle类进行节流。如果不想使用默认类,可以自定义赋给throttle_classes属性变量的值,如:“throttle_classes=[VisitThrottle,]”。Celery分布式任务队列场景:用户发起请求,等待响应返回。在这些视图中,可能需要执行一个耗时的程序,用户会等待很长时间,导致用户体验不好,比如发送邮件、手机验证码等。使用celery后,情况不同了。解决方法:将耗时程序放入celery中执行。将多个耗时任务加入队列,即使用redis实现broker中间人,然后使用多个worker监听队列中的任务执行。Task任务:它是一个Python函数。Queue队列:将需要执行的任务添加到队列中。Workerworker:在一个新的进程中,负责执行队列中的任务。代理broker:负责调度,在部署环境中使用redis。