
后端电商【免费下载链接】django-oscarDomain-driven e-commerce for Django项目地址https://gitcode.com/gh_mirrors/dj/django-oscar点击查看免费下载导读本文围绕 django-oscar 的 Dashboard 应用oscar.apps.dashboard展开它是 Oscar 用来替代 Django Admin 的后台管理界面负责商品目录、订单与库存、优惠等核心运营数据的管理。阅读本文后你将掌握 Dashboard 的整体架构与子应用划分、基于 partner 权限的多商户marketplace访问控制模型、主页统计报表的实现原理以及如何通过OSCAR_DASHBOARD_NAVIGATION等配置定制后台导航。文中所有结论均以当前仓库源码为依据并给出对应文件路径供你继续深入。Dashboard 是什么Django Admin 的完整替代根据 dashboard.rst 的定位Dashboard 是管理店铺的后端界面覆盖商品目录product catalogue、订单与库存、优惠offers等管理功能被设计为 Django admin 界面的完整替代品。它并不是一个把逻辑全部塞进单个应用的大泥球而是遵循 Oscar 一贯的外壳应用 子应用模式Dashboard 应用本身只包含一个充当主页的视图IndexView以及负责管理导航的逻辑nav.py店铺不同部分的管理功能由一系列子应用负责每个子应用独立管理一类资源。从 DashboardConfig 的ready()和get_urls()可以看到完整的子应用清单与 URL 前缀子应用URL 前缀职责catalogue_dashboardcatalogue/商品、产品类型、分类、库存警报、选项等reports_dashboardreports/报表orders_dashboardorders/订单与订单处理users_dashboardusers/客户管理与库存警报请求pages_dashboardpages/页面flatpages管理partners_dashboardpartners/合作伙伴管理offers_dashboardoffers/优惠管理ranges_dashboardranges/商品范围管理reviews_dashboardreviews/商品评论审核vouchers_dashboardvouchers/优惠券与优惠券集communications_dashboardcomms/邮件模板等通信管理shipping_dashboardshipping/运费管理除此之外根级 URL 还挂载了indexDashboard 主页与login/logout登录/登出。DashboardConfig继承自 OscarDashboardConfig后者把login_url指向dashboard:login因此整个 Dashboard 的权限校验与登录流程是统一的。主页 IndexView店铺运营统计的实时看板Dashboard 的主页由 IndexView 实现它是一个TemplateView核心职责是在get_context_data()中调用get_stats()把店铺运营统计注入模板上下文。统计指标与数据来源get_stats()中统计的数据来自多个 Oscar 核心模型订单Order、订单行Line、购物篮Basket仅统计statusBasket.OPEN的开放购物篮库存警报StockAlert区分OPEN与CLOSED状态客户User通过orders__isnullFalse过滤出下过单的用户产品Product。输出的指标包括最近 24 小时订单数、订单行数、平均订单金额、总营收、新增客户数、新增开放购物篮数、产品总数、库存警报数以及按订单状态分组的状态分布order_status_breakdown等。按小时营收报表 get_hourly_reportget_hourly_report(orders, hours24, segments10)把订单营收按小时切块以当前整点往前回溯hours小时默认 24每 2 小时为一段聚合每段的total_incl_tax之和并计算 y 轴刻度y_range与每段营收占比percentage供模板绘制柱状图。segments参数控制 y 轴标签分段数默认 10。面向非 staff 用户的模板分流IndexView.get_template_names()有一个重要细节当请求用户不是 staff 时优先使用oscar/dashboard/index_nonstaff.html并回退到oscar/dashboard/index.html。因为默认模板可能展示敏感店铺信息营收、客户数等官方文档建议为多商户场景提供自定义的index_nonstaff.html模板只展示该商户可见的数据。基于权限的 Dashboard多商户访问控制模型这是 dashboard.rst 的核心章节也是 Oscar 支持 marketplace多商户平台场景的关键机制。两种访问级别staff 用户is_staff True可以访问 Dashboard 中的所有视图拥有完整管理能力非 staff 用户若拥有partner.dashboard_access权限则被授予一部分视图的访问权且其对产品与订单的访问范围受到限制。partner 与用户的关联AbstractPartner.usersAbstractPartner实例拥有users字段。在 Oscar 0.6 之前该字段未被使用从 Oscar 0.6 起它被专门用于建模 Dashboard 访问权限。在 partner/abstract_models.py 中可以看到该字段的定义#: A partner can have users assigned to it. This is used #: for access modelling in the permission-based dashboard users models.ManyToManyField( AUTH_USER_MODEL, related_namepartners, blankTrue, verbose_name_(Users) )同时AbstractPartner.Meta中声明了权限permissions ((dashboard_access, Can access dashboard),)这解释了partner.dashboard_access权限的由来——它正是 Partner 模型的自定义权限通常通过 Django 的权限系统如Permission.objects或用户组的group.permissions授予。权限校验的底层实现权限是如何生效的可以分两层来看权限声明层DashboardConfig.configure_permissions()为index视图配置了两种可接受的权限——DashboardPermission.staff即is_staff和DashboardPermission.partner_dashboard_access即partner.dashboard_access。permissions.py 中DashboardPermission.get()支持显式映射与自动生成的app_label.codename权限。校验执行层check_permissions 实现核心判断逻辑权限参数可以是列表全部条件必须满足或元组/列表的列表任一权限列表满足即可。每个列表项可以是 Django 权限名含.如partner.dashboard_access走user.has_perms()或 User 模型上的属性/方法不含.如is_staff、is_active直接取值判断。默认还会附加is_active检查。permissions_required装饰器将其包装为视图访问控制未通过则重定向到登录页。非 staff 用户的具体能力范围拥有partner.dashboard_access权限且属于某AbstractPartner.users的非 staff 用户可以执行以下操作按 dashboard.rst 原文整理创建产品强制要求至少一个库存记录stock record所属 partner 的users中包含当前用户更新产品至少一个库存记录的 partner 的users中必须包含该用户删除与列出产品访问范围被限制为该用户允许更新的产品管理订单与产品类似如果订单的某个行line与匹配的 partner 相关联用户即可获得该订单的访问权。默认情况下即使该用户只供货其中一个 line也会获得整张订单所有 line 的访问权。从IndexView.get_stats()的实现也可以印证这种隔离当user.is_staff为假时所有统计查询都会用partners_ids tuple(user.partners.values_list(id, flatTrue))过滤——订单按lines__partner_id__inpartners_ids、库存警报按stockrecord__partner_id__inpartners_ids、购物篮按lines__stockrecord__partner_id__inpartners_ids、产品按stockrecords__partner_id__inpartners_ids过滤实现数据级别的商户隔离。自定义订单行可见性get_order_lines如果业务上要求用户只能看到自己的行或需要附加其他过滤逻辑可以覆写 OrderDetailView.get_order_lines 方法——默认实现是return self.object.lines.all()即返回订单的全部行。覆写时建议结合get_order_for_user_or_404同一文件 orders/views.py理解当前用户与订单的关联判定逻辑。Marketplace 场景建议对于许多 marketplace 场景建议在结账checkout时确保一个购物篮只包含来自同一个 partner的行从而避免订单行分属多个供货商带来的权限边界模糊问题。导航系统nav.py 与可配置菜单Dashboard 的导航由两个模块协作完成nav.py定义Node类与默认访问函数default_access_fnmenu.py读取设置生成菜单树。Node 与菜单树的构建Node表示导航菜单中的一个节点支持label、url_name、url_args/url_kwargs、access_fn访问控制回调与icon。没有url_name的节点被视为标题headingis_heading为真可以挂载子节点add_child。filter(user)递归过滤出当前用户可见的节点树。get_nodes(user)是入口它基于settings.OSCAR_DASHBOARD_NAVIGATION调用create_menu()构建全量菜单再对每个节点执行filter(user)最后剔除没有子节点的标题节点。默认菜单结构与配置项默认菜单定义在 defaults.py 中结构如下可通过覆盖OSCAR_DASHBOARD_NAVIGATION设置完全重定义Dashboarddashboard:indexCatalogue子项Products、Product Types、Categories、Ranges、Low stock alerts、Options、Attribute Option GroupsFulfilment子项Orders、Statistics、PartnersShipping charges 默认被注释禁用Customers子项Customers、Stock alert requestsOffers子项Offers、Vouchers、Voucher SetsContent子项Pages、Email templates、ReviewsReportsdashboard:reports-index配套的默认访问函数配置为OSCAR_DASHBOARD_DEFAULT_ACCESS_FUNCTION oscar.apps.dashboard.nav.default_access_fndefault_access_fn的工作方式值得注意它先reverse得到 URL再resolve回 URL name通过_dashboard_url_names_to_config()找到该 URL 所属的 Oscar Dashboard AppConfig调用其get_permissions(url_name)拿到权限列表最后交给check_permissions(user, permissions)判断。也就是说菜单项是否显示与视图是否可访问共用同一套权限逻辑保证看不到的入口就进不去。其他配套机制弹窗与批量操作虽然dashboard.rst正文未展开但oscar.apps.dashboard.views中还包含一组与后台使用体验直接相关的 mixinPopUpWindowMixin识别is_popup请求参数与RelatedFieldWidgetWrapper的弹窗变量对应PopUpWindowCreateUpdateMixin/PopUpWindowCreateMixin/PopUpWindowUpdateMixin分别处理创建、更新场景的弹窗响应返回 JSON 化的popup_response_data渲染oscar/dashboard/widgets/popup_response.html供父页面 JS 回调PopUpWindowDeleteMixin弹窗内的删除操作删除后同样返回弹窗响应数据。这些 mixin 让后台在列表页内联创建/编辑关联对象的场景下无需整页跳转。注意事项与已知限制结合 dashboard.rst 与源码使用 Dashboard 时有几点需要明确忽略其他权限Dashboard 目前忽略任何其他权限包括 Django 的默认权限add_*、change_*、delete_*。权限判定只依据is_staff与partner.dashboard_access这条权限链不要期望通过 Django 默认权限精细控制 Dashboard 视图。父子产品暂不支持基于权限的 Dashboard 目前不支持 parent/child 产品父/子商品结构。官方文档说明支持它需要建模层面的改动如果有此需求应先在社区沟通使用场景。单商户部署不受影响许多 Oscar 部署只有一个 fulfillment partner参见 partner/abstract_models.py 的说明此时users关联与权限过滤对单商户几乎无感知该机制主要为多商户平台设计。非 staff 主页模板为保护敏感统计信息非 staff 用户访问主页时应提供自定义oscar/dashboard/index_nonstaff.html模板。小结Django Oscar 的 Dashboard 是一个以子应用 统一导航 双权限模型构建的完整后台管理方案IndexView提供店铺运营统计看板nav.py/menu.py提供可按设置定制、与视图权限联动的导航树而partner.dashboard_accessAbstractPartner.users则构成了多商户场景下产品与订单数据隔离的权限地基。想要进一步深入可以继续阅读 dashboard 子应用源码尤其 views.py、permissions.py 与 nav.py以及 默认配置 中OSCAR_DASHBOARD_NAVIGATION的完整定义。赞分享后端电商【免费下载链接】django-oscarDomain-driven e-commerce for Django项目地址https://gitcode.com/gh_mirrors/dj/django-oscar点击查看免费下载相关推荐django CMS权限系统深度解析简单模式与页面级权限完整配置方案django CMS权限系统深度解析简单模式与页面级权限完整配置方案 django CMS基于 Django 的企业级内容管理系统的权限系统是许多新手最容CMS后端Django-Oscar 仪表盘导航配置完全指南Django Oscar 仪表盘导航配置完全指南 概述 Django Oscar 作为一个功能强大的电子商务框架提供了高度可定制的仪表盘界面。本文将深入讲解如后端电商NocoBase前端路由配置页面导航与权限控制NocoBase前端路由配置页面导航与权限控制 NocoBase作为极易扩展的无代码/低代码开发平台其前端路由系统承担着页面导航与权限控制的核心功能。本文将低代码后端前端人工智能AI 应用工作流自动化上一篇Magpie窗口缩放工具Windows屏幕放大的终极解决方案下一篇3步解锁桌面酷安体验Coolapk-UWP电脑版完全指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考