# 电商数字化平台系统设计
**Repository Path**: twxspace/Django_Structure
## Basic Information
- **Project Name**: 电商数字化平台系统设计
- **Description**: 模拟直播间开发的数据分析看板系统,且支持采购、库存、销售部门进行数字化运营,主要面向企业各个业务部门。
- **Primary Language**: Unknown
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2023-05-20
- **Last Updated**: 2024-03-29
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
admin.py:在admin管理界面注册一个class
models.py:是定义应用程序数据结构的 Python 对象,并提供在数据库中管理(添加,修改,删除)和查询记录的机制。
views.py:定义网站逻辑的地方
settings.py 包含所有的网站设置。这是可以注册所有创建的应用的地方,也是静态文件,数据库配置的地方,等等。
urls.py 定义了网站 url 到 view 的映射。虽然这里可以包含所有的 url,但是更常见的做法是把应用相关的 url 包含在相关应用中,你可以在接下来的教程里看到。
wsgi.py 帮助 Django 应用和网络服务器间的通讯。你可以把这个当作模板。
db.sqlite3是数据库文件,manage.py中有django项目中的大部分命令
Templates: 模板 是定义文件(例如 HTML 页面)的结构或布局的文本文件,用于表示实际内容的占位符。一个视图可以使用 HTML 模板,从数据填充它动态地创建一个 HTML 页面模型。可以使用模板来定义任何类型的文件的结构; 它不一定是 HTML!
static存放静态文件,此处建议static下再新建三个文件夹:js,css和images,分别存放js文件,css文件和图片
mysite/__init__.py:一个空文件,告诉 Python 这个目录应该被认为是一个 Python 包。如果你是 Python 初学者,阅读官方文档中的 更多关于包的知识。
mysite/settings.py:Django 项目的配置文件。如果你想知道这个文件是如何工作的,请查看 Django 配置 了解细节。
mysite/urls.py:Django 项目的 URL 声明,就像你网站的“目录”。阅读 URL调度器 文档来获取更多关于 URL 的内容。
mysite/asgi.py:作为你的项目的运行在 ASGI 兼容的 Web 服务器上的入口。阅读 如何使用 ASGI 来部署 了解更多细节。
mysite/wsgi.py:作为你的项目的运行在 WSGI 兼容的Web服务器上的入口。阅读 如何使用 WSGI 进行部署 了解更多细节。
SETTING.PY中存放一些配置,其中我将database布置在本地的mysql上
'Statistics.apps.statisticsConfig'#注册APP
__init__.py文件里配置数据库环境,并强制修改版本号
Statisics这是一个应用
LiveStream是一个项目
绝大多数文件的命令和它们的目的有关(比如视图函数就是views.py,模型就是models.py,测试是tests.py,网站管理设置是admin.py,注册应用是apps.py),并且还包含了为项目所用的最小模板。
.表示当前目录
Step1:创建django项目
Step2:创建应用,并且修改设置
Step3:创建url和视图之间的连接映射
Django path() 可以接收四个参数,分别是两个必选参数:route、view 和两个可选参数:kwargs、name。
语法格式:
path(route, view, kwargs=None, name=None)
route: 字符串,表示 URL 规则,与之匹配的 URL 会执行对应的第二个参数 view。
view: 用于执行与正则表达式匹配的 URL 请求。
kwargs: 视图使用的字典类型的参数。
name: 用来反向获取 URL。
通过render将视图与数据分离,{{}}替换该括号间的数据
python system/manage.py runserver
views.py使用render函数用于对页面进行填充
login app 负责登录程序
对于调用上一层目录使用
import sys
sys.path.append("..") #从上一个目录里调用Statistics
from login import views as view_login
https://blog.csdn.net/qq_38175040/article/details/104684355 页面跳转问题
修改路径记得用/static/不然会默认从当前路径出发
models.py
managed = True 使得django可以对数据库表进行修改操作
request对象方法
https://blog.csdn.net/zhouruifu2015/article/details/130187600
表示一个动作,调用相应的url函数,给登录按钮设置input标签,type为summit表示提交任务,然后做判断,如果成功则跳入
index1:
换成 在div标签内加入iframe标签,从而达到内嵌数据的目的
解决iframe 127.0.0.1拒绝访问的问题:https://blog.csdn.net/weixin_35757704/article/details/113428811
使用flask生成动态数据来对图表做操作
pye_tem 保存了pyechart的渲染模板
ajax异步渲染html,生成json格式数据,然后传给html模板,进行数据交互。
def bar_demo() -> Bar表示返回柱形图属性
function fetchData() {
$.ajax({
type: "GET",
url: "http://127.0.0.1:8000/bar/",----url后面跟的是chartview函数返回的一个url,在url.py里设置好了。调用该html直接使用render函数即可
dataType: 'json',
success: function (result) {
chart.setOption(result.data);
}
});
$.ajaxSetup( {
url: "/index.html" , // 默认URL
aysnc: false , // 默认同步加载
type: "POST" , // 默认使用POST方式
headers: { // 默认添加请求头
"Author": "CodePlayer" ,
"Powered-By": "CodePlayer"
} ,--打开ajax设置,默认同步加载方式改为false,因为我们采用的是异步加载方式
Window 和 Worker 接口提供的 setInterval() 方法重复调用一个函数或执行一个代码片段,在每次调用之间具有固定的时间间隔。
var intervalID = setInterval(func, [delay, arg1, arg2, ...]);---delay表示延迟毫秒数 1000表示延迟1秒,func表示要重复调用的函数
通过调用html里的函数,setInterval来进行重复的调用
Django服务器接收到客户端发送过来的请求后,会将提交上来的这些数据封装成一个 HttpRequest 对象传给视图函数。那么视图函数在处理完相关的逻辑后,也需要返回一个响应给浏览器。而这个响应,我们必须返回 HttpResponseBase 或者他的子类的对象。而 HttpResponse 则是 HttpResponseBase 用得最多的子类。
https://www.jianshu.com/p/7a0718e07068--介绍response
https://blog.csdn.net/qq_45261963/article/details/123981719--APIview
在body后的style里设置尺寸
{% csrf_token %}数据库调用的安全认证
方法名称中 "Id" 的大小写必须正确才能使代码正常运行;getElementByID() 是无效且无法正常运行的,无论它看起来是多么自然。
getOption()这个方法是把数据克隆了一份,所以直接修改是没有效果的
setOption()这个方法就可以直接修改图表里的数据并且会有效果
test.html使用的echart的方法
https://echarts.apache.org/handbook/zh/get-started
动态图逻辑,通过函数生成js数据格式,再将js数据格式传入javascript写法的echart生成图表文件中
对应的option值方法,echart.js是一些方法的集合吧,包含echart功能的文件,test.html是一个图表
var option = {
title: {
text: 'ECharts 入门示例'
},
tooltip: {},
legend: {
data: ['销量']
},
xAxis: {
data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
},
yAxis: {},
series: [
{
name: '销量',
type: 'bar',
data: [5, 20, 36, 10, 10, 20]
}
]
};
pyechart生成的js格式的echart
os.environ['DJANGO_ALLOW_ASYNC_UNSAFE'] = 'true'增加异步调用
module_dir = os.path.dirname(__file__)
path = os.path.join(module_dir, '飞天狙想要努力变胖.csv')使得view函数可以调用本地文件
document.getElementById("GetStartTime").value
Django学习报错之Cannot assign ... must be a ... instance
ZBJ1235 ZB12346 ZBJJL1234567902 2023-05-25 21:36:00 2023-05-25 23:36:00
USE_TZ = False防止时区上的报错
''.join(random.sample('ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890',10))生成随机序列
事实证明其余操作不影响直播间的实时并发,人数和弹幕可以正常保存,但是订单和订单详情无法正常写入,于是决定将订单和订单详情用别的方式去写
我可以尝试教你。根据我的搜索结果¹,你需要把任务添加到线程池的工作队列中去,当一个线程变成可运行状态时,ThreadPoolExecutor从工作队列中取出一个任务,然后在该线程中执行。你可以使用execute方法或者submit方法来向线程池提交任务³。execute方法没有返回值,而submit方法可以返回一个Future对象,用于获取任务的执行结果或者取消任务²。你可以参考下面的代码示例:
```java
// 创建一个固定大小的线程池
ExecutorService executor = Executors.newFixedThreadPool(4);
// 创建一个任务
Runnable task = new Runnable() {
@Override
public void run() {
// 在这里写你的业务逻辑
System.out.println("Hello, world!");
}
};
// 使用execute方法提交任务
executor.execute(task);
// 使用submit方法提交任务,并获取返回值
Future> future = executor.submit(task);
// 关闭线程池
executor.shutdown();
```
源: 与必应的对话, 2023/5/26
(1) 任务加入线程池是的生效和启动过程详解_如果有一个任务来了 .... https://blog.csdn.net/leisurelen/article/details/121808513.
(2) 向线程池提交任务的两种方式_apple w的博客-CSDN博客. https://blog.csdn.net/beststudent_/article/details/94222442.
(3) 异步编程利器:CompletableFuture详解 |Java 开发实战 - 掘金. https://juejin.cn/post/6970558076642394142.
django的默认数据库驱动是同步的,它会阻塞协程的执行,导致性能下降。你可以使用异步的数据库驱动,如aiomysql或者aiopg等,来避免这个问题
为了解决数据库高并发连接量不够的问题,采用setting修改底层逻辑的方式
danmu
renshu