2024--Django平台开发-订单项目管理(十四)

day14 订单管理系统

在这里插入图片描述

1.关于登录

1.1 UI美化

页面美化,用BootStrap + 自定义BooStrapForm类实现。

class BootStrapForm:exclude_filed_list = []def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)# {'title':对象,"percent":对象}for name, field in self.fields.items():if name in self.exclude_filed_list:continuefield.widget.attrs['class'] = "form-control"field.widget.attrs['placeholder'] = "请输入{}".format(field.label)

1.2 csrf问题

/*** 根据cookie的name获取对应的值* @param name* @returns {null}*/
function getCookie(name) {let cookieValue = null;if (document.cookie && document.cookie !== '') {const cookies = document.cookie.split(';');for (let i = 0; i < cookies.length; i++) {const cookie = cookies[i].trim();// Does this cookie string begin with the name we want?if (cookie.substring(0, name.length + 1) === (name + '=')) {cookieValue = decodeURIComponent(cookie.substring(name.length + 1));break;}}}return cookieValue;
}function csrfSafeMethod(method) {// these HTTP methods do not require CSRF protectionreturn (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}$.ajaxSetup({beforeSend: function (xhr, settings) {if (!csrfSafeMethod(settings.type)) {xhr.setRequestHeader("X-CSRFTOKEN", getCookie('csrftoken'));}}
})

在页面上引入即可:

<script src="{% static 'js/csrf.js' %}"></script>

2.中间件校验

2.1 是否登录

NB_WHITE_URL = ['/login/', '/sms/login/', '/sms/send/']
class AuthMiddleware(MiddlewareMixin):def is_white_url(self, request):if request.path_info in settings.NB_WHITE_URL:return Truedef process_request(self, request):""" 校验用户是否已登录 """# 1.不需要登录就能访问的URLif self.is_white_url(request):return# 2.session中获取用户信息,能获取到登录成功;未登录#  {'role': mapping[role], 'name': user_object.username, 'id': user_object.id}user_dict = request.session.get(settings.NB_SESSION_KEY)# 3.未登录,跳转回登录页面if not user_dict:return redirect(settings.NB_LOGIN_URL)# 4.已登录,封装用户信息request.nb_user = UserInfo(**user_dict)

2.2 是否有权限

class AuthMiddleware(MiddlewareMixin):def process_view(self, request, callback, callback_args, callback_kwargs):if self.is_white_url(request):returncurrent_name = request.resolver_match.url_name# 1.根据用户角色获取自己具备所有的权限user_permission_dict = settings.NB_PERMISSION[request.nb_user.role]# 2.获取当前用户访问的URLcurrent_name = request.resolver_match.url_name# 3.判断是否在自己具备的权限if current_name not in user_permission_dict:# return HttpResponse("无权访问")# print(request.Meta)from django.core.handlers.wsgi import WSGIRequest# print(request,type(request))if request.is_ajax():return JsonResponse({'status': False, 'detail': "无权访问"})else:return render(request, 'permission.html')
NB_PERMISSION = {"ADMIN": {"level_list": {"text": "级别列表", 'parent': None},"level_add": {"text": "新建级别", 'parent': 'level_list'},"level_edit": {"text": "编辑级别", 'parent': 'level_list'},"level_delete": {"text": "删除级别", 'parent': 'level_list'},"customer_list": {"text": "客户列表", 'parent': None},"customer_add": {"text": "新建客户", 'parent': 'customer_list'},"customer_edit": {"text": "编辑客户", 'parent': 'customer_list'},"customer_delete": {"text": "删除客户", 'parent': 'customer_list'},"customer_reset": {"text": "重置密码", 'parent': 'customer_list'},"customer_charge": {"text": "我的交易记录", 'parent': 'customer_list'},"customer_charge_add": {"text": "创建交易记录", 'parent': 'customer_list'},"policy_list": {"text": "价格策略", 'parent': None},"policy_add": {"text": "创建价格策略", 'parent': 'policy_list'},"policy_edit": {"text": "编辑价格策略", 'parent': 'policy_list'},"policy_delete": {"text": "删除价格策略", 'parent': 'policy_list'},"transaction_list": {'text': "交易记录", 'name': "transaction_list", 'parent': None},},"CUSTOMER": {"my_order_list": {"text": "订单列表", 'parent': None},"my_order_add": {"text": "订单列表", 'parent': 'my_order_list'},"my_order_cancel": {"text": "订单列表", 'parent': 'my_order_list'},"my_transaction_list": {"text": "我的交易记录", 'parent': None},}
}

3.路径导航

推荐:用inclusion_tag在页面渲染时生成。

# ...
# ....text_list = []  # ["创建订单","订单列表"]# 1.先添加当前访问的路径导航名称添加text_list
text_list.append(user_permission_dict[current_name]['text'])# 2.循环获取上级
menu_name = current_name
while user_permission_dict[menu_name]['parent']:menu_name = user_permission_dict[menu_name]['parent']text = user_permission_dict[menu_name]['text']text_list.append(text)# 3.添加首页
text_list.append("首页")# 4.翻转
text_list.reverse()# 5.路径导航列表(用于后续页面显示)
request.nb_user.text_list = text_list
{% if request.nb_user.text_list %}
<ol class="breadcrumb">{% for text in request.nb_user.text_list %}<li><a>{{ text }}</a></li>{% endfor %}
</ol>
{% endif %}

4.动态菜单

NB_MENU = {'ADMIN': [{'text': "用户信息",'icon': "fa-bed",'children': [{'text': "级别管理", 'url': "/level/list/", 'name': "level_list"},{'text': "客户管理", 'url': "/customer/list/", 'name': "customer_list"},{'text': "价格策略", 'url': "/policy/list/", 'name': "policy_list"},]},{'text': "交易管理",'icon': "fa-bed",'children': [{'text': "交易记录", 'url': "/transaction/list/", 'name': "transaction_list"},]},],'CUSTOMER': [{'text': "订单中心",'icon': "fa-bed",'children': [{'text': "订单管理", 'url': "/my/order/list/", 'name': "my_order_list"},{'text': "我的交易记录", 'url': "/my/transaction/list/", 'name': "my_transaction_list"},]},],
}
from django.http import QueryDict
from django.template import Library
from django.conf import settings
import copy
register = Library()@register.inclusion_tag("tag/nb_menu.html")
def nb_menu(request):# 1.读取当前用户的角色信息# print(request.nb_user.role)# 2.菜单信息user_menu_list = copy.deepcopy(settings.NB_MENU[request.nb_user.role])for item in user_menu_list:# item['class'] = 'hide'for child in item['children']:# if child['url'] == request.path_info: # v1版if child['name'] == request.nb_user.menu_name:child['class'] = 'active'# item['class'] = ""return {'menu_list': user_menu_list}
<div class="multi-menu">{% for item in menu_list %}<div class="item"><div class="title"><span class="icon-wrap"><i class="fa {{ item.icon }}"></i></span> {{ item.text }}</div><div class="body {{ item.class }}">{% for child in item.children %}<a class="{{ child.class }}" href="{{ child.url }}">{{ child.text }}</a>{% endfor %}</div></div>{% endfor %}
</div>
.multi-menu .item {background-color: white;
}.multi-menu .item > .title {padding: 10px 5px;border-bottom: 1px solid #dddddd;cursor: pointer;color: #333;display: block;background: #efefef;background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #efefef), color-stop(1, #fafafa));background: -ms-linear-gradient(bottom, #efefef, #fafafa);background: -o-linear-gradient(bottom, #efefef, #fafafa);filter: progid:dximagetransform.microsoft.gradient(startColorStr='#e3e3e3', EndColorStr='#ffffff');-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#fafafa',EndColorStr='#efefef')";box-shadow: inset 0 1px 1px white;
}.multi-menu .item > .body {border-bottom: 1px solid #dddddd;
}.multi-menu .item > .body a {display: block;padding: 5px 20px;text-decoration: none;border-left: 2px solid transparent;font-size: 13px;}.multi-menu .item > .body a:hover {border-left: 2px solid #2F72AB;
}.multi-menu .item > .body a.active {border-left: 2px solid #2F72AB;
}

5.级别管理

6.客户管理

7.管理员管理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/241526.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

市场监管总局发布区块链和分布式记账技术6项标准,中创积极推动区块链产业发展!

近日&#xff0c;市场监管总局&#xff08;国家标准委&#xff09;批准发布一批重要国家标准&#xff0c;涉及生产生活、绿色可持续等多个领域&#xff0c;这些标准将在引领产业发展、促进绿色转型、助力对外贸易、推动城乡建设、提升生活品质等方面发挥重要作用。 其中一项标…

免费三款备受推崇的爬虫软件

在信息爆炸的时代&#xff0c;爬虫软件成为了数据采集、信息挖掘的得力工具。为了解决用户对优秀爬虫软件的需求&#xff0c;本文将专心分享三款备受推崇的爬虫软件&#xff0c;其中特别突出推荐147采集软件&#xff0c;为您开启爬虫软件的奇妙世界。 一、爬虫软件的重要性 爬…

【开源】基于JAVA的教学资源共享平台

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 课程档案模块2.3 课程资源模块2.4 课程作业模块2.5 课程评价模块 三、系统设计3.1 用例设计3.2 类图设计3.3 数据库设计3.3.1 课程档案表3.3.2 课程资源表3.3.3 课程作业表3.3.4 课程评价表 四、系统展…

【MATLAB】 SSA奇异谱分析信号分解算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 1 基本定义 SSA奇异谱分析&#xff08;Singular Spectrum Analysis&#xff09;是一种处理非线性时间序列数据的方法&#xff0c;可以对时间序列进行分析和预测。 它基于构造在时间序列上的特定矩阵的奇异值分解&#…

3Dmax灯光学习(Vray灯光应用)

渲染效果图可以用渲染100哦&#xff0c;最高支持max2024&#xff0c;cr11&#xff0c;vr6.2&#xff0c;支持LUT和Acescg工作流等常用插件&#xff0c;同时森林插件7.43也进行了支持&#xff0c;注册填邀请码【7788】即可免费测试&#xff01; 灯光应用 普通灯光/标准灯光(外景…

RIP基础实验配置

要使用RIP完成以上命令需求 1&#xff0c;首先划分ip地址 有图可见有四个网段需要划分 192.168.1.0/26 192.168.3.0/26 192.168.7.0/26 192.168.5.0/26 给两个骨干网段&#xff0c;给两个环回接口&#xff0c;由下图所示&#xff1a; 其次&#xff0c;规划好ip后在各个接口…

多测师肖sir___ui自动化测试po框架(升级)

ui自动化测试po框架&#xff08;升级&#xff09; po框架 一、ui自动化po框架介绍 &#xff08;1&#xff09;PO是Page Object的缩写&#xff08;pom模型&#xff09; &#xff08;2&#xff09;业务流程与页面元素操作分离的模式&#xff0c;可以简单理解为每个页面下面都有一…

hanlp,pkuseg,jieba,cutword分词实践

总结&#xff1a;只有jieba,cutword,baidu lac成功将色盲色弱成功分对,这两个库字典应该是最全的 hanlp[持续更新中] https://github.com/hankcs/HanLP/blob/doc-zh/plugins/hanlp_demo/hanlp_demo/zh/tok_stl.ipynb import hanlp # hanlp.pretrained.tok.ALL # 语种见名称最…

初识Ubuntu

其实还是linux操作系统 命令都一样 但是在学习初级阶段&#xff0c;我还是将其分开有便于我的学习和稳固。 cat 查看文件 命令 Ubuntu工作中经常是用普通用户&#xff0c;在需要时才进行登录管理员用户 sudn -i 切换成管理用户 我们远程连接时 如果出现 hostname -I没有出现…

长亭科技-雷池WAF的安装与使用

目录 1、安装雷池 2、登录雷池 3、简单配置 4、防护测试 5、其他补充 1、安装雷池 在Linux系统上执行如下命令 &#xff08;需要docker环境&#xff0c;提前把docker、docker-compose 装好&#xff09; bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release…

vba设置excel单元格背景色

vba设置excel单元格背景色位蓝色 Sheet1.Cells(hang, 2).Interior.Color RGB(0, 0, 255) 参考链接 【VBA】给单元格设置背景色_vba 将一行底色置绿色-CSDN博客https://blog.csdn.net/s_h_m114_2/article/details/105787093 参考2 知乎 VBA--单元格的背景色设置 特此…

个性化定制的知识付费小程序,为用户提供个性化的知识服务

明理信息科技知识付费saas租户平台 随着知识经济的兴起&#xff0c;越来越多的人开始重视知识付费&#xff0c;并希望通过打造自己的知识付费平台来实现自己的知识变现。本文将介绍如何打造自己的知识付费平台&#xff0c;并从定位、内容制作、渠道推广、运营维护四个方面进行…

【SpringBoot系列】JDK动态代理

🤵‍♂️ 个人主页:@香菜的个人主页,加 ischongxin ,备注csdn ✍🏻作者简介:csdn 认证博客专家,游戏开发领域优质创作者,华为云享专家,2021年度华为云年度十佳博主 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收…

数据库经典面试题

习题一 1.1 创建表 ①创建Student表 mysql> create table Student ( -> Sno int primary key, -> Sname varchar(255), -> Ssex varchar(10), -> Sdept varchar(50) -> ); Query OK, 0 rows affected (0.01 sec) ②创建Course表 mysql…

汽车生产污废水处理需要哪些工艺设备

对于汽车生产过程中产生的污废水处理&#xff0c;需要运用一系列的工艺设备来实现有效的清洁和回收利用。下面让我们一起来探索一下吧&#xff01; 首先&#xff0c;汽车生产工艺设备中最常见的是物理处理设备。物理处理包括沉淀、过滤和吸附等过程。其中&#xff0c;沉淀操作可…

2024年甘肃省职业院校技能大赛信息安全管理与评估 样题三 模块一

竞赛需要完成三个阶段的任务&#xff0c;分别完成三个模块&#xff0c;总分共计 1000分。三个模块内容和分值分别是&#xff1a; 1.第一阶段&#xff1a;模块一 网络平台搭建与设备安全防护&#xff08;180 分钟&#xff0c;300 分&#xff09;。 2.第二阶段&#xff1a;模块二…

Android Studio安卓开发入门第一天

1.用Button实现页面跳转 &#xff08;1&#xff09;在主页面activity_main.xml中添加Button&#xff1a; <Buttonandroid:layout_width"wrap_content"android:layout_height"wrap_content"android:id"id/abd"android:text"hello&#…

洛谷P5731 【深基5.习6】蛇形方阵(C语言)

思路感觉还是比较好想的。 从 1 到 n 依次算。先往右&#xff0c;走到头往下&#xff0c;再走到头往左&#xff0c;以此类推。 #include<stdio.h>int main() {int n, i, j, k1,t0;scanf("%d", &n);int a[100][100];if (n % 2 0)t n / 2;elset n / 2 …

【手撕C语言 第四集】分支和循环(上)

文章目录 一、什么是语句&#xff1f;二、分支语句&#xff08;选择结构&#xff09;1.if语句悬空elseif书写形式的对比 2.switch语句在switch语句中的 breakdefault子句 3.循环语句while循环while语句中的break和continue总结&#xff1a; continue介绍总结: 一、什么是语句&a…

16.桥接模式

桥接模式 介绍 桥接模式是一种结构型设计模式&#xff0c;它通过将抽象部分与实现部分分离&#xff0c;使它们可以独立变化。这种模式通过组合的方式来实现&#xff0c;而不是继承。桥接模式通过将抽象和实现解耦&#xff0c;从而实现抽象和实现的分离&#xff0c;使得系统更加…