做一个 简单的Django 《股票自选助手》显示 用akshare 库(A股数据获取)
图:
股票自选助手
这是一个基于 Django 开发的 A 股自选股票信息查看系统。系统使用 akshare 库获取实时股票数据,支持添加、删除和更新股票信息。
功能特点
- 支持添加自选股票
- 实时显示股票价格和涨跌幅
- 一键更新所有股票数据
- 支持删除不需要的股票
- 使用中国时区显示更新时间
- 支持简体中文界面
技术栈
- Python 3.8+
- Django 5.0.1
- akshare(A股数据获取)
- Bootstrap 5.1.3(前端界面)
- SQLite(数据存储)
安装步骤
- 克隆项目到本地:
git clone [项目地址]
cd stock_tracker
- 创建并激活虚拟环境(可选但推荐):
python -m venv venv
# Windows
venv\Scripts\activate
# Linux/Mac
source venv/bin/activate
- 安装依赖包:
pip install django akshare pandas
- 初始化数据库:
python manage.py migrate
- 启动开发服务器:
python manage.py runserver
- 访问系统:
打开浏览器,访问 http://127.0.0.1:8000
使用说明
添加股票
- 在输入框中输入股票代码,支持以下格式:
-
- 直接输入代码:
600519
(系统会自动判断沪深市场) - 带后缀格式:
- 直接输入代码:
-
-
- 上证股票:
600519.SS
- 深证股票:
000001.SZ
- 上证股票:
-
- 点击"添加"按钮将股票添加到自选列表
更新股票数据
- 点击"更新价格"按钮可以一次性更新所有股票的最新数据
- 系统会显示更新成功和失败的股票数量
删除股票
- 点击每个股票行右侧的"删除"按钮可以将股票从自选列表中移除
项目结构
stock_tracker/
├── manage.py
├── stock_tracker/ # 项目配置目录
│ ├── __init__.py
│ ├── settings.py # 项目设置
│ ├── urls.py # URL配置
│ └── wsgi.py
└── stocks/ # 股票应用目录├── __init__.py├── models.py # 数据模型├── views.py # 视图函数├── urls.py # 应用URL配置└── templates/ # 模板文件└── stocks/└── stock_list.html
开发说明
数据模型
Stock
模型包含以下字段:
symbol
: 股票代码name
: 股票名称current_price
: 当前价格change_percent
: 涨跌幅last_updated
: 最后更新时间
主要视图函数
stock_list
: 显示股票列表add_stock
: 添加新股票remove_stock
: 删除股票update_prices
: 更新股票价格
注意事项
- 时区设置:
-
- 系统使用中国时区 (Asia/Shanghai)
- 所有时间显示均为本地时间
- 数据更新:
-
- 使用 akshare 获取实时数据
- 支持批量更新所有股票
- 错误处理:
-
- 系统会显示详细的错误信息
- 包含股票代码格式提示
维护和更新
- 数据库备份:
-
- 定期备份 SQLite 数据库文件
- 依赖更新:
-
- 定期检查并更新依赖包
- 特别注意 akshare 的更新
代码:
stocks\models.py
from django.db import modelsclass Stock(models.Model):symbol = models.CharField(max_length=10, unique=True)name = models.CharField(max_length=100)current_price = models.DecimalField(max_digits=10, decimal_places=2, null=True)change_percent = models.DecimalField(max_digits=5, decimal_places=2, null=True)last_updated = models.DateTimeField(auto_now=True)def __str__(self):return f"{self.symbol} - {self.name}"
stocks\views.py
from django.shortcuts import render, redirect
from django.contrib import messages
from .models import Stock
import akshare as ak
from datetime import datetime
import pandas as pddef stock_list(request):stocks = Stock.objects.all().order_by('symbol')return render(request, 'stocks/stock_list.html', {'stocks': stocks})def add_stock(request):if request.method == 'POST':symbol = request.POST.get('symbol', '').upper()try:# 处理股票代码格式if symbol.endswith('.SZ'):code = symbol.replace('.SZ', '')market = 'sz'elif symbol.endswith('.SS'):code = symbol.replace('.SS', '')market = 'sh'else:code = symbolmarket = 'sh' if code.startswith('6') else 'sz'# 获取实时行情stock_info = ak.stock_zh_a_spot_em()stock_data = stock_info[stock_info['代码'] == code]if stock_data.empty:messages.error(request, f'找不到股票 {symbol} 的信息。请确保:\n1. 股票代码格式正确\n2. 对于上证股票,可以添加.SS后缀\n3. 对于深证股票,可以添加.SZ后缀')return redirect('stock_list')# 获取第一行数据stock_row = stock_data.iloc[0]stock_obj, created = Stock.objects.get_or_create(symbol=symbol,defaults={'name': stock_row['名称']})# 更新股票信息stock_obj.current_price = float(stock_row['最新价'])stock_obj.change_percent = float(stock_row['涨跌幅'])stock_obj.save()if created:messages.success(request, f'成功添加股票 {symbol}({stock_row["名称"]})')else:messages.success(request, f'成功更新股票 {symbol} 的信息')except Exception as e:messages.error(request, f'添加股票时出错: {str(e)}\n建议:\n1. 检查股票代码格式\n2. 确保网络连接正常')return redirect('stock_list')def remove_stock(request, symbol):try:stock = Stock.objects.get(symbol=symbol)stock.delete()messages.success(request, f'已删除股票 {symbol}')except Stock.DoesNotExist:messages.error(request, f'找不到股票 {symbol}')return redirect('stock_list')def update_prices(request):success_count = 0error_count = 0stocks = Stock.objects.all()try:# 获取所有A股实时行情stock_info = ak.stock_zh_a_spot_em()for stock in stocks:try:# 处理股票代码格式if stock.symbol.endswith('.SZ'):code = stock.symbol.replace('.SZ', '')elif stock.symbol.endswith('.SS'):code = stock.symbol.replace('.SS', '')else:code = stock.symbol# 查找对应的股票数据stock_data = stock_info[stock_info['代码'] == code]if not stock_data.empty:stock_row = stock_data.iloc[0]stock.current_price = float(stock_row['最新价'])stock.change_percent = float(stock_row['涨跌幅'])stock.save()success_count += 1else:error_count += 1except:error_count += 1continueexcept Exception as e:messages.error(request, f'更新价格时出错: {str(e)}')return redirect('stock_list')if success_count > 0:messages.success(request, f'成功更新 {success_count} 支股票的价格')if error_count > 0:messages.warning(request, f'有 {error_count} 支股票更新失败')return redirect('stock_list')
stocks\urls.py
from django.urls import path
from . import viewsurlpatterns = [path('', views.stock_list, name='stock_list'),path('add/', views.add_stock, name='add_stock'),path('remove/<str:symbol>/', views.remove_stock, name='remove_stock'),path('update/', views.update_prices, name='update_prices'),
]
stocks\templates\stocks\stock_list.html
<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>自选股票</title><link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body><div class="container mt-4"><h1 class="mb-4">我的自选股票</h1>{% if messages %}<div class="messages">{% for message in messages %}<div class="alert alert-{{ message.tags }}">{{ message }}</div>{% endfor %}</div>{% endif %}<!-- 添加新股票的表单 --><div class="card mb-4"><div class="card-body"><h5 class="card-title">添加新股票</h5><form method="post" action="{% url 'add_stock' %}" class="row g-3">{% csrf_token %}<div class="col-auto"><input type="text" name="symbol" class="form-control" placeholder="输入股票代码" required></div><div class="col-auto"><button type="submit" class="btn btn-primary">添加</button></div></form></div></div><!-- 股票列表 --><div class="card"><div class="card-body"><div class="d-flex justify-content-between align-items-center mb-3"><h5 class="card-title">股票列表</h5><a href="{% url 'update_prices' %}" class="btn btn-success">更新价格</a></div>{% if stocks %}<div class="table-responsive"><table class="table table-hover"><thead><tr><th>代码</th><th>名称</th><th>当前价格</th><th>涨跌幅</th><th>最后更新</th><th>操作</th></tr></thead><tbody>{% for stock in stocks %}<tr><td>{{ stock.symbol }}</td><td>{{ stock.name }}</td><td>{{ stock.current_price }}</td><td class="{% if stock.change_percent > 0 %}text-success{% elif stock.change_percent < 0 %}text-danger{% endif %}">{{ stock.change_percent|floatformat:2 }}%</td><td>{{ stock.last_updated|date:"Y-m-d H:i:s" }}</td><td><a href="{% url 'remove_stock' stock.symbol %}" class="btn btn-danger btn-sm" onclick="return confirm('确定要删除这支股票吗?')">删除</a></td></tr>{% endfor %}</tbody></table></div>{% else %}<p class="text-center">暂无自选股票,请添加。</p>{% endif %}</div></div></div><script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>
stock_tracker\urls.py
from django.contrib import admin
from django.urls import path, includeurlpatterns = [path('admin/', admin.site.urls),path('', include('stocks.urls')),
]
stock_tracker\settings.py
INSTALLED_APPS = [。。。'stocks',
]LANGUAGE_CODE = 'zh-hans'TIME_ZONE = 'Asia/Shanghai'USE_I18N = TrueUSE_TZ = True
AKShare 使用说明
AKShare 是一个优秀的开源财经数据接口库,用于获取中国金融市场数据。本项目主要使用其 A 股数据接口。
安装方法
pip install akshare
基本使用
import akshare as ak
A股数据获取
1. 实时行情数据
获取所有 A 股实时行情数据:
# 获取所有A股实时行情
stock_info = ak.stock_zh_a_spot_em()# 返回的数据包含以下字段:
# - 代码: 股票代码
# - 名称: 股票名称
# - 最新价: 当前价格
# - 涨跌幅: 涨跌百分比
# - 涨跌额: 价格变动
# - 成交量: 成交股数
# - 成交额: 成交金额
# - 振幅: 价格振幅
# - 最高: 最高价
# - 最低: 最低价
# - 今开: 开盘价
# - 昨收: 昨日收盘价
2. 个股历史数据
获取单个股票的历史数据:
# 获取股票历史数据
stock_history = ak.stock_zh_a_hist(symbol="000001", period="daily", start_date="20240101", end_date="20240110")# 参数说明:
# - symbol: 股票代码(不带市场后缀)
# - period: 周期(daily-日线,weekly-周线,monthly-月线)
# - start_date: 开始日期
# - end_date: 结束日期
3. 股票基本信息
获取股票的基本信息:
# 获取股票基本信息
stock_info = ak.stock_individual_info_em(symbol="000001")# 返回数据包含:
# - 股票代码
# - 股票简称
# - 行业
# - 总市值
# - 流通市值
# - 等基本面信息
本项目中的使用
在本项目中,我们主要使用了以下功能:
- 获取实时行情:
# 从 views.py 中的实现
def add_stock(request):# 获取实时行情数据stock_info = ak.stock_zh_a_spot_em()# 查找特定股票stock_data = stock_info[stock_info['代码'] == code]if not stock_data.empty:# 获取股票信息stock_row = stock_data.iloc[0]current_price = float(stock_row['最新价'])change_percent = float(stock_row['涨跌幅'])
- 批量更新价格:
# 从 views.py 中的实现
def update_prices(request):# 一次获取所有A股数据stock_info = ak.stock_zh_a_spot_em()for stock in stocks:# 查找对应的股票数据stock_data = stock_info[stock_info['代码'] == code]if not stock_data.empty:# 更新价格信息stock_row = stock_data.iloc[0]stock.current_price = float(stock_row['最新价'])stock.change_percent = float(stock_row['涨跌幅'])
注意事项
- 数据限制:
-
- 接口访问可能有频率限制
- 建议适当控制请求频率
- 考虑数据缓存机制
- 代码格式:
-
- A股代码格式:6位数字
- 上证股票以 6 开头
- 深证股票以 0 或 3 开头
- 错误处理:
-
- 注意处理网络异常
- 处理数据为空的情况
- 处理数值转换异常
常见问题
- 数据获取失败:
-
- 检查网络连接
- 确认股票代码格式
- 查看是否触发频率限制
- 数据不准确:
-
- 确认是否在交易时间
- 检查数据更新时间
- 验证股票代码正确性
相关资源
- AKShare 官方文档
- GitHub 仓库
- AKShare 使用教程
更新记录
- 2024-01-10: 首次创建文档
- 使用 akshare 1.15.68 版本
- 主要实现 A 股实时数据获取功能
相关文章:
做一个 简单的Django 《股票自选助手》显示 用akshare 库(A股数据获取)
图: 股票自选助手 这是一个基于 Django 开发的 A 股自选股票信息查看系统。系统使用 akshare 库获取实时股票数据,支持添加、删除和更新股票信息。 功能特点 支持添加自选股票实时显示股票价格和涨跌幅一键更新所有股票数据支持删除不需要的股票使用中…...
深入探索 ScottPlot.WPF:在 Windows 桌面应用中绘制精美图表的利器
一、ScottPlot.WPF 简介 ScottPlot.WPF 是基于 ScottPlot 绘图库专门为 Windows Presentation Foundation (WPF) 框架量身定制的强大绘图组件。它无缝集成到 WPF 应用程序中,为开发者提供了一种简洁、高效的方式来可视化数据,无论是科学研究中的实验数据展示、金融领域的行情…...
Spring bean的生命周期和扩展
接AnnotationConfigApplicationContext流程看实例化的beanPostProcessor-CSDN博客,以具体实例看bean生命周期的一些执行阶段 bean生命周期流程 生命周期扩展处理说明实例化:createBeanInstance 构造方法, 如Autowired的构造方法注入依赖bean 如UserSer…...
【Docker】docker compose 安装 Redis Stack
注:整理不易,请不要吝啬你的赞和收藏。 前文 Redis Stack 什么是? 简单来说,Redis Stack 是增强版的 Redis ,它在传统的 Redis 数据库基础上增加了一些高级功能和模块,以支持更多的使用场景和需求。Redis…...
Life Long Learning(李宏毅)机器学习 2023 Spring HW14 (Boss Baseline)
1. 终身学习简介 神经网络的典型应用场景是,我们有一个固定的数据集,在其上训练并获得模型参数,然后将模型应用于特定任务而无需进一步更改模型参数。 然而,在许多实际工程应用中,常见的情况是系统可以不断地获取新数据,例如 Web 应用程序中的新用户数据或自动驾驶中的…...
JavaEE之线程池
前面我们了解了多个任务可以通过创建多个线程去处理,达到节约时间的效果,但是每一次的线程创建和销毁也是会消耗计算机资源的,那么我们是否可以将线程进阶一下,让消耗计算机的资源尽可能缩小呢?线程池可以达到此效果&a…...
错误修改系列---基于RNN模型的心脏病预测(pytorch实现)
前言 前几天发布了pytorch实现,TensorFlow实现为:基于RNN模型的心脏病预测(tensorflow实现),但是一处繁琐地方 一处错误,这篇文章进行修改,修改效果还是好了不少;源文章为:基于RNN模型的心脏病…...
修改之前的代码使得利用设备树文件和Platform总线设备驱动实现对多个LED的驱动【只是假想对LED进行驱动,并没有实际的硬件操作】
引言 在下面这篇博文中: 利用Linux的Platform总线设备驱动实现对多个LED的驱动【只是假想对LED进行驱动,并没有实际的硬件操作】 我们利用Platform总线设备驱动的思想实现了对多个LED的驱动。 Platform总线设备驱动以及其它的总线设备驱动都将驱动分成了三个部分…...
从CentOS到龙蜥:企业级Linux迁移实践记录(龙蜥开局)
引言: 在我们之前的文章中,我们详细探讨了从CentOS迁移到龙蜥操作系统的基本过程和考虑因素。今天,我们将继续这个系列,重点关注龙蜥系统的实际应用——特别是常用软件的安装和配置。 龙蜥操作系统(OpenAnolis&#…...
多云架构,JuiceFS 如何实现一致性与低延迟的数据分发
随着大模型的普及,GPU 算力成为稀缺资源,单一数据中心或云区域的 GPU 资源常常难以满足用户的全面需求。同时,跨地域团队的协作需求也推动了企业在不同云平台之间调度数据和计算任务。多云架构正逐渐成为一种趋势,然而该架构下的数…...
Jenkins持续集成与交付安装配置
Jenkins 是一款开源的持续集成(CI)和持续交付(CD)工具,它主要用于自动化软件的构建、测试和部署流程。为项目持续集成与交付功能强大的应用。下面我们来介绍下它的安装与配置。 环境准备 更新系统组件(这…...
十大排序简介
十大排序简介 一、排序分类二、排序思路1.冒泡排序(Bubble Sort)2.选择排序(Selection Sort)3.插入排序(Insertion Sort)4.希尔排序(Shell Sort&a…...
uniapp小程序中隐藏顶部导航栏和指定某页面去掉顶部导航栏小程序
uniappvue3开发小程序过程中隐藏顶部导航栏和指定某页面去掉顶部导航栏方法 在page.json中 "globalStyle": {"navigationStyle":"custom",}, 如果是指定某个页面关闭顶部导航栏,在style中添加"navigationStyle": "cus…...
echarts:dataZoom属性横向滚动条拖拽不生效
问: 拖拽的过程中,第一次向右拖拽正常,然后就报错: echarts报错: var pointerOption pointerShapeBuilder[axisPointerType](axis,pixeValue,otherExtent),(axis,pixeValue,otherExtent)下划线红色报错:…...
【Leetcode 热题 100】739. 每日温度
问题背景 给定一个整数数组 t e m p e r a t u r e s temperatures temperatures,表示每天的温度,返回一个数组 a n s w e r answer answer,其中 a n s w e r [ i ] answer[i] answer[i] 是指对于第 i i i 天,下一个更高温度…...
R数据分析:多分类问题预测模型的ROC做法及解释
有同学做了个多分类的预测模型,结局有三个类别,做的模型包括多分类逻辑回归、随机森林和决策树,多分类逻辑回归是用ROC曲线并报告AUC作为模型评估的,后面两种模型报告了混淆矩阵,审稿人就提出要统一模型评估指标。那么肯定是统一成ROC了,刚好借这个机会给大家讲讲ROC在多…...
如何用 SSH 访问 QNX 虚拟机
QNX 虚拟机默认是开启 SSH 服务的,如果要用 SSH 访问 QNX 虚拟机,就需要知道虚拟机的 IP 地址,用户和密码。本文我们来看看如何获取这些参数。 1. 启动虚拟机 启动过程很慢,请耐心等待。 2. 查看 IP 地址 等待 IDE 连接到虚拟机。…...
交响曲-24-3-单细胞CNV分析及聚类
CNV概述 小于1kb是常见的插入、移位、缺失等的变异 人体内包含<10% 的正常CNV,我们的染色体数是两倍体,正常情况下,只有一条染色体表达,另一条沉默,当表达的那条染色体发生CNV之后,表达数量就会成倍增加…...
java远程调试debug
文章目录 首先被调试的服务配置idea 中配置远程调试连接上被调试服务打断点开始调试 首先被调试的服务配置 被调试的 java 服务需要开启允许被远程调试的配置,具体就是启动脚本中,加上允许被远程调试以及相应端口 # 针对JDK15.-1.8 -agentlib:jdwptran…...
操作系统之系统调用
系统调用 从上文简介得知,操作系统是计算机硬件和软件之间的桥梁,通过管理计算机软件和硬件资源,最终为我们用户提供服务。就如同一个管家帮助我们对CPU(进程)的管理、内存的管理、设备的管理、文件的管理。而我们如何…...
【docker】exec /entrypoint.sh: no such file or directory
dockerfile生成的image 报错内容: exec /entrypoint.sh: no such file or directory查看文件正常在此路径,但是就是报错没找到。 可能是因为sh文件的换行符使用了win的。...
CAPL概述与环境搭建
CAPL概述与环境搭建 目录 CAPL概述与环境搭建1. CAPL简介与应用领域1.1 CAPL简介1.2 CAPL的应用领域 2. CANoe/CANalyzer 安装与配置2.1 CANoe/CANalyzer 简介2.2 安装CANoe/CANalyzer2.2.1 系统要求2.2.2 安装步骤 2.3 配置CANoe/CANalyzer2.3.1 配置CAN通道2.3.2 配置CAPL节点…...
ML-Agents:智能体(三)
注:本文章为官方文档翻译,如有侵权行为请联系作者删除 Agent - Unity ML-Agents Toolkit–原文链接> ML-Agents:智能体(一) ML-Agents:智能体(二) ML-Agents:智能体&a…...
【harbor】离线安装2.9.0-arm64架构服务制作和升级部署
执行: .prepare 【作用就是产生一些配置信息 和docker-compose.yaml文件,然后docker-compose发布docker】 harbor官网地址:Harbor 参考文档可以看这里:部署 harbor 2.10.1 arm64 - 简书。 前提环境准备: 安装docker 和 docker…...
可视化-Visualization
可视化-Visualization 1.Introduction Visualization in Open CASCADE Technology is based on the separation of: on the one hand – the data which stores the geometry and topology of the entities you want to display and select, andon the other hand – its pr…...
完整化安装kubesphere,ks-jenkins的状态一直为init
错误描述: 打印日志: kubectl describe pod ks-jenkins-7fcff7857b-gh4g5 -n kubesphere-devops-system 日志描述如下: Events: Type Reason Age From Message ---- ------ ---- …...
halcon三维点云数据处理(十)locate_cylinder_3d
目录 一、locate_cylinder_3d例程代码二、gen_binocular_rectification_map函数三、binocular_disparity函数四、自定义函数select_best_candidates五、自定义函数remove_shadowed_regions 一、locate_cylinder_3d例程代码 1、读取或者创建3D形状模型, 2、根据双目…...
【CSS】设置滚动条样式
文章目录 基本语法用法案例 基本语法 在CSS中,可以使用 ::-webkit-scrollbar 和相关伪元素来为滚动条设置样式,但请注意这些伪元素是非标准的,主要用于WebKit内核浏览器(如Chrome、Safari)。 ::-webkit-scrollbar CSS …...
一个运行在浏览器中的开源Web操作系统Puter本地部署与远程访问
文章目录 前言1.关于Puter2.本地部署Puter3.Puter简单使用4. 安装内网穿透5.配置puter公网地址6. 配置固定公网地址 💡 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击跳转到网站…...
支持selenium的chrome driver更新到131.0.6778.264
最近chrome释放新版本:131.0.6778.264 如果运行selenium自动化测试出现以下问题,是需要升级chromedriver才可以解决的。 selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only s…...
conda+jupyter+pycharm:如何在Windows conda环境下运行jupyter并使用浏览器或者pycharm运行.ipynb
1 安装conda 2 conda环境下安装jupyter pip install jupyter3 设置jupyter配置文件 1)创建 jupyter_notebook_config.py文件 jupyter notebook --generate-config 2)设置密码 3)设置参数 直接将以下参数修改为自己的配置后复制到配置文件…...
生成式数据增强在大语言模型中的应用与实践
引言 近年来,大语言模型(Large Language Models, LLMs)如GPT、BERT等在自然语言处理(NLP)领域取得了巨大突破。然而,这些模型的性能往往依赖于大量高质量的训练数据,而在许多实际应用场景中&am…...
深度学习笔记11-优化器对比实验(Tensorflow)
🍨 本文为🔗365天深度学习训练营中的学习记录博客🍖 原作者:K同学啊 目录 一、导入数据并检查 二、配置数据集 三、数据可视化 四、构建模型 五、训练模型 六、模型对比评估 七、总结 一、导入数据并检查 import pathlib,…...
汽车免拆诊断 | 2007款保时捷Carrera S车行驶中发动机冷却液温度报警灯异常点亮
故障现象 一辆2007款保时捷Carrera S车,搭载3.8 L自然吸气发动机,累计行驶里程约为7.8万km。车主反映,车辆行驶一段距离后,组合仪表上的发动机冷却液温度报警灯异常点亮。为此,在其他维修厂已更换过节温器、发动机冷却…...
【蓝牙】win11 笔记本电脑连接 hc-06
文章目录 前言步骤 前言 使用电脑通过蓝牙添加串口 步骤 设置 -> 蓝牙和其他设备 点击 显示更多设备 更多蓝牙设置 COM 端口 -> 添加 有可能出现卡顿,等待一会 传出 -> 浏览 点击添加 hc-06,如果没有则点击 再次搜索 确定 添加成…...
what?ngify 比 axios 更好用,更强大?
文章目录 前言一、什么是ngify?二、npm安装三、发起请求3.1 获取 JSON 数据3.2 获取其他类型的数据3.3 改变服务器状态3.4 设置 URL 参数3.5 设置请求标头3.6 与服务器响应事件交互3.7 接收原始进度事件3.8 处理请求失败3.9 Http Observables 四、更换 HTTP 请求实现…...
EFCore HasDefaultValueSql (续2 HasComputedColumnSql)
前情:EFCore HasDefaultValueSql EFCore HasDefaultValueSql (续1 ValueGeneratedOnAdd)-CSDN博客 小伙伴在使用 HasDefaultValueSql 时,对相关的 ValueGeneratedOnAdd, HasComputedColumnSql 也有了疑问: HasComputedColumnSql 对于计算…...
springboot整合h2
在 Spring Boot 中整合 H2 数据库非常简单。H2 是一个轻量级的嵌入式数据库,非常适合开发和测试环境。以下是整合 H2 数据库的步骤: 1. 添加依赖 首先,在你的 pom.xml 文件中添加 H2 数据库的依赖: <dependency><grou…...
Unity自带的真车模拟系统,速度不够大r时如何以匀速上桥
在 Unity 中,如果你使用自带的真车模拟系统(如 Wheel Collider)时,发现车辆上桥时速度不够,导致无法顺利上坡,可以通过以下方法调整车辆的行为,使其能够以匀速上桥: 1. 调整 Wheel C…...
HarmonyOS鸿蒙-@State@Prop装饰器限制条件
一、组件Components级别的状态管理: State组件内状态限制条件 1.State装饰的变量必须初始化,否则编译期会报错。 // 错误写法,编译报错 State count: number;// 正确写法 State count: number 10; 2.嵌套属性的赋值观察不到。 // 嵌套的…...
C# 中的 Task 和 Async/Await
理解 C# 中的 Task 和 Async/Await:提升程序性能的利器 前言:在现代应用程序开发中,特别是在设计用户界面(UI)和进行网络请求等 I/O 操作时,异步编程变得尤为重要。C# 提供了一套强大的异步编程模型&#…...
vue.js 基于VueCli自定义创建项目
在使用Vue.js进行项目开发时,我们可以使用Vue CLI来快速创建项目。Vue CLI是一个基于Vue.js的命令行工具,它提供了一套完整的项目脚手架,可以帮助开发者快速搭建Vue.js项目的开发环境。 下面我们来详细解析如何使用Vue CLI自定义创建项目&am…...
Java中的反射机制及其应用场景
目录 什么是Java反射机制? 工作原理 主要应用场景 注意事项 总结 什么是Java反射机制? Java反射机制是一种强大的工具,它允许程序在运行时访问、检查和修改其本身的类和对象的信息。通过反射,开发者可以在不知道类的具体实现…...
金融项目实战 03|JMeter脚本实现手工接口测试
目录 一、环境说明 1、项目环境搭建 2、Mock说明 二、构造测试数据 1、通过系统页面构造 2、通过接口构造 3、通过数据库构造【推荐】 4、案例:构造借款业务数据 三、JMeter执行接口测试用例 1、获取图片验证码、获取短信验证码 2、注册脚本 3、登录脚本…...
前端工具汇总
1. vscode 下载地址:https://code.visualstudio.com/ vscode扩展汇总: 1.1 Code Spell Checker(必须安装) 代码拼写检查器 1.2 Auto Close Tag 自动添加HTML/XML的关闭标签 3. Auto Import 自动查找、解析并为所有可用导入…...
【学习路线】Python数据分析(数据科学) 详细知识点学习路径(附学习资源)
学习本路线内容之前,请先学习Python的基础知识 其他路线: Python基础 >> Python进阶 >> Python爬虫 >> Python数据分析(数据科学) >> Python 算法(人工智能) >> Pyth…...
Flutter 实现验证码输入框学习
学习flutter代码 实现一个用于输入验证码的自定义组件,它允许用户输入固定长度的验证码,并在输入完成时触发回调。 前置知识点学习 TextStyle TextStyle 是 Flutter 中用于定义文本样式的类。它提供了一组属性来控制文本的外观,如字体大小、…...
hutool糊涂工具通过注解设置excel宽度
import java.lang.annotation.*;Documented Retention(RetentionPolicy.RUNTIME) Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER}) public interface ExcelStyle {int width() default 0; }/*** 聊天记录*/ Data public class DialogContentInfo {/**…...
汽车基础软件AutoSAR自学攻略(四)-AutoSAR CP分层架构(3) (万字长文-配21张彩图)
汽车基础软件AutoSAR自学攻略(四)-AutoSAR CP分层架构(3) (万字长文-配21张彩图) 前面的两篇博文简述了AutoSAR CP分层架构的概念,下面我们来具体到每一层的具体内容进行讲解,每一层的每一个功能块力求用一个总览图,外加一个例子的图给大家进…...
有收到腾讯委托律师事务所向AppStore投诉带有【水印相机】主标题名称App的开发者吗
近期,有多名开发者反馈,收到来自腾讯科技 (深圳) 有限公司委托北京的一家**诚律师事务所卞,写给AppStore的投诉邮件。 邮件内容主要说的是,腾讯注册了【水印相机】这四个字的商标,所以你们这些在AppStore上的app&…...