python学习顺序:基础》web全栈(前端后端框架和django等)》爬虫、数据分析、人工智能

只有大量,长时间的重复,才能建立新的脑回路,这是不可速成的客观规律。要想学会一个新东西,一个新的思考方式,满足三要素就能做 到“大量时间”“重复”“专注”。

在我们的日常生活中,我们总是希望能够快速地掌握一项新技能或者学会一种新的思考方式。然而,现实往往并不如我们所愿。学习任何新事物都需要大量的时间和精力投入,而且这个过程往往是漫长而枯燥的。这是因为大脑中的神经元需要通过不断地重复和强化来建立新的连接,从而形成新的脑回路。这是一个不可速成的客观规律,任何人都无法逃避。

那么,如何才能在有限的时间内学会一个新东西呢?答案其实很简单,那就是满足以下三个要素:大量时间、重复和专注

首先,大量时间是学习新事物的基础。大脑中的神经元需要足够的时间来进行自我调整和优化,从而形成新的脑回路。这个过程是无法通过短时间内的高强度学习来实现的。因此,我们需要给自己足够的时间来学习和巩固新知识。只有这样,我们才能真正地掌握这项技能。

其次,重复是学习新事物的关键。大脑中的神经元需要通过不断地重复来加强彼此之间的联系,从而形成新的脑回路。这个过程是非常关键的,因为只有通过重复,我们才能让大脑记住这些新的知识和技能。因此,在学习新事物的过程中,我们需要不断地进行复习和巩固,以确保这些知识能够被我们牢固地记住。

最后,专注是学习新事物的核心。在学习过程中,我们需要保持高度的专注力,以便更好地吸收和理解新知识。这是因为大脑在高度专注的状态下,其工作效率会大大提高。因此,在学习新事物的过程中,我们需要尽量避免分心,确保自己能够全身心地投入到学习中去。

当然,满足这三个要素并不意味着我们就能够轻松地学会一个新事物。实际上,学习新事物的过程往往充满了挑战和困难。然而,只要我们能够坚持不懈地投入大量的时间和精力,不断地进行重复和巩固,同时保持高度的专注力,我们就一定能够克服这些困难,最终学会这个新事物。
此外,我们还需要注意以下几点:

  • 在学习新事物的过程中,我们需要根据自己的实际情况制定一个合理的学习计划。这个计划应该包括学习的时间、内容和方法等方面,以便我们能够更好地进行学习。

  • 寻找合适的学习方法。每个人的学习方式都是不同的,因此我们需要根据自己的特点来寻找一种最适合自己的学习方法。这样,我们才能够更加高效地进行学习。

  • 保持良好的学习态度。学习新事物是一个长期的过程,我们需要保持积极的心态,相信自己一定能够学会这个新事物。只有这样,我们才能够在学习过程中不断进步,最终实现自己的目标。

逝者如斯夫,不舍昼夜

以下为正文:

基于Python+Django+Hadoop+Spark的证券分析系统

发布:2024年2月4日分类:python, 网站搭建, 证券系统2189字词12.1分钟阅读浏览:42

大数据毕设 基于Django与深度学习的股票预测系统

https://blog.csdn.net/fawubio/article/details/133135868

django框架运用——–股票系统-后端

https://blog.csdn.net/FOKJECKT/article/details/96909485

搭一个简单的证券报单系统难吗?(基于python+django+html+css+mysql)

https://blog.csdn.net/weixin_44765296/article/details/126023091

基于python股票数据分析可视化系统+爬虫+交易数据+Django框架(包含文档+源码+部署教程)计算机毕业设计

https://blog.csdn.net/2201_75772776/article/details/133937070

基于Python+Django+Hadoop+Spark的证券分析系统

https://www.toutiao.com/article/7323390801198268978/?log_from=7d7ca079e3af_1707021482132

Python毕业设计基于django的股票交易模拟系统

https://blog.csdn.net/qq123311197/article/details/131825067

数据分析毕业设计 Django股票预测系统 – 深度学习 python

https://blog.csdn.net/kooerr/article/details/129661760

一、基于python 的股票行情查询系统开发(一)

https://blog.csdn.net/qq_37025471/article/details/114495602?spm=1001.2014.3001.5502
https://blog.csdn.net/qq_37025471/article/details/114803007?spm=1001.2014.3001.5502
https://blog.csdn.net/qq_37025471/article/details/115408704?spm=1001.2014.3001.5502

二、Python+Tushare使用系列

https://www.jianshu.com/p/2bc5939ae4b9

股票数据分析(一):Tushare,Anaconda,PyCharm的安装和基本使用

https://www.jianshu.com/p/68a71d2dff97

股票数据分析(二):配置Python + Django 开启http接口访问功能

https://www.jianshu.com/p/48394798d29f

股票数据分析(三):Python(Tushare) 交易信息返回json格式,供前端使用

https://www.jianshu.com/p/4eca96bea396

股票数据分析(四):利用 Anaconda3.X + jupyterlab 绘制图表

https://www.jianshu.com/p/5687daba6822

股票数据分析(五):绘制股票k线图(js+canvas + Python + json)

https://www.jianshu.com/p/7b1cabf11b4d

基于python 的股市行情查询系统开发(一)

一、前言

1、开发背景

自己写一个股票量化行情系统,再搭配好强大的交易策略,摒弃人性的贪婪和恐惧。

二、开发计划

1、开发语言

typescript

查阅了股票中的大的名称术语等等 ,看看用什么开发比较好。首先是考虑了数据中的比较好的vscode 的插件开发,然而我并不会typescript(js)开发,暂时先不考虑哈哈哈哈哈哈。而且股票数据的获取也是异常的僵硬,想着搞点免费的数据接口用用,然而大部分的数据接口都已经封装好了,个人想法想从零开始搭建一个自己的股票数据查询软件,可以自己定制各种公式数据进行计算,图表啊等等。

python

所以,想来想去正好把之前学的python重新再捡起来,而且python中的各种模块啊开发起来比较高效和方便,正好也提升一下自己的编码能力。顺便练练自己的炒股水平哈哈哈。

2、数据api获取

查看东方财富的网站,看看爬虫能不能直接网页上把数据爬了。结果爬出来发现数据竟然变成“–”,一脸懵逼,网上查了查发现原来是用了ajax动态获取数据的方法,数据再加载到浏览器页面上的,这个还得分析他的请求参数,之后可能回去研究研究,遂放弃。第二种方法,selenium直接模拟浏览器进行抓取,但是太卡了影响抓取数据,果断看看还有什么办法。就在我不知道如何是好时,突然!有网友说有网易有免费的!api接口!卧槽,那还等什么直接搞起。
这里我也会放出相关的免费数据api接口:

需要注意的是,网易的接口直接点击为csv文件,直接可以用爬虫进行抓取,之后存入mysql啊什么数据库也方便的多。

 http://quotes.money.163.com/service/chddata.html?code=0600772&end=20210307fields=TCLOSE;HIGH;LOW;TOPEN;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP

code中股票代码第一位0代表沪市、1代表深市,后面为股票代码(港股为5位)。
enddate中输入日期为从发行该只股票到此日期期间的所有交易数据

3、后续计划

后续会添加一些其他的交易行情,比如期货啊、黄金、比特币、美股等等啥的

今日进度

1、前期准备

在开始之前,必须知道,ide得用什么。这次,我选择了vscode进行整个系统的开发,因为确实轻量级的ide以及简洁的界面对于开发者来说是具有非常大的正面效果。vscode就有这样的特点,so ,let’s go 。

2、获取股票代码

首先,使用re模块进行网站的请求。

import re

'''
取得网页的内容
'''
def getHTMLText(url,timeout=30):
try:
r = requests.get(url,timeout = 30)
r.raise_for_status()
r.encoding = "UTF-8"
return r.text
except:
return '产生异常'

接着,我们通过获取到HTML内容使用BeautifulSoup对数据进行处理,将获得的数据写入csv文件中。

from bs4 import BeautifulSoup as bs

def get_stock_list(html): #沪市
final_list = []
final_list.append(['股票名称','股票代码'])
soup = bs(html,'html.parser')
body = soup.body
data = body.find('ul',{'class':'ngblistul2'}) 
data_hide = body.find('ul',{'class':'ngblistul2 hide'}) # ngblistul2 hide
lis = data.find_all('li') + data_hide.find_all('li')
for li in lis:
data1 = li.find_all('a')
data2 = data1[0].string
match1 = re.findall("[0-9]{6}",data2) #匹配前6位代码
match2 = re.sub(u"\\(.*?\\)", "", data2)
final_list.append([match2,match1[0]])
return final_list
def write_to_csv(lists): #写入csv
try:
with open('D:\\股票数据\\stocklist.csv','w',newline='') as csvfile:
writer = csv.writer(csvfile)
for row in lists:
writer.writerow(row)
except:
return '产生异常'
def read_from_csv(file): #读取csv
stock_list = []
try:
with open(file,'r') as csvfile:
reader = csv.reader(csvfile)
for line in reader:
stock_list.append(line)
return stock_list
except:
return '产生异常'

来,让我们执行一下:

def main():

url = 'http://guba.eastmoney.com/remenba.aspx'
html = sus.getHTMLText(url)
stock_list = get_stock_list(html)
write_to_csv(stock_list)
stock_list = sus.read_from_csv("D:\\股票数据\\stocklist.csv")
print(stock_list)


main()

效果如图:

再来看看csv文件:

OK,就此获取股票名称和股票代码的工作搞定。

基于python 的股市行情查询系统开发(二)

拖更的我终于回来了,这一周lz上班上的是心力憔悴啊,工作日都没什么时间继续开发,忙于各种蛋疼的事,进度缓慢呐。。。(插一句,这周股票回暖,牛市是不是又回来了?截止到lz目前,比特币也突破了60000刀!)
废话不多说了,书接上回,我们获取了股票名称和股票代码:

那么,我们就可以通过股票代码,使用爬虫进行历史的数据的获取啦。
getstockdata.py

import urllib.request

import urllib
import requests as re
import datetime
url = 'http://quotes.money.163.com/service/chddata.html?code=' #网易的历史行情数据api
urlend = 'fields=TCLOSE;HIGH;LOW;TOPEN;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP' #代表数据的最高价,最低价,开盘价,收盘价,涨跌幅等等
path = "D:\\股票数据\\" #存取路径
def get_todaydate(): #获取最新日期
date = datetime.datetime.now().strftime('%Y%m%d')
return date
def get_stockdata(): #获取
date = get_todaydate()
stock_list = sub.read_from_csv("D:\\投资\\stocklist.csv") #路径填写股票代码文件的路径
for stock in stock_list:
stock_name = stock[0] #文件名称
if '股票名称' in stock_name: #第一行我们不需要
continue
if "*" in stock_name:
stock_name = stock_name.replace('*',"(星)") #windows文件不能以*开头命名,所以在下出此下策代替- -
r = re.get(url+'0'+stock[1]+'&end='+date+urlend) #上证股票代码前加0开头 深证股票代码加1开头
with open(path+stock_name+'.csv','w',newline='',encoding='utf-8') as csvfile:
print('正在写入股票'+ stock_name) #写入文件
csvfile.write(r.text)

好啦 ,我们执行以下,看看怎么样:

正在跑,开始写入文件了,看看对不对:

文件大小不是0kb,有数据了,打开看看数据完整不,这里我们点个中远海控的数据看看:

数据是有了,成交笔数测试了很久,好像目前是没有的。。。
上证目前有1700多只股票,数据一般要下一个多小时,目前我已经把数据打包上传资源了,链接在这上证A股历史股票数据.

好了,我们已经获取了上证A股历史数据了。那么就要用这些数据进行分析了,首先,导入pandas包,不用过多解释,强大的数据统计分析模块,可以快速地对数据进行分类分组等等。
首先,一个股票最基本的通过它的价格就应该得出他的均线,比如说5日线啊,10日线啊,30日,60日等等,这里我就举例上证指数来画均线。
首先,导入上证指数的数据,上证的代码为000001,同理获取数据。
drawplot.py

import requests

import time
import re
import csv
import pandas as pd
from pylab import mpl
import pil
import datetime
import matplotlib.pyplot as plt
import numpy as np
df = pd.read_csv('D:\\股票数据\\上证指数.csv',header=0,index_col=0)#index_col指定索引,默认我们选择是日期
df1 = df.iloc[::-1] #由于数据是从大到小的,我们应该将其倒序,pandas中的dataframe支持数据的各类操作。
df0 = df1[['收盘价']] #计算均线我们只需要收盘价
stockcode = df.iloc[0,0] #获取股票名字和代码
stockname = df.iloc[1,1]
df_mean5 = df1.rolling(window=5).mean() #5日线 rolling方法计算出均值
df_mean5 =df_mean5.rename(columns={'收盘价':'MA5'})
df_mean10 = df1.rolling(window=10).mean() #10日线
df_mean10 =df_mean10.rename(columns={'收盘价':'MA10'})
df_mean20 = df1.rolling(window=20).mean()#20日线
df_mean20 =df_mean20.rename(columns={'收盘价':'MA20'})
df_mean60 = df1.rolling(window=60).mean()#60日线
df_mean60 =df_mean60.rename(columns={'收盘价':'MA60'})
print(df_mean5) # 输出5日均线数据

看看输出数据:

看看财经网站上的大盘日k线数据,验证一下

完全正确,成功!接下来我们进行收盘价的曲线描绘:

#concat表示拼接多个dataframe

df_new = pd.concat([df1,df_mean10,df_mean20,df_mean60,df_mean240],axis=1) #axis=1表示按行进行拼接两个dataframe
df_new.plot(kind = 'line',sharex = True,sharey = True,figsize=(50,8),title=stockcode+stockname,grid=True,fontsize=13)
#pandas中plot进行画图
plt.show()

生成的图标如图:

额,由于是从1990到最新日期的大盘点数,比较密集,我们放大看一下2015年左右的数据:

基于python 的股票行情查询系统开发(三)————使用vue+django框架将数据显示

一、django框架构建项目

1)下载django

pip install django ''' 使用清华源加快下载速度'''

2)构建项目

选择一个文件目录,在目录下输入:django-admin startproject 项目名

django-admin startproject stock

文件目录如下:

在cmd项目根目录下输入后面可以加ip:端口号

出现以下信息代表项目已经运行成功:

浏览器输入127.0.0.1:8000(默认端口):

这样我们的项目的基本框架就已经搭建好了。

3)新建model模型

stock目录下输入:

python .\manage.py startapp stocklist

在生成的文件目录中的model文件中对model对象的数据类型进行定义:

from django.db import models


# Create your models here.
class Stock(models.Model):
stockcode = models.CharField(max_length=20) '''股票代码'''
stockname = models.CharField(max_length=20) '''股票名称'''

构建后别忘了在stock目录下的setting.py文件的INSTALLED_APPS中加入stocklist。

......

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'stocklist'
]
......

之后输入如下,用以在数据库中建立stocklist表用于获取之前存储在csv文件中的沪深A股的股票代码和名称:

我使用的是默认的数据库sqlite3,这里vscode的插件可以对数据库进行可视化,在market中搜索sqlite即可:

可以看到数据库中的表已经构建成功了。
好了,之后我们就可以把csv数据导入数据库了。
在stock目录下新建accessdata文件。

# /stock/accessdata.py

from stocklist.models import Stock
import csv
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def write_stock_list(self):
with open('D:\\股票数据\\stocklist.csv','r',encoding='utf-8') as f:
reader = csv.reader(f)
csv_list = []
for row in reader:

if tuple([row[0]]) not in csv_list:
obj = Stock( stockcode= row[1],stockname = row[0])
csv_list.append(obj)
Stock.objects.bulk_create(csv_list)
return HttpResponse("OK")

在url.py中加入该方法请求:




# /stock/urls.py
from . import accessdata
from django.conf.urls import url

urlpatterns = [

url('write/',accessdata.write_stock_list),
]

再次运行一下:

查看数据库:

OK,准备工作完成。

二、获取实时数据

如何获取到实时的股票数据呢?非常简单,东方财富网就可以。目前的链接为http://push2.eastmoney.com/api/qt/stock/get?fields=f43,f44,f45,f46,f47,f48,f49,f50,f51,f52,f57,f58,f71,f116,f117,f60,f162,f163,f164,f167,f168,f170,f173&secid=股票代码

需要注意的是股票代码前要加1. 代表上海 0.代表深圳。

这里使用grequests来加快请求的速度:获取1700多支的数据大约要5秒钟,

@csrf_exempt

def get_allcode(request): #获取所有的实时股票信息
QuerySet = Stock.objects.all()
list =[]
dictlist = []
stockdict = {}
for stock in QuerySet:
list.append(get_url+"1."+stock.stockcode)
'''url=http://push2.eastmoney.com/api/qt/stock/get?fields=f43,f44,f45,f46,f47,f48,f49,f50,f51,f52,f57,f58,f71,f116,f117,f60,f162,f163,f164,f167,f168,f170,f173&secid='''
tasks = [grequests.get(u) for u in list]
datalist = grequests.map(tasks,size= 2000)
for data in datalist:
dict ={'data2':json.loads(data.text)}
dictlist.append(accessformat(dict))
for i in range(len(dictlist)):
stockdict[i] = dictlist[i]

return HttpResponse(json.dumps(stockdict))

注意不要忘记在url.py加入此路径进行匹配:

urlpatterns = [

...
url('get_allcode/',accessdata.get_allcode),
...
]

跑一下看看:

其实数据已经获取到了,但还是unicode编码,我们需要将其进行转化一下。
另:使用grequests是会报如下异常:

但是不影响程序运行,有没有同样使用的小伙伴告诉一下怎么解决啊啊
将数据进行处理一下:



def accessformat(LIST):
stocknowdata = LIST['data2']['data']
if(stocknowdata ==None):
return 'None'
listnow = list(stocknowdata.values())
listnew = [listnow[10],listnow[11],listnow[0],listnow[1],
listnow[21],listnow[2],listnow[3],listnow[12],
listnow[8],listnow[9],listnow[4],listnow[5],
listnow[6],listnow[7],listnow[13],listnow[14],
listnow[15],listnow[16],listnow[17],listnow[18],
listnow[12],listnow[20],listnow[22]]
#print(listnew)
label = ['股票代码','股票名称','最新价','最高价','涨跌幅','最低价','开盘价','昨收',
'涨停','跌停','成交量(手)','成交额','外盘','量比','均价',
'总市值','流通市值','市盈(动)','静市盈率','滚动市盈率','市净率',
'换手率','ROE']
#df = pd.DataFrame(columns=label)
b=dict(zip(label,listnew))
return b

打印看看:

可以看到数据其实是已经处理好的,就是传到前端时又转为unicode了。
这时候我们就需要vue来将数据显示一下了。

三、将数据实时显示在前端页面

下载npm后,进行vue脚手架的搭建:

npm  install -g vue-cli

之后进行一路选择默认后进入项目目录

npm install

安装完成后,输入

npm run serve

启动成功后,我们在index.html加入前端美化代码:

<!doctype html>

<html lang="en">

<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.4.1/dist/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdn.staticfile.org/font-awesome/4.7.0/css/font-awesome.css">
<title>django vue stock</title>
</head>

<body>

<div id="app"></div>
</div>

<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://cdn.jsdelivr.net/npm/jquery@3.4.1/dist/jquery.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.4.1/dist/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
</body>

</html>

src目录下的vue文件名修改为Container.vue

<template>

<div class="container">
<nav class="navbar navbar-expand-lg navbar-light bg-warning">
<a class="navbar-brand" href="#">Menu</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>

<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="#">A Stock <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item active">
<a class="nav-link" href="#">find other</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Dropdown
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Something else here</a>
</div>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
</li>
</ul>
<form class="form-inline my-2 my-lg-0">
<input v-model="stockcode" class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search">
<button class="btn btn-outline-success my-2 my-sm-0" type="button" @click="getnewstock()">Search</button>
</form>
</div>
</nav>
<div class="row">


<div class="col-md-12">
<!-- 右边是博客内容表格部分 -->
<table class="table table-bordered table-hover">
<thead>
<th class="text-center">stockcode</th>
<th class="text-center">stockname</th>
<th class="text-center">stocknow</th>
<th class="text-center">stockhigh</th>
<th class="text-center">stocklow</th>
<th class='text-center'>stockopen</th>
<th class='text-center'>stockchange</th>
<th class='text-center'>stockyesday</th>
<th class='text-center'>stockamount</th>
</thead>
<tbody>
<!-- <tr>-->
<tr v-for='stock in stocks' :key='stock.id' >
<td>{{stock.股票代码}}</td>
<td>{{stock.股票名称}}</td>
<td>{{stock.最新价}}</td>
<td>{{stock.最高价}}</td>
<td>{{stock.最低价}}</td>
<td>{{stock.开盘价}}</td>
<td>{{stock.涨跌幅}}</td>
<td>{{stock.昨收}}</td>
<td>{{stock.成交额}}</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</template>

<script>
import axios from 'axios';
import Qs from 'qs';
export default {
name: 'Container',

props: {
},
data(){
return{
//base_url:'http://172.18.204.60:8000/api/stock/',
stocks:null,
url:'',
title:'',
content:'',
stockcode:'',
}
},
methods:{

// getAll(){
// axios.get('http://localhost:8000/api/stock/')
// .then(res=>{
// this.stocks = res.data;
// this.url = '';
// this.title = ''
// this.content = ''
// });

getnewstock(){
if(this.stockcode=='')
{
axios({
headers:{'Content-Type':'application/x-www-form-urlencoded'},
method:'get',
url :'http://localhost:8000/get_allcode/'

}).then(res=>{
this.stocks = res.data
console.log(res.data)
})

}
else
{
let data = {stockcode:this.stockcode}
axios({
headers:{'Content-Type':'application/x-www-form-urlencoded'},
method:'post',
url : 'http://localhost:8000/access_stock_code/',
data :Qs.stringify(data)
}).then(res=>{
this.getnewdata(res.data)
console.log(res.data)
})
}
},

getnewdata(stockcode){
axios({
headers:{'Content-Type':'application/x-www-form-urlencoded'},
method:'get',
url :'http://push2.eastmoney.com/api/qt/stock/get?fields=f43,f44,f45,f46,f47,f48,f49,f50,f51,f52,f57,f58,f71,f116,f117,f60,f162,f163,f164,f167,f168,f170,f173&secid='+stockcode,

}).then(res=>{
this.accessdata(res.data)
console.log(res.data)
})

},

accessdata(data){
let data1= {data2 :data}
axios({
method:'post',
url :'http://localhost:8000/accessdata/',
data :JSON.stringify(data1)
}).then(res=>{
console.log(res.data)
this.stocks = {stock:res.data}

created(){
// this.getAll();
this.getnewstock();
}
}
}
</script>

<style scoped>

</style>

App.vue文件修改如下:

<template>

<div id="app">
<Container />
</div>
</template>

<script>
import Container from './components/Container.vue'

export default {
name: 'App',
components: {
Container
}
}
</script>

main.js:



import { createApp } from 'vue'

import App from './App.vue'

createApp(App).mount('#app')

这里还有一个问题,我们使用的是前后端分离的项目模式,所以前端向后端请求会存在跨域问题,因此,在django中的settings.py中INSTALLED_APPS加入django-cores,MIDDLEWARE 中加入’corsheaders.middleware.CorsMiddleware’,‘corsheaders.middleware.CorsPostCsrfMiddleware’,再加入CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL =True即可

INSTALLED_APPS = [

'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'stocklist',
'corsheaders', #加入#
]

MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'corsheaders.middleware.CorsPostCsrfMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'stock.urls'
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL =True

ok,浏览器输入localhost:8080/

成功!可以看到数据已经实时地展现在首页上了