当前位置: 首页 > news >正文

Pycharm搭建一个Django项目

File->new project

点击create, 等待一下即可

查看安装 Django 版本:

在 Pycharm 底部选择 Terminal 然后在里面输入:python -m django --version

启动项目:

在 Terminal 里面输入: python manage.py runserver

查看文件目录结构,这些目录和文件的用处如下图所示:

本文的项目容器是DevelopmentProject,项目名称是BroadcastMonitorReceiver

编写第一个视图

打开 BroadcastMonitorReceiver/views.py,把下面这些 Python 代码输入进去:

from django.http import HttpResponse
def index(request):return HttpResponse("Hello, world. You're at the polls index.")

如果想看见效果,我们需要将一个 URL 映射到它——这就是我们需要 URLconf 的原因了。 为了创建 URLconf,请在 BroadcastMonitorReceiver目录里新建一个 urls.py 文件。

在 BroadcastMonitorReceiver/urls.py 中,输入如下代码:

from django.urls import pathfrom . import viewsurlpatterns = [path('', views.index, name='index'),
]

下一步是要在根 URLconf 文件中指定我们创建的 BroadcastMonitorReceiver.urls 模块。在容器配置 DevelopmentProject/urls.py 文件的 urlpatterns 列表里插入一个 include(), 如下:

from django.contrib import admin
from django.urls import include, pathurlpatterns = [path('DevelopmentProject/', include('DevelopmentProject.urls')),path('admin/', admin.site.urls),
]

数据库配置

例如你创建了一个数据库如下图所示:

需要将数据库的逻辑结构与Django的model对应起来,我们可以使用其反向生成模型的原理进行操作。

使用命令:python manage.py inspectdb

会生成如下代码:

class Tasktable(models.Model):t_id = models.IntegerField(primary_key=True)c_date = models.DateTimeField(blank=True, null=True)c_time = models.TimeField(blank=True, null=True)uid = models.CharField(max_length=30, blank=True, null=True)username = models.CharField(max_length=50, blank=True, null=True)c_squence = models.CharField(max_length=255, blank=True, null=True)bandwidth = models.IntegerField(blank=True, null=True)class Meta:managed = Falsedb_table = 'tasktable'class View(models.Model):v_id = models.CharField(primary_key=True, max_length=26)c_squence = models.CharField(max_length=255, blank=True, null=True)c_date = models.DateTimeField(blank=True, null=True)c_time = models.TimeField(blank=True, null=True)full_img_path = models.CharField(max_length=255, blank=True, null=True)fix_img_path = models.CharField(max_length=255, blank=True, null=True)rudio_img_path = models.CharField(max_length=255, blank=True, null=True)audio_path = models.CharField(max_length=255, blank=True, null=True)class Meta:managed = Falsedb_table = 'view'

这些概念可以通过一个 Python 类来描述。利用上面生成代码去编辑 DevelopmentProject/models.py 文件

接下来我们主要的任务是:使用Django架构,写一个web的网络页面,其中左边是一个从数据库获取数据的导航栏表格,右边是表格每行对应的图片(要求图片实时去访问数据库,更新页面图片),点击表格的某一行,会将右边显示的图片放大。

创建视图函数和模板

首先,我们可以使用Bootstrap来快速构建前端页面,具体可以在base.html中引入(对于Dgango的base模板不了解可以参考官网模板介绍)Bootstrap的CSS和JS文件,例如:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>{% block title %}{% endblock %}</title><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/css/bootstrap.min.css">{% block style %}{% endblock %}
</head>
<body><div class="container">{% block content %}{% endblock %}</div><div class="modal fade" id="itemDetailModal" tabindex="-1" role="dialog" aria-labelledby="itemDetailModalLabel" aria-hidden="true"><div class="modal-dialog" role="document"><div class="modal-content"></div></div></div><script src="https://code.jquery.com/jquery-3.6.0.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/js/bootstrap.min.js"></script>{% block script %}{% endblock %}
</body>
</html>

接下来,我们需要创建一个名为DevelopmentProject/index.html的模板,用于显示web页面,我们在content区域中设置左右两个区域的布局,以下是一个示例模板:

index.html

{% extends 'radiomonitor/base.html' %}
{% load static %}
{% block content %}
<h2>多信道广播检测</h2><div class="row"><div class="col-md-3"><table class="table table-hover"><thead><tr><th scope="col">序号</th><th scope="col">频率</th></tr></thead>
{#            显示数据#}<tbody>{% for item in items %}<tr data-id="{{ item.v_id }}"><td>{{ forloop.counter }}</td><td>{{ item.c_squence }}</td></tr>{% endfor %}</tbody></table></div><div class="col-md-9">{% for item in items %}<tr data-id="{{ item.v_id }}">{#      <td>{{ item.c_squence }}</td>#}<img src="{%  static "/1.png" %}" class="img-fluid mx-auto d-block"></tr>{% endfor %}
{#            <img src="" id="preview" class="img-fluid mx-auto d-block">#}</div></div>{#<table>#}
{#  <thead>#}
{#    <tr>#}
{#        <th>序号</th>#}
{#      <th>频率</th>#}
{#    </tr>#}
{#  </thead>#}
{#  <tbody>#}
{#    {% for item in items %}#}
{#    <tr data-id="{{ item.v_id }}">#}
{#        <td>{{ forloop.counter }}</td>#}
{#      <td>{{ item.c_squence }}</td>#}
{#    </tr>#}
{#    {% endfor %}#}
{#  </tbody>#}
{#</table>#}{#{% endblock %}#}
{##}
{#{% block right %}#}
{#    <tbody>#}
{#    {% for item in items %}#}
{#    <tr data-id="{{ item.v_id }}">#}
{#      <td>{{ item.c_squence }}</td>#}
{#    <img src="{%  static "/1.png" %}">#}
{#    </tr>#}
{#    {% endfor %}#}
{#  </tbody>#}{% endblock %}{% block script %}
<script>// 发送 Ajax 请求获取 item_detail 页面的内容并在弹窗中显示function showItemDetail(item_id) {$.ajax({url: '/BroadcastMonitorReceiver/' + item_id + '/',success: function(data) {$('#itemDetailModal .modal-content').html(data);$('#itemDetailModal').modal('show');}});}$(function() {// 点击行时显示相应的 item_detail 内容$('tbody tr').click(function() {var item_id = $(this).data('id');showItemDetail(item_id);});});
</script>
{% endblock %}

在这个页面中,左边是一个表格,使用Bootstrap的table类来定义,然后在tbody中使用Django模板语言的循环语句来生成表格数据。每一行的<tr>标签设置了一个data-id属性,用于保存对应的图片ID。 右边是一个<img>标签,用于显示图片。在页面加载完成后,通过jQuery来绑定表格行的click事件,点击时会将图片的src属性设置为对应图片的URL。

然后需要创建一个视图函数来显示web页面,该函数应该从数据库中获取数据,并将其传递给模板。假设我们的视图函数名为index,则可以在DevelopmentProject/views.py文件中定义该视图函数,如下所示:

def index(request):template = loader.get_template('radiomonitor/index.html')items = View.objects.all()image_path = os.path.join(settings.BASE_DIR, 'static', 'images', '1.png')context = {'items': items,}return HttpResponse(template.render(context, request))

在上面的视图函数中,我们首先从数据库中获取所有的View对象,然后将其存储在context字典中,并将该字典作为第三个参数传递给render()函数。render()函数使用DevelopmentProject/index.html模板来渲染页面,并将context字典传递给该模板。

现在,我们已经完成了使用Django实现这个web页面的所有步骤。最后,我们需要运行Django开发服务器来查看页面。可以使用以下命令启动开发服务器:

python manage.py runserver

显示的结果如下:

我们会发现图片的显示时一列,不太美观,希望把它弄成3xN这样子的排列。

这个可以使用forloop.counter|divisibleby:3方式实现,代码如如下:

<div class="image-grid">{% for item in items %}<img src="{%  static "/1.png" %}" class="img-fluid mx-auto d-block">{% if forloop.counter|divisibleby:3 and not forloop.last %}<div class="empty-container"></div>{% endif %}{% endfor %}</div>

添加css样式:

{% block style %}<style>.image-grid {display: flex;flex-wrap: wrap;justify-content: space-between;margin: -10px;}.image-container {width: calc(33.33% - 20px);margin: 10px;}.image-container img {width: 100%;}.empty-container {width: calc(100% - 20px);margin: 5px;}</style>
{% endblock %}

这样就达到了排列效果:

接下来我们希望去实时更新这些动态的图片,

相关文章:

Pycharm搭建一个Django项目

File->new project 点击create&#xff0c; 等待一下即可 查看安装 Django 版本&#xff1a; 在 Pycharm 底部选择 Terminal 然后在里面输入&#xff1a;python -m django --version 启动项目&#xff1a; 在 Terminal 里面输入: python manage.py runserver 查看文件目…...

浅析前端工程化中的一部曲——模块化

在日益复杂和多元的 Web 业务背景下&#xff0c;前端工程化经常会被提及。工程化的目的是高性能、稳定性、可用性、可维护性、高效协同&#xff0c;只要是以这几个角度为目标所做的操作&#xff0c;都可成为工程化的一部分。工程化是软件工程中的一种思想&#xff0c;当下的工程…...

新版bing(集成ChatGPT)申请通过后在谷歌浏览器(Chrome)上的使用方法

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,科大讯飞比赛第三名,CCF比赛第四名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…...

Time-distributed 的理解

前言 今天看到论文中用到 Time-distributed CNN&#xff0c;第一次见到 Time-distributed&#xff0c;不理解是什么含义&#xff0c;看到代码实现也很懵。不管什么网络结构&#xff0c;外面都能套一个TimeDistributed。看了几个博客&#xff0c;还是不明白&#xff0c;问了问C…...

matlab 计算矩阵的Moore-Penrose 伪逆

目录 一、Moore-Penrose 伪逆1、主要函数2、输入输出参数二、代码示例使用伪逆求解线性方程组一、Moore-Penrose 伪逆 Moore-Penrose 伪逆是一种矩阵,可在不存在逆矩阵的情况下作为逆矩阵的部分替代。此矩阵常被用于求解没有唯一解或有许多解的线性方程组。    对于任何矩阵…...

简历制作方面的经验与建议

专栏推荐:2023 数字IC设计秋招复盘——数十家公司笔试题、面试实录 专栏首页:2023 数字IC设计秋招复盘——数十家公司笔试题、面试实录 专栏内容: 笔试复盘篇 2023秋招过程中整理的笔试题,来源包括我自己求职笔试以及整理其他同学的笔试。包含华为、中兴、联发科、AMD、大…...

C语言--static、const、volatile关键字

Static static修饰局部变量改变了变量的生命周期&#xff0c;让静态局部变量出了作用域依然存在&#xff0c;到程序结束&#xff0c;生命周期才结束。 static 修饰局部变量 改变局部变量的生命周期&#xff0c;本质上是改变了局部变量的存储位置&#xff0c;让局部变量不再是…...

Rust学习入门--【18】Rust结构体

系列文章目录 Rust 语言是一种高效、可靠的通用高级语言&#xff0c;效率可以媲美 C / C 。本系列文件记录博主自学Rust的过程。欢迎大家一同学习。 Rust学习入门–【1】引言 Rust学习入门–【2】Rust 开发环境配置 Rust学习入门–【3】Cargo介绍 Rust学习入门–【4】Rust 输…...

LeetCode142 环形链表Ⅱ

题目&#xff1a; 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评…...

JavaScript刷LeetCode拿offer-高频链表题

首先需要了解链表的概念 先把 next 记录下来 无论是插入&#xff0c;删除&#xff0c;还是翻转等等操作&#xff0c;先把 next 指针用临时变量保存起来&#xff0c;这可以解决 90% 重组链表中指向出错的问题&#xff0c; 如果不知道什么时候需要用到守卫&#xff0c;那就都用…...

linux系统编程2--网络编程

在linux系统编程中网络编程是使用socket&#xff08;套接字&#xff09;&#xff0c;socket这个词可以表示很多概念&#xff1a;在TCP/IP协议中&#xff0c;“IP地址TCP或UDP端口号”唯一标识网络通讯中的一个进程&#xff0c;“IP地址端口号”就称为socket。在TCP协议中&#…...

Allegro如何重命名光绘操作指导

Allegro如何重命名光绘操作指导 在做PCB设计的时候,光绘设置是输出生产文件必要的流程,设置好光绘之后,如何对光绘重新命名,如下图 如何把L1改成TOP,L6改成BOTTOM,具体操作步骤如下 点击Manufacture选择Artwork...

[PMLR 2018] Hyperbolic entailment cones for learning hierarchical embeddings

Contents IntroductionEntailment Cones in the Poincar BallConvex cones in a complete Riemannian manifoldAngular cones in the Poincar ballfour intuitive propertiesClosed form expression of the optimal ψ \psi...

2023春季露营投影怎么选?轻薄投影极米Z6X Pro值得推荐

近年来&#xff0c;露营经济在多重因素的共同助推下快速发展&#xff0c;精致露营的攻略开始占据小红书、微博、朋友圈等各类社交平台&#xff0c;吸引着更多用户种草并加入到露营大军中&#xff0c;而露营经济的强势“破圈”给家用智能投影带来了更多的发展契机。凭借着小巧的…...

收藏,核心期刊的投稿、审稿、出刊流程详解

学术期刊论文&#xff08;核心和普刊&#xff09;的发表流程总的来说其实是一样的&#xff0c;整个流程包括&#xff1a;1写作-2选择刊物-3投稿-4审稿-5返修或拒稿-6录用-7出刊-8上网检索。 其中1和2其实顺序是可以调换的&#xff0c;可以选择好刊物再写作&#xff0c;根据刊物…...

JVM类加载子系统

1、类加载子系统在内存结构中所处的位置通过内存结构图&#xff0c;我们先知道类加载子系统所处的位置&#xff0c;做到心中有图。2、类加载器作用类加载器子系统负责从文件系统或者网络中加载Class文件&#xff0c;class文件在文件开头有特定的文件标识。ClassLoader只负责cla…...

摄像头的镜头的几个知识点

1、镜头的组成及镜片的固定方式 摄像头的镜头结构主要分为镜身&#xff0c;透镜&#xff0c;变焦环&#xff0c;对焦环&#xff0c;光圈叶片&#xff0c;部分还有防抖系统&#xff0e;其中最重要的就是透镜&#xff0c;也叫镜片。镜片的主要原料是光学玻璃&#xff0c;玻璃&…...

分布式-分布式存储笔记

读写分离 什么时候需要读写分离 互联网大部分业务场景都是读多写少的&#xff0c;读和写的请求对比可能差了不止一个数量级。为了不让数据库的读成为业务瓶颈&#xff0c;同时也为了保证写库的成功率&#xff0c;一般会采用读写分离的技术来保证。 读写分离的实现是把访问的压…...

第十三届蓝桥杯国赛 C++ C 组 Java A 组 C 组 Python C 组 E 题——斐波那契数组(三语言代码AC)

目录1.斐波那契数组1.题目描述2.输入格式3.输出格式4.样例输入5.样例输出6.数据范围7.原题链接2.解题思路3.Ac_code1.Java2.C3.Python1.斐波那契数组 1.题目描述 如果数组 A(a0,a1,⋯.an−1)A(a_0,a_1,⋯.a_{n-1})A(a0​,a1​,⋯.an−1​)满足以下条件, 就说它是一个斐波那契…...

多因子模型(MFM)

多因子模型&#xff08;Muiti-Factor M: MFM&#xff09;因子投资基础CAPM (资本资产定价模型)APT套利定价理论截面数据 & 时间序列数据 & 面板数据定价误差 α\alphaαalpha 出现的原因线性多因子模型Fama-French三因子模型三因子的计算公式利用alpha大小进行购买股票…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...

02.运算符

目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&&#xff1a;逻辑与 ||&#xff1a;逻辑或 &#xff01;&#xff1a;逻辑非 短路求值 位运算符 按位与&&#xff1a; 按位或 | 按位取反~ …...