第四篇 用Django創(chuàng)建后端

關(guān)鍵詞

Django Python

GitHub

stockspec_django
網(wǎng)站入口

創(chuàng)建project

Django的文檔非常的詳細(xì)辩棒,參考這個就可以
Django創(chuàng)建project

這里咱們創(chuàng)建一個app叫stockserver

django-admin startproject mysite
python manage.py startapp stockserver

在mysite/settings.py的INSTALLED_APPS加上stockserver

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

配置跨域中間件

因為我們最后用Vue做前端颜阐,需要解決跨域的問題,需要安裝django-cors-headers

pip install django-cors-headers

在mysite/settings.py的MIDDLEWARE加上corsheaders鸯乃,注意順序乎赴,越靠前越好练般,尤其是在Django的CommonMiddleware前疲眷。
然后還有一些其他的設(shè)置齿风。

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

CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
CORS_ORIGIN_WHITELIST = (
    '*'
)

CORS_ALLOW_METHODS = (
    'DELETE',
    'GET',
    'OPTIONS',
    'PATCH',
    'POST',
    'PUT',
    'VIEW',
)

CORS_ALLOW_HEADERS = (
    'XMLHttpRequest',
    'X_FILENAME',
    'accept-encoding',
    'authorization',
    'content-type',
    'dnt',
    'origin',
    'user-agent',
    'x-csrftoken',
    'x-requested-with',
    'Pragma',
)

配置路由

設(shè)置mysite/urls.py, 將stockserver的urls加入project的urls

from django.contrib import admin
from django.urls import path
from django.conf.urls import include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('stockserver/', include('stockserver.urls')),
]

實現(xiàn)stockserver

其實Django最好是用model來對應(yīng)數(shù)據(jù)庫药薯,但是考慮到這個項目只需要拿股票日K數(shù)據(jù)和指標(biāo)數(shù)據(jù),直接pd.read_sql()更方便聂宾,所以就不設(shè)置model了

  • 獲取股票指標(biāo)

輸入是前端傳過來的request果善,需要傳遞specname,order和abs系谐,這里我們設(shè)置一些默認(rèn)值巾陕。
這里specname就是第二篇里創(chuàng)建數(shù)據(jù)庫的stock_spec表的那一些列名,像貝塔系數(shù)這個正和負(fù)都表示跟大盤偏離比較大纪他,所以需要加abs鄙煤,大多數(shù)參數(shù)不需要加abs。
limit 0,50 就是取最大或最小的50只股票, 然后用DataFrame.to_json方法生成json格式返回前端茶袒。注意to_json方法里的orient參數(shù)梯刚,根據(jù)自己的需求來設(shè)置。

# stockserver/views.py
def spec(request):
    specname = request.GET.get('specname', 'amplitude_10')
    order = request.GET.get('order', 'desc')
    isAbs = request.GET.get('abs', 'false')
    orderbyvalue = specname
    if isAbs == 'true':
        orderbyvalue = "abs(" + specname + ")"
    print(specname, order, isAbs, orderbyvalue)
    cx = sqlite3.connect(r'D:\codes\python\stock\mystock.db')
    sql_cmd = "SELECT * FROM stock_spec where date=(select max(date) from stock_spec) and " + specname + " != 'NaN' order by " + orderbyvalue + " " + order + " limit 0,50"
    
    result = pd.read_sql(sql=sql_cmd, con=cx)
    df_json = result.to_json(orient = 'table', force_ascii = False)
    data = json.loads(df_json)

    return JsonResponse(data, safe=False)
  • 獲取股票日k
# stockserver/views.py
def dayk(request):
    codename = request.GET.get('code', 'sh.000001')
    order = 'desc'
    print(codename, order)
    cx = sqlite3.connect(r'D:\codes\python\stock\mystock.db')
    sql_cmd = "SELECT * FROM stock_day_k where code='" + codename +"' order by date desc limit 0,365"
    
    result = pd.read_sql(sql=sql_cmd, con=cx)
    df_json = result.to_json(orient = 'table', force_ascii = False)
    data = json.loads(df_json)

    return JsonResponse(data, safe=False)
  • 配置路由
#stockserver/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.index),
    path('spec/', views.spec),
    path('dayk/', views.dayk),
]

運行

python manage.py runserver

然后在瀏覽器輸入 127.0.0.1:8000/stockserver/spec 應(yīng)該就能看到返回的json數(shù)據(jù)薪寓。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末亡资,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子向叉,更是在濱河造成了極大的恐慌锥腻,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件母谎,死亡現(xiàn)場離奇詭異瘦黑,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門幸斥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來匹摇,“玉大人,你說我怎么就攤上這事甲葬±炔” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵演顾,是天一觀的道長供搀。 經(jīng)常有香客問我,道長钠至,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任胎源,我火速辦了婚禮棉钧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘涕蚤。我一直安慰自己宪卿,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布万栅。 她就那樣靜靜地躺著佑钾,像睡著了一般钩述。 火紅的嫁衣襯著肌膚如雪圆存。 梳的紋絲不亂的頭發(fā)上棕孙,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天稠屠,我揣著相機與錄音操禀,去河邊找鬼蔫骂。 笑死试浙,一個胖子當(dāng)著我的面吹牛佳恬,可吹牛的內(nèi)容都是我干的徒役。 我是一名探鬼主播孽尽,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼忧勿!你這毒婦竟也來了杉女?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤鸳吸,失蹤者是張志新(化名)和其女友劉穎熏挎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體层释,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡婆瓜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片廉白。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡个初,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出猴蹂,到底是詐尸還是另有隱情院溺,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布磅轻,位于F島的核電站珍逸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏聋溜。R本人自食惡果不足惜谆膳,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望撮躁。 院中可真熱鬧漱病,春花似錦、人聲如沸把曼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嗤军。三九已至注盈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間叙赚,已是汗流浹背老客。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留纠俭,地道東北人沿量。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像冤荆,于是被迫代替她去往敵國和親朴则。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354