Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python面试题100例【26~30题】

Python面试题100例【26~30题】

原创
作者头像
子午Python
发布于 2023-08-28 01:48:35
发布于 2023-08-28 01:48:35
33800
代码可运行
举报
文章被收录于专栏:Python项目Python项目
运行总次数:0
代码可运行

二十六、请介绍下Django框架的生命周期

Django是一个高级的Python Web框架,它遵循MVC设计模式(在Django中通常称为MTV,即模型(Model)、模板(Template)和视图(Views)),并且鼓励快速开发和干净、实用的设计。以下是一个简单的Django请求/响应生命周期:

  1. 用户发起请求:当用户通过Web浏览器访问一个网站时,会向服务器发送一个HTTP请求。
  2. Django Web服务器接收请求:请求首先被Django的Web服务器(如Gunicorn,Uwsgi或Django自带的开发服务器)接收,然后传递给Django框架进行处理。
  3. URL解析:Django框架接收到请求后,会根据URLconf(URL配置文件,通常是urls.py文件)找到与请求URL匹配的函数(称为视图)。
  4. 中间件处理:在Django中,还可以配置一些中间件(Middleware),这些中间件可以在请求被视图处理之前或之后进行一些处理,例如处理会话、验证用户等。
  5. 视图处理请求:找到匹配的视图函数后,Django会创建一个HttpRequest对象,并将这个对象作为参数传递给视图函数。视图函数会处理这个请求,并返回一个HttpResponse对象。
  6. 模板渲染:如果视图决定渲染一个模板,它会加载模板,然后将一个上下文(包含要在模板上显示的数据)传递给模板。模板会根据这个上下文生成HTML内容。
  7. 响应返回给用户:最后,Django将HttpResponse对象返回给Web服务器,Web服务器将响应转换为一个HTTP响应,然后发送给用户的Web浏览器。

二十七、请介绍下Django是怎么操作数据库的

Django通过它的ORM(Object-Relational Mapping,对象-关系映射)系统来操作数据库。ORM允许开发者用Python代码来操作数据库,而不需要写SQL语句。这样,我们就可以编写数据库独立的代码,而不用担心底层使用的是哪种数据库系统(MySQL,PostgreSQL,SQLite等)。

以下是Django操作数据库的基本步骤:

  1. 定义模型:在Django中,每个数据库表由一个Python类来表示,这个类继承自django.db.models.Model。每个类的属性就表示数据库表的字段。
代码语言:python
代码运行次数:0
运行
AI代码解释
复制
from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=200)
    publication_date = models.DateField()
  1. 迁移:定义好模型之后,需要通过迁移来在数据库中创建对应的表。Django提供了makemigrations命令来创建迁移,然后用migrate命令来应用迁移。
代码语言:shell
AI代码解释
复制
python manage.py makemigrations
python manage.py migrate
  1. 使用模型:现在,我们可以使用定义的模型来进行数据库操作了。例如,创建一个新的记录:
代码语言:python
代码运行次数:0
运行
AI代码解释
复制
from datetime import date

book = Book(title='The Pragmatic Programmer', publication_date=date(1999, 10, 30))
book.save()

也可以查询现有的记录:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
books = Book.objects.filter(title__contains='Django')
  1. 修改和删除记录:我们也可以修改或删除数据库中的记录。例如:
代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 修改记录
book = Book.objects.get(id=1)
book.title = 'New Title'
book.save()

# 删除记录
book.delete()

二十八、如何使用Django中间件

在Django中,中间件是一个轻量级、底层的“插件”系统,用来全局改变Django的输入或输出。每次一个请求被处理,Django首先会根据你的MIDDLEWARE设置来应用每个中间件类的方法。

以下是一个使用中间件的基本步骤:

  1. 创建中间件:中间件是一个Python类,需要实现特定的方法。例如,下面是一个简单的中间件,它会在每个请求被处理前打印一条消息:
代码语言:python
代码运行次数:0
运行
AI代码解释
复制
class SimpleMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        print('在处理视图前')
        response = self.get_response(request)
        print('在处理视图后')
        return response

上面的代码中,init方法接收一个get_response参数,并将其存储为实例变量。get_response是一个回调函数,用来获取视图的响应。

call方法是真正处理请求和响应的地方。在调用get_response之前的代码会在请求被处理前执行,调用get_response之后的代码会在请求被处理后(视图函数被调用后)执行。

  1. 激活中间件:要启用中间件,需要将其添加到MIDDLEWARE设置中。MIDDLEWARE是一个Python列表,包含了所有激活的中间件的字符串路径。例如:
代码语言:python
代码运行次数:0
运行
AI代码解释
复制
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开发中如何优化数据库

  1. 优化查询:使用ORM时,要注意避免生成不必要的查询。例如,如果你需要访问一个外键关联的对象的某个属性,最好使用select_related或prefetch_related方法,这样可以在一次查询中获取所有必要的信息,避免“N+1查询”问题。
代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 优化前
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)
  1. 只获取必要的字段:如果你只需要模型的某几个字段,可以使用values或values_list方法,只获取这些字段的数据,这样可以减少数据库的I/O负担。
代码语言:python
代码运行次数:0
运行
AI代码解释
复制
titles = Book.objects.values_list('title', flat=True)
  1. 使用索引:在经常需要查询的字段上创建索引,可以大大提高查询效率。在Django的模型字段中,可以设置db_index=True来创建索引。
代码语言:python
代码运行次数:0
运行
AI代码解释
复制
class Book(models.Model):
    title = models.CharField(max_length=200, db_index=True)
    publication_date = models.DateField()
  1. 分页:如果你需要显示大量的数据,最好使用分页来减少每次查询的数据量。Django提供了Paginator类来帮助实现分页。
  2. 缓存:对于那些不经常变化但是读取频繁的数据,可以使用缓存来提高性能。Django提供了非常完善的缓存系统,可以缓存视图的结果,也可以手动缓存数据。

三十、什么是Django中间件

Django中间件是一个轻量级、底层的“插件”系统,用来全局改变Django的输入或输出。在请求被处理的过程中,中间件是第一个处理HTTP请求或视图返回的HTTP响应的组件。它可以看作是处理请求和响应的钩子。

中间件的主要功能包括:

  • 处理全局请求:例如,可以在一个中间件中检查是否有session的存在,如果没有就创建一个。
  • 处理全局响应:例如,可以在一个中间件中统一添加某个HTTP头部。
  • 在视图处理之前或之后改变请求或响应。
  • 将某些任务钩子到请求/响应的处理过程中,例如数据缓存、数据压缩等。

一个中间件基本上就是一个Python类,它定义了以下一个或多个方法:

  • init(self, get_response):在中间件实例化时调用一次,其中get_response是一个用于获取视图响应的回调函数。
  • call(self, request):处理每个请求时都会调用,你可以在这里改变请求或响应。

中间件的执行顺序在Django设置中的MIDDLEWARE列表中定义,这个列表的顺序非常重要。在处理请求时,Django会按照MIDDLEWARE列表从上到下的顺序应用每个中间件,然后在处理响应时,Django会按照从下到上的顺序应用每个中间件。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
暂无评论
推荐阅读
编辑精选文章
换一批
web开发框架之Django基础
# 基本查询 print(BookInfo.objects.all()) print(BookInfo.objects.get(btitle='雪山飞狐').id) print(BookInfo.objects.get(id=3)) print(BookInfo.objects.get(pk=3)) # 将ID=3的排除,显示其他的 print(BookInfo.objects.exclude(id=3)) print(111111111) try:   print(BookInfo.objects.get(id=12)) # except Exception as e:
py3study
2020/01/17
6.3K0
django基本操作命令大全
# 在下载好的django路径下执行django的安装 # https://pypi.python.org/pypi/Django/1.6.4 python3 setup.py install # # 新建django项目 django-admin.py startproject mysite # # 运行django项目 python3 manage.py runserver [port] # # 创建一个app python3 manage.py startapp appname
py3study
2020/01/06
8980
Django相关知识点回顾
Develop success from failures. Discouragement and failure are two of the surest stepping stones to success.
小闫同学啊
2019/07/18
10.3K0
Django相关知识点回顾
Django&DRF重点内容大盘点
本文只是将学习过程中需要深刻记忆,在工作中常用的一些命令或者知识点进行一个罗列并阐释,不会全面的将所有内容进行讲解。大家可以在了解了Django框架和DRF框架之后再来看这篇文章。否则会有点不知所云。
小闫同学啊
2019/07/18
6.1K0
【愚公系列】2022年01月 Python教学课程 51-Django框架之中间件
Django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性。
愚公搬代码
2022/12/01
2410
【愚公系列】2022年01月 Python教学课程 51-Django框架之中间件
django中间件-12
在django中,中间件其实就是一个类,他是一个可以介入django的 request 和 response 的钩子框架,在请求响应不同的阶段,执行类中不同的代码,用于在全局修改django的输入输出。
py3study
2020/01/20
4180
Django高级用法:构建健壮、可扩展的Web应用
Django是一个功能强大的Web框架,提供了丰富的功能和高级用法,以支持构建复杂的Web应用。在本文中,我们将深入探讨一些Django的高级用法,包括中间件、自定义管理命令、信号、性能优化等方面,以帮助你更好地利用Django进行Web开发。
dbdocker
2024/02/05
3320
Django 2.1.7 中间件
Django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性,其它的MVC框架也有这个功能,名称为IoC。
Devops海洋的渔夫
2019/07/01
7520
Django 2.1.7 中间件
django框架菜鸟教程_django框架菜鸟教程
reverse反解析 使用reverse函数,可以根据路由名称,返回具体的路径,如: from django.urls import reverse # 注意导包路径
全栈程序员站长
2022/10/05
3.4K0
一篇文章带你梳理Python Django的正确的学习方法!
作者:地球的外星人君 来源: https://www.zhihu.com/question/26235428/answer/170250328 Django是python的web开发框架,遵循MVC的
小小科
2018/05/02
1.5K0
一篇文章带你梳理Python Django的正确的学习方法!
Django中间件执行顺序
Django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性。
汪凡
2019/03/01
9080
Django中间件执行顺序
Django(35)Django请求生命周期分析(超详细)
建立连接后,客户端会通过TCP依次、有序的发送一定大小的报文,其中包括了超时重传、阻塞窗口等等概念,用来保证数据包的完整、有序
全栈程序员站长
2022/09/19
1.3K0
Django(35)Django请求生命周期分析(超详细)
Django 处理http请求之中间件
中间件“工厂”是一个携带一个可调用get_response参数并返回一个中间件的的可调用对象。中间件则是一个携带request参数并返回一个response的可调用对象,正如view视图函数。
授客
2020/08/25
5400
Django 处理http请求之中间件
类视图 中间件和模板
然后修改settings.py配置文件中修改TEMPLATES配置项的DIRS值, 如下:
py3study
2020/01/15
9030
python技术面试题(九)
Never give up. Never let things out of your control dictate who you are.
小闫同学啊
2019/07/18
9560
python技术面试题(九)
35.Django2.0文档
第四章 模板  1.标签 (1)if/else {% if %} 标签检查(evaluate)一个变量,如果这个变量为真(即,变量存在,非空,不是布尔值假),系统会 显示在 {% if %} 和 {% endif %} 之间的任何内容,例如: {% if today_is_weekend %} <p>Welcome to the weekend!</p> {% endif %} {% else %} 标签是可选的: {% if today_is_weekend %} <p>Welcome to the we
zhang_derek
2018/04/11
11.7K0
35.Django2.0文档
django 1.8 官方文档翻译: 3-4-1 基于类的视图
视图是一个可调用对象,它接收一个请求然后返回一个响应。这个可调用对象可以不只是函数,Django 提供一些可以用作视图的类。它们允许你结构化你的视图并且利用继承和混合重用代码。后面我们将介绍一些用于简单任务的通用视图,但你可能想要设计自己的可重用视图的结构以适合你的使用场景。完整的细节,请参见基于类的视图的参考文档。
ApacheCN_飞龙
2022/11/27
9360
后端框架学习-Django
使用 Django,只要很少的代码,Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的 Web 服务 Django 本身基于 MVC 模型,即 Model(模型)+ View(视图)+ Controller(控制器)设计模式,MVC 模式使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。
kif
2023/03/10
10.1K0
Django
小提示:"{:0>3}".formate(9) 右对齐若小于3位 --->00n 0位占位符,> 表示右对齐
Dean0731
2020/05/08
3.6K0
Python Day18 Django
这样,下次再访问时通过获取cookie中的"sessionid"的值就可以得到所对应的session-data
py3study
2020/01/14
1.2K0
相关推荐
web开发框架之Django基础
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验