关于python:Python面试题100例2630题

55次阅读

共计 3939 个字符,预计需要花费 10 分钟才能阅读完成。

二十六、请介绍下 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 操作数据库的根本步骤:

  8. 定义模型:在 Django 中,每个数据库表由一个 Python 类来示意,这个类继承自 django.db.models.Model。每个类的属性就示意数据库表的字段。

    from django.db import models
    
    class Book(models.Model):
     title = models.CharField(max_length=200)
     publication_date = models.DateField()
    
  9. 迁徙:定义好模型之后,须要通过迁徙来在数据库中创立对应的表。Django 提供了 makemigrations 命令来创立迁徙,而后用 migrate 命令来利用迁徙。

    python manage.py makemigrations
    python manage.py migrate
    
  10. 应用模型:当初,咱们能够应用定义的模型来进行数据库操作了。例如,创立一个新的记录:

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

    也能够查问现有的记录:

    books = Book.objects.filter(title__contains='Django')
    
  11. 批改和删除记录:咱们也能够批改或删除数据库中的记录。例如:

    # 批改记录
    book = Book.objects.get(id=1)
    book.title = 'New Title'
    book.save()
    
    # 删除记录
    book.delete()
    

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

    在 Django 中,中间件是一个轻量级、底层的“插件”零碎,用来全局扭转 Django 的输出或输入。每次一个申请被解决,Django 首先会依据你的 MIDDLEWARE 设置来利用每个中间件类的办法。
    以下是一个应用中间件的根本步骤:

  12. 创立中间件:中间件是一个 Python 类,须要实现特定的办法。例如,上面是一个简略的中间件,它会在每个申请被解决前打印一条音讯:

    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 之后的代码会在申请被解决后(视图函数被调用后)执行。

  13. 激活中间件:要启用中间件,须要将其增加到 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 开发中如何优化数据库

  14. 优化查问:应用 ORM 时,要留神防止生成不必要的查问。例如,如果你须要拜访一个外键关联的对象的某个属性,最好应用 select_related 或 prefetch_related 办法,这样能够在一次查问中获取所有必要的信息,防止“N+ 1 查问”问题。

    # 优化前
    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)
    
  15. 只获取必要的字段:如果你只须要模型的某几个字段,能够应用 values 或 values_list 办法,只获取这些字段的数据,这样能够缩小数据库的 I / O 累赘。

    titles = Book.objects.values_list('title', flat=True)
  16. 应用索引:在常常须要查问的字段上创立索引,能够大大提高查问效率。在 Django 的模型字段中,能够设置 db_index=True 来创立索引。

    class Book(models.Model):
     title = models.CharField(max_length=200, db_index=True)
     publication_date = models.DateField()
  17. 分页:如果你须要显示大量的数据,最好应用分页来缩小每次查问的数据量。Django 提供了 Paginator 类来帮忙实现分页。
  18. 缓存:对于那些不常常变动然而读取频繁的数据,能够应用缓存来进步性能。Django 提供了十分欠缺的缓存零碎,能够缓存视图的后果,也能够手动缓存数据。

    三十、什么是 Django 中间件

Django 中间件是一个轻量级、底层的“插件”零碎,用来全局扭转 Django 的输出或输入。在申请被解决的过程中,中间件是第一个解决 HTTP 申请或视图返回的 HTTP 响应的组件。它能够看作是解决申请和响应的钩子。
中间件的次要性能包含:

  • 解决全局申请:例如,能够在一个中间件中查看是否有 session 的存在,如果没有就创立一个。
  • 解决全局响应:例如,能够在一个中间件中对立增加某个 HTTP 头部。
  • 在视图解决之前或之后扭转申请或响应。
  • 将某些工作钩子到申请 / 响应的处理过程中,例如数据缓存、数据压缩等。

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

  • __init__(self, get_response):在中间件实例化时调用一次,其中 get_response 是一个用于获取视图响应的回调函数。
  • __call__(self, request):解决每个申请时都会调用,你能够在这里扭转申请或响应。

中间件的执行程序在 Django 设置中的 MIDDLEWARE 列表中定义,这个列表的程序十分重要。在解决申请时,Django 会依照 MIDDLEWARE 列表从上到下的程序利用每个中间件,而后在解决响应时,Django 会依照从下到上的程序利用每个中间件。

正文完
 0