Django开发实践-1

参考虫师的《Web接口开发与自动化测试基于Python语言》,决定自己开发一个简单的Django项目,以下就是全部开发过程。


1. 项目目标

展示指定的股票实时价格,通过用户输入股票买入价格,计算当前盈亏。

2. 项目工具

Django+Python+新浪股票API接口(免费)

3. 项目分析

3.1 登录页面

一个在线系统,当用户访问站点,首页展示给用户的应该是登录页面,所以我们需要一个登录页面,之前的练习里已经写过,但是我不想那么枯燥的展示,于是从网上直接找了个免费的登录模板,套用即可(只是这个套用过程,费了很多事,详细的请参见下面红色和蓝色字体)。

3.1.1 实现过程

有了大体的思路后,就开始实现吧!

建立项目:

django-admin startproject stock

建立应用:

python manage.py startapp diff

编写登录页面:

  • 登录页面-login.html-网上拷贝的就不贴了

  • 登录页面-urls.py

from django.conf.urls import url
from django.conf import settings
from django.contrib import admin
from diff import views


urlpatterns = [
    url(r'^$', views.index),
    url(r'^admin/', admin.site.urls),
]
  • 登录页面-views.py
# /usr/bin python
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from django.shortcuts import render

# 登录页面
def login(request):
    return render(request, "index.html")
  • 效果图

这里写图片描述

编写登录功能

  • 初始化数据库

python manage.py migrate

  • 创建超级用户

python manage.py createsuperuser

  • 登录功能-urls.py
from django.conf.urls import url
from django.conf.urls.static import static
from django.conf import settings
from django.contrib import admin
from diff import views


urlpatterns = [
    url(r'^$', views.index),
    url(r'^login_action/$', views.login_action),
    url(r'^admin/', admin.site.urls),
]
  • 登录功能-views.py
# 登录动作
def login_action(request):
    if request.method == 'POST':
        username = request.POST.get('username', '')
        password = request.POST.get('password', '')
        user = auth.authenticate(username=username, password=password)
        if user is not None:
            auth.login(request, user)
            request.session['user'] = username
            response = HttpResponseRedirect('待定还没想好下一步')
            return response
        else:
            return render(request, 'index.html', {'error':'username or password error!'})
3.1.2 问题总结

注意1:

当模板使用css、js这些内容的时候,需要在settings.py中指定这些文件的目录:

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.10/howto/static-files/

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'diff/static')
STATICFILES_DIRS = (
    ('css',os.path.join(STATIC_ROOT,'css').replace('\\','/') ),
    ('js',os.path.join(STATIC_ROOT,'js').replace('\\','/') ),
    ('img',os.path.join(STATIC_ROOT,'img').replace('\\','/') ),
    ('scss',os.path.join(STATIC_ROOT,'scss').replace('\\','/')),
    ('fonts',os.path.join(STATIC_ROOT,'fonts').replace('\\','/') ),
)

并且需要在每次修改css等代码后,使用python manage.py collectstatic命令来同步这些改动才能生效。
如果遇到访问的资源返回404错误,则需要在html代码中检查指定资源的位置是否有误。如果遇到访问的资源返回304错误,则同步资源后,客户端使用CTRL+F5来访问。

注意2:

套用网上的模板这件事,真心并不是那么简单,我以为随便下个模板,参考之前的登录页面修改下里面的代码就能使用了,可没想到上面那个模板在实际使用过程中,填写密码居然是明文展示的,我晕了,看来并不是随便一个模板都能随便套用的,不清楚前端代码,根本无从下手去修改。

于是我又换了一个相对简单的登录页面模板,这次相对简单,并且经过了好几天的研究,终于稍微懂点css代码了,就为了加个登录页面的标题,学习并尝试了好几天才搞定,一个在线工具,可以实时修改html和css代码同时展示效果:https://c.runoob.com/codedemo/2917

经过最终的修改后的登录页面效果如下:

这里写图片描述

3.2 展示页面

当用户登录成功后,就需要进入展示页面,计划是在此页面展示股票的基本信息,包括:

ID代码名称现价成本价收益日期操作


对上述字段内容的分析:

ID: 这个应该可以通过数据库自动生成,只需展示出来即可;

代码: 手工添加到数据库的,界面上应该有入口,可以对要展示的股票代码进行增、删、改、查;

名称: 名称由于汉字较多,并且新浪股票的API接口是可以返回名称的,这里就不再要求用户输入了,直接通过接口获取并展示即可;

现价: 现价也是需要通过新浪股票的API接口获取的,不需要用户输入,现价应该是实时展示的,但是又怕刷新频率太快,所以最好是,进入该展示页面就刷新一次,然后从那之后,每5秒刷新一次,或用户手工刷新页面;

成本价: 需要用户手工添加到数据库,同“代码”一样,应可以CRUD;

收益: 现价减去成本价,得到每股收益,如果收益为正,则显示为红色,如果收益为负,则显示为绿色;

日期: 日期也是需要通过新浪股票的API接口获取,API接口是将日期和时间分开返回的,这里需要将两者合并后展示;

操作: 计划是在列表上方提供增加、查询功能,在操作栏里提供修改、删除功能;

至此,页面展示的大体内容和设计是完成了,由于书中采用的是bootstrap框架,这里我们也同样采用该框架,需要先简单学习一下,以便能实现上述功能。

  • 原型

Axcure画这种原型大材小用了,还是画图直接来一个吧,原型设计如下:

这里写图片描述

  • 数据库设计
字段名类型说明
IDint(11)NOT NULL AUTO_INCREMENT, 主键
代码varchar(6)DEFAULT NULL, 股票代码,eg:000001
名称varchar(255)DEFAULT NULL,股票名称,eg:平安银行
现价decimal(10, 4)DEFAULT NULL,eg:12.21
成本价decimal(10, 4)DEFAULT NULL,eg:10.01
收益decimal(10, 4)DEFAULT NULL,eg:2.20
日期datetimeDEFAULT NULL,最近一次刷新时间


后来想想不对,其实我们只需要在数据库里存储ID、代码和成本价,其余都是通过接口获取的,好吧,那我们试着去创建数据库和数据表。

首先,还是要修改settings.py,切换至MySQL数据库:

# Database
# https://docs.djangoproject.com/en/1.10/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'NAME': 'stock',
        'USER': 'root',
        'PASSWORD': '*******',
    }
}

然后在MySQL中创建stock数据库:

mysql> CREATE DATABASE stock CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)

然后在执行Django数据库的初始和创建:

python manage.py makemigrations diff

python manage.py migrate

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值