Django是一个高级的Python Web框架,它遵循MVC设计模式(在Django中通常称为MTV,即模型(Model)、模板(Template)和视图(Views)),并且鼓励快速开发和干净、实用的设计。以下是一个简单的Django请求/响应生命周期:
Django通过它的ORM(Object-Relational Mapping,对象-关系映射)系统来操作数据库。ORM允许开发者用Python代码来操作数据库,而不需要写SQL语句。这样,我们就可以编写数据库独立的代码,而不用担心底层使用的是哪种数据库系统(MySQL,PostgreSQL,SQLite等)。
以下是Django操作数据库的基本步骤:
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=200)
publication_date = models.DateField()
python manage.py makemigrations
python manage.py migrate
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')
# 修改记录
book = Book.objects.get(id=1)
book.title = 'New Title'
book.save()
# 删除记录
book.delete()
在Django中,中间件是一个轻量级、底层的“插件”系统,用来全局改变Django的输入或输出。每次一个请求被处理,Django首先会根据你的MIDDLEWARE设置来应用每个中间件类的方法。
以下是一个使用中间件的基本步骤:
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之后的代码会在请求被处理后(视图函数被调用后)执行。
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会从上到下应用每个中间件,但在响应阶段,则会从下到上应用中间件。这意味着在请求列表中,越是在上面的中间件,它的响应处理代码会越后执行。
# 优化前
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)
titles = Book.objects.values_list('title', flat=True)
class Book(models.Model):
title = models.CharField(max_length=200, db_index=True)
publication_date = models.DateField()
Django中间件是一个轻量级、底层的“插件”系统,用来全局改变Django的输入或输出。在请求被处理的过程中,中间件是第一个处理HTTP请求或视图返回的HTTP响应的组件。它可以看作是处理请求和响应的钩子。
中间件的主要功能包括:
一个中间件基本上就是一个Python类,它定义了以下一个或多个方法:
中间件的执行顺序在Django设置中的MIDDLEWARE列表中定义,这个列表的顺序非常重要。在处理请求时,Django会按照MIDDLEWARE列表从上到下的顺序应用每个中间件,然后在处理响应时,Django会按照从下到上的顺序应用每个中间件。