基于Django的数据可视化系统

创建项目及应用:

django-admin startproject project_name
cd project
python manage.py startapp app_name

在app目录中创建urls.py文件

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

urlpatterns = [
    path("polls/", include("polls.urls")),#将新创建的app URL添加进来
    path("admin/", admin.site.urls),
]

在项目目录 settings.py中设置:

INSTALLED_APPS = [
    'polls.apps.PollsConfig',# 这里需要添加,在app.py中
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
#数据库修改为mysql
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'sakila',
        'USER': 'root',
        'PASSWORD': '......',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

下面这一部分在后文使用mysql数据库有详细说明

python manage.py inspectdb

python manage.py inspectdb > models.py #重定向保存为文件(可参考使用)

将其粘贴到应用目录下的models.py中
仅读取数据不要使用migrate命令进行迁移!
此命令会尝试在数据库中创建新的表,如果只读取数据不要进行此操作!

不允许对数据库进行修改操作也就不能使用后台管理
可以通过使用多数据库引擎来解决这个问题

创建项目后的目录结构

用startproject命令创建mysite项目,然后用startapps命令创建了polls应用,一个项目可以包含多个应用,每个应用都是“可插拔”式的,目前的目录结构:
在这里插入图片描述

使用SQLite数据库建表

官方教程
mysite的setting文件中设置数据库引擎

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

TIME_ZONE 与 INSTALLED_APPS 字段可以默认,根据需要设置
使用migrate命令根据配置创建(迁移)数据文件

python manage.py migrate

定义模型

模型的概念对应到代码中是一个类,是django.db.models.Model 类的子类,对应到数据库中是一个表,类中的变量是数据库表中的列,每个类生成的对象即对应表中一条数据
下面是在polls/models.py中的模型代码

from django.db import models


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField("date published")


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

激活模型

polls应用是可插拔的,需要在项目中激活。
pollsConfig类写在polls/apps.py文件中,所以它的点式路径为‘polls.apps.PollsConfig’
在mysite/settings.py中的INSTALLED_APPS字段添加点式路径

INSTALLED_APPS = [
    "polls.apps.PollsConfig",
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
]

用下面命令检测对于模型文件修改,并把修改部分存储为一次迁移

python manage.py makemigrations polls

#下面的0001是上个命令产生的迁移的名称,该指令会展示迁移对应的SQL命令
python manage.py sqlmigrate polls 0001
#sqlmigrate并不会执行SQL命令,使用migrate执行
python manage.py migrate

migrate选中所有还未执行过的迁移并且应用在数据库上

改变模型三步:
编辑models.py文件,改变模型
运行 python manage.py makemigrations 为模型的改变生成迁移文件。
运行 python manage.py migrate 来应用数据库迁移

创建管理员账号

python manage.py createsuperuser

Username: admin
Email address: admin@example.com

Password: **********
Password (again): *********
Superuser created successfully.

python manage.py runserver# 启动服务器

网页即可进入管理界面http://127.0.0.1:8000/admin/

向管理界面加入投票应用

在polls/admin.py

from django.contrib import admin

from .models import Question

admin.site.register(Question)
# Register your models here.

设置MySQL数据库的方法

需要下载mysqlclient

pip install mysqlclient

Django官方手册
连接已有数据库
首先在setting.py中配置DATABASES

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'your_name',
        'USER': 'your_user',
        'PASSWORD': 'your_password',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

使用命令inspectdb审查现有数据库来创建的模型,可将生成的代码根据需要粘贴到相应model文件中

python manage.py inspectdb

python manage.py inspectdb > models.py #重定向保存为文件(可参考使用)

默认情况下inspectdb创建未托管的表,也就是Django不被允许对表进行修改、删除等管理操作,这一点对于只读取数据的系统来说非常关键,通过生成的Meta类的managed 字段设置

class Person(models.Model):
    id = models.IntegerField(primary_key=True)
    first_name = models.CharField(max_length=70)

    class Meta:
        managed = False  #这里设置为False拒绝Django管理
        db_table = "CENSUS_PERSONS"

仅读取数据不要使用migrate命令进行迁移!
此命令会尝试在数据库中创建新的表,如果只读取数据不要进行此操作!

然后在admin.py中添加相应表单即可在管理页面查看数据

生成的model代码默认显示如下,仅显示Address object(xxx)
在这里插入图片描述
在类中添加如下代码
在这里插入图片描述
即可变成下面的显示内容
在这里插入图片描述

官方教程第三部分 创建视图

教程链接
在polls/views.py中创建视图,每个函数代表一个页面,然后将其注册到urls.py中

在这一步中我们可以完成任何我们想做的事情,比如读取数据库中的数据进行处理完成可视化。Django需要的只是返回一个HttpResponse ,或者抛出一个异常。

  1. 在view.py中添加视图函数
  2. 在urls.py中添加url来设置网址

可以添加模版,这样不需要每次更改view.py中的代码来更改视图

render(),get_object_or_404()

render()作用:载入模板,填充上下文,再返回由它生成的 HttpResponse 对象
get_object_or_404():获取对象,或者抛出404错误

from django.shortcuts import render, get_object_or_404

def actor_detail(request, actor_id):
    acotr = get_object_or_404(Actor, pk = actor_id)
    return render(request, "polls/actor/detail.html", {"actor": Actor})
去除模版中的url硬编码

使用 {% url %} 模板标签来消除对 url 配置中定义的特定 URL 路径的依赖:

{% if latest_actor_list %}
    <ul>
    {% for actor in latest_actor_list %}
        <li><a href="{% url 'actor_detail' actor.actor_id%}">{{ actor.first_name}}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>No polls are available.</p>
{% endif %}
为URL添加命名空间以区分不同应用的同名url
  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值