网站建设公司前台,怎么做网络广告推广,网站开发 安全,苏州网站搜索排名二十六、请介绍下Django框架的生命周期
Django是一个高级的Python Web框架#xff0c;它遵循MVC设计模式#xff08;在Django中通常称为MTV#xff0c;即模型#xff08;Model#xff09;、模板(Template)和视图(Views)#xff09;#xff0c;并且鼓励快速开发和干净、…二十六、请介绍下Django框架的生命周期
Django是一个高级的Python Web框架它遵循MVC设计模式在Django中通常称为MTV即模型Model、模板(Template)和视图(Views)并且鼓励快速开发和干净、实用的设计。以下是一个简单的Django请求/响应生命周期
用户发起请求当用户通过Web浏览器访问一个网站时会向服务器发送一个HTTP请求。Django Web服务器接收请求请求首先被Django的Web服务器如GunicornUwsgi或Django自带的开发服务器接收然后传递给Django框架进行处理。URL解析Django框架接收到请求后会根据URLconf(URL配置文件通常是urls.py文件)找到与请求URL匹配的函数称为视图。中间件处理在Django中还可以配置一些中间件Middleware这些中间件可以在请求被视图处理之前或之后进行一些处理例如处理会话、验证用户等。视图处理请求找到匹配的视图函数后Django会创建一个HttpRequest对象并将这个对象作为参数传递给视图函数。视图函数会处理这个请求并返回一个HttpResponse对象。模板渲染如果视图决定渲染一个模板它会加载模板然后将一个上下文包含要在模板上显示的数据传递给模板。模板会根据这个上下文生成HTML内容。响应返回给用户最后Django将HttpResponse对象返回给Web服务器Web服务器将响应转换为一个HTTP响应然后发送给用户的Web浏览器。
二十七、请介绍下Django是怎么操作数据库的
Django通过它的ORMObject-Relational Mapping对象-关系映射系统来操作数据库。ORM允许开发者用Python代码来操作数据库而不需要写SQL语句。这样我们就可以编写数据库独立的代码而不用担心底层使用的是哪种数据库系统MySQLPostgreSQLSQLite等。 以下是Django操作数据库的基本步骤
定义模型在Django中每个数据库表由一个Python类来表示这个类继承自django.db.models.Model。每个类的属性就表示数据库表的字段。
from django.db import modelsclass Book(models.Model):title models.CharField(max_length200)publication_date models.DateField()
迁移定义好模型之后需要通过迁移来在数据库中创建对应的表。Django提供了makemigrations命令来创建迁移然后用migrate命令来应用迁移。
python manage.py makemigrations
python manage.py migrate
使用模型现在我们可以使用定义的模型来进行数据库操作了。例如创建一个新的记录
from datetime import datebook Book(titleThe Pragmatic Programmer, publication_datedate(1999, 10, 30))
book.save()也可以查询现有的记录
books Book.objects.filter(title__containsDjango)
修改和删除记录我们也可以修改或删除数据库中的记录。例如
# 修改记录
book Book.objects.get(id1)
book.title New Title
book.save()# 删除记录
book.delete()
二十八、如何使用Django中间件
在Django中中间件是一个轻量级、底层的“插件”系统用来全局改变Django的输入或输出。每次一个请求被处理Django首先会根据你的MIDDLEWARE设置来应用每个中间件类的方法。 以下是一个使用中间件的基本步骤
创建中间件中间件是一个Python类需要实现特定的方法。例如下面是一个简单的中间件它会在每个请求被处理前打印一条消息
class SimpleMiddleware:def __init__(self, get_response):self.get_response get_responsedef __call__(self, request):print(在处理视图前)response self.get_response(request)print(在处理视图后)return response
上面的代码中__init__方法接收一个get_response参数并将其存储为实例变量。get_response是一个回调函数用来获取视图的响应。 __call__方法是真正处理请求和响应的地方。在调用get_response之前的代码会在请求被处理前执行调用get_response之后的代码会在请求被处理后视图函数被调用后执行。
激活中间件要启用中间件需要将其添加到MIDDLEWARE设置中。MIDDLEWARE是一个Python列表包含了所有激活的中间件的字符串路径。例如
MIDDLEWARE [django.middleware.security.SecurityMiddleware,django.contrib.sessions.middleware.SessionMiddleware,django.middleware.common.CommonMiddleware,myapp.middleware.SimpleMiddleware, # 你的自定义中间件django.middleware.csrf.CsrfViewMiddleware,django.contrib.auth.middleware.AuthenticationMiddleware,django.contrib.messages.middleware.MessageMiddleware,django.middleware.clickjacking.XFrameOptionsMiddleware,
]
注意中间件的顺序很重要。在请求阶段Django会从上到下应用每个中间件但在响应阶段则会从下到上应用中间件。这意味着在请求列表中越是在上面的中间件它的响应处理代码会越后执行。
二十九、Django开发中如何优化数据库
优化查询使用ORM时要注意避免生成不必要的查询。例如如果你需要访问一个外键关联的对象的某个属性最好使用select_related或prefetch_related方法这样可以在一次查询中获取所有必要的信息避免“N1查询”问题。
# 优化前
books Book.objects.all()
for book in books:print(book.author.name)# 优化后
books Book.objects.select_related(author).all()
for book in books:print(book.author.name)
只获取必要的字段如果你只需要模型的某几个字段可以使用values或values_list方法只获取这些字段的数据这样可以减少数据库的I/O负担。
titles Book.objects.values_list(title, flatTrue)使用索引在经常需要查询的字段上创建索引可以大大提高查询效率。在Django的模型字段中可以设置db_indexTrue来创建索引。
class Book(models.Model):title models.CharField(max_length200, db_indexTrue)publication_date models.DateField()分页如果你需要显示大量的数据最好使用分页来减少每次查询的数据量。Django提供了Paginator类来帮助实现分页。缓存对于那些不经常变化但是读取频繁的数据可以使用缓存来提高性能。Django提供了非常完善的缓存系统可以缓存视图的结果也可以手动缓存数据。
三十、什么是Django中间件
Django中间件是一个轻量级、底层的“插件”系统用来全局改变Django的输入或输出。在请求被处理的过程中中间件是第一个处理HTTP请求或视图返回的HTTP响应的组件。它可以看作是处理请求和响应的钩子。 中间件的主要功能包括
处理全局请求例如可以在一个中间件中检查是否有session的存在如果没有就创建一个。处理全局响应例如可以在一个中间件中统一添加某个HTTP头部。在视图处理之前或之后改变请求或响应。将某些任务钩子到请求/响应的处理过程中例如数据缓存、数据压缩等。
一个中间件基本上就是一个Python类它定义了以下一个或多个方法
init(self, get_response)在中间件实例化时调用一次其中get_response是一个用于获取视图响应的回调函数。call(self, request)处理每个请求时都会调用你可以在这里改变请求或响应。
中间件的执行顺序在Django设置中的MIDDLEWARE列表中定义这个列表的顺序非常重要。在处理请求时Django会按照MIDDLEWARE列表从上到下的顺序应用每个中间件然后在处理响应时Django会按照从下到上的顺序应用每个中间件。