建设如下文件目录格式配置根项目 urls.pydjango_gate_demo/urls.pyfrom django.contrib import admin from django.urls import path, include urlpatterns [ path(admin/, admin.site.urls), # 集成演示应用路由 path(, include(app_demo.urls)), ]配置django_gate_demo/settings.pyimport os from pathlib import Path # 项目基础路径配置 BASE_DIR Path(__file__).resolve().parent.parent # 安全警告生产环境必须保护密钥安全 SECRET_KEY django-insecure-xxxxxxxxx # 安全警告生产环境请关闭调试模式 DEBUG True ALLOWED_HOSTS [] # 应用配置 INSTALLED_APPS [ django.contrib.admin, django.contrib.auth, django.contrib.contenttypes, django.contrib.sessions, django.contrib.messages, django.contrib.staticfiles, # 注册自定义应用 app_demo, ] # 中间件配置 MIDDLEWARE [ django.middleware.security.SecurityMiddleware, django.contrib.sessions.middleware.SessionMiddleware, django.middleware.common.CommonMiddleware, # 自定义社区门禁中间件 app_demo.middleware.CommunityGateMiddleware, django.contrib.auth.middleware.AuthenticationMiddleware, django.contrib.messages.middleware.MessageMiddleware, django.middleware.clickjacking.XFrameOptionsMiddleware, ] ROOT_URLCONF django_gate_demo.urls TEMPLATES [ { BACKEND: django.template.backends.django.DjangoTemplates, DIRS: [], APP_DIRS: True, OPTIONS: { context_processors: [ django.template.context_processors.debug, django.template.context_processors.request, django.contrib.auth.context_processors.auth, django.contrib.messages.context_processors.messages, ], }, }, ] WSGI_APPLICATION django_gate_demo.wsgi.application # 数据库配置 DATABASES { default: { ENGINE: django.db.backends.sqlite3, NAME: BASE_DIR / db.sqlite3, } } # 密码验证配置 AUTH_PASSWORD_VALIDATORS [ { NAME: django.contrib.auth.password_validation.UserAttributeSimilarityValidator, }, { NAME: django.contrib.auth.password_validation.MinimumLengthValidator, }, { NAME: django.contrib.auth.password_validation.CommonPasswordValidator, }, { NAME: django.contrib.auth.password_validation.NumericPasswordValidator, }, ] # 国际化配置 LANGUAGE_CODE zh-hans TIME_ZONE Asia/Shanghai USE_I18N True USE_TZ True # 静态文件配置 STATIC_URL static/ # 默认主键字段类型 DEFAULT_AUTO_FIELD django.db.models.BigAutoField配置项目总路由django_gate_demo/urls.pyfrom django.contrib import admin from django.urls import path, include urlpatterns [ path(admin/, admin.site.urls), # 后台管理路由 path(, include(app_demo.urls)), # 主应用路由 ]配置app_demo/middleware.pyfrom django.http import HttpResponse class CommunityGateMiddleware: def __init__(self, get_response): self.get_response get_response print(【小区门卫系统】中间件初始化完成) def __call__(self, request): # 入口检查 print(\n 入口检查小区大门登记 ) print(f请求路径{request.path}) print(f请求方法{request.method}) # 拦截特定路径 if request.path /block: return HttpResponse(访问受限该路径禁止通行, status403) # 处理请求并获取响应 response self.get_response(request) # 出口处理 print(\n 出口处理响应修改 ) response.content b\n【门卫检查完成允许通行】 return response配置app_demo/views.pyfrom django.http import HttpResponse from django.views import View # 任务2FBV函数视图 - 直接对接房东 def fbv_landlord_view(request): print( 第二/三道岗路由验证通过 ) return HttpResponse(FBV视图直接与房东签约成功) # 任务2CBV类视图 - 通过中介代理 class CbvAgentView(View): def get(self, request): print( 第二/三道岗路由验证通过 ) return HttpResponse(CBV视图通过中介代理签约房东信息隐藏) # 控制台输出FBV与CBV类型对比 print(\n 中间件视角FBV与CBV类型分析 ) print(fFBV原始类型{type(fbv_landlord_view)}) print(fCBV经as_view()转换后类型{type(CbvAgentView.as_view())}) print(结论中间件视角下两者均为函数类型)应用子路由 app_demo/urls.pyfrom django.urls import path from app_demo.views import fbv_landlord_view, CbvAgentView urlpatterns [ # 函数视图路由 path(fbv/, fbv_landlord_view), # 类视图路由使用as_view()方法转换 path(cbv/, CbvAgentView.as_view()), # 中间件拦截测试路由 path(block/, lambda req: HttpResponse(请求被中间件拦截)), ]
任务1:验证中间件的4个【钩子】函数任务2:验证CBV,和FBV做比较
发布时间:2026/5/16 18:50:55
建设如下文件目录格式配置根项目 urls.pydjango_gate_demo/urls.pyfrom django.contrib import admin from django.urls import path, include urlpatterns [ path(admin/, admin.site.urls), # 集成演示应用路由 path(, include(app_demo.urls)), ]配置django_gate_demo/settings.pyimport os from pathlib import Path # 项目基础路径配置 BASE_DIR Path(__file__).resolve().parent.parent # 安全警告生产环境必须保护密钥安全 SECRET_KEY django-insecure-xxxxxxxxx # 安全警告生产环境请关闭调试模式 DEBUG True ALLOWED_HOSTS [] # 应用配置 INSTALLED_APPS [ django.contrib.admin, django.contrib.auth, django.contrib.contenttypes, django.contrib.sessions, django.contrib.messages, django.contrib.staticfiles, # 注册自定义应用 app_demo, ] # 中间件配置 MIDDLEWARE [ django.middleware.security.SecurityMiddleware, django.contrib.sessions.middleware.SessionMiddleware, django.middleware.common.CommonMiddleware, # 自定义社区门禁中间件 app_demo.middleware.CommunityGateMiddleware, django.contrib.auth.middleware.AuthenticationMiddleware, django.contrib.messages.middleware.MessageMiddleware, django.middleware.clickjacking.XFrameOptionsMiddleware, ] ROOT_URLCONF django_gate_demo.urls TEMPLATES [ { BACKEND: django.template.backends.django.DjangoTemplates, DIRS: [], APP_DIRS: True, OPTIONS: { context_processors: [ django.template.context_processors.debug, django.template.context_processors.request, django.contrib.auth.context_processors.auth, django.contrib.messages.context_processors.messages, ], }, }, ] WSGI_APPLICATION django_gate_demo.wsgi.application # 数据库配置 DATABASES { default: { ENGINE: django.db.backends.sqlite3, NAME: BASE_DIR / db.sqlite3, } } # 密码验证配置 AUTH_PASSWORD_VALIDATORS [ { NAME: django.contrib.auth.password_validation.UserAttributeSimilarityValidator, }, { NAME: django.contrib.auth.password_validation.MinimumLengthValidator, }, { NAME: django.contrib.auth.password_validation.CommonPasswordValidator, }, { NAME: django.contrib.auth.password_validation.NumericPasswordValidator, }, ] # 国际化配置 LANGUAGE_CODE zh-hans TIME_ZONE Asia/Shanghai USE_I18N True USE_TZ True # 静态文件配置 STATIC_URL static/ # 默认主键字段类型 DEFAULT_AUTO_FIELD django.db.models.BigAutoField配置项目总路由django_gate_demo/urls.pyfrom django.contrib import admin from django.urls import path, include urlpatterns [ path(admin/, admin.site.urls), # 后台管理路由 path(, include(app_demo.urls)), # 主应用路由 ]配置app_demo/middleware.pyfrom django.http import HttpResponse class CommunityGateMiddleware: def __init__(self, get_response): self.get_response get_response print(【小区门卫系统】中间件初始化完成) def __call__(self, request): # 入口检查 print(\n 入口检查小区大门登记 ) print(f请求路径{request.path}) print(f请求方法{request.method}) # 拦截特定路径 if request.path /block: return HttpResponse(访问受限该路径禁止通行, status403) # 处理请求并获取响应 response self.get_response(request) # 出口处理 print(\n 出口处理响应修改 ) response.content b\n【门卫检查完成允许通行】 return response配置app_demo/views.pyfrom django.http import HttpResponse from django.views import View # 任务2FBV函数视图 - 直接对接房东 def fbv_landlord_view(request): print( 第二/三道岗路由验证通过 ) return HttpResponse(FBV视图直接与房东签约成功) # 任务2CBV类视图 - 通过中介代理 class CbvAgentView(View): def get(self, request): print( 第二/三道岗路由验证通过 ) return HttpResponse(CBV视图通过中介代理签约房东信息隐藏) # 控制台输出FBV与CBV类型对比 print(\n 中间件视角FBV与CBV类型分析 ) print(fFBV原始类型{type(fbv_landlord_view)}) print(fCBV经as_view()转换后类型{type(CbvAgentView.as_view())}) print(结论中间件视角下两者均为函数类型)应用子路由 app_demo/urls.pyfrom django.urls import path from app_demo.views import fbv_landlord_view, CbvAgentView urlpatterns [ # 函数视图路由 path(fbv/, fbv_landlord_view), # 类视图路由使用as_view()方法转换 path(cbv/, CbvAgentView.as_view()), # 中间件拦截测试路由 path(block/, lambda req: HttpResponse(请求被中间件拦截)), ]