基于vue、VantUI、django的程序设计

首先构建vue项目,构建项目点这里

安装

npm install axios

axios简介

Axios 是一个基于 promise 的 HTTP 库,用于发起请求和接收响应,实现异步操作

基本使用

axios对象

请求响应拦截

在utils文件夹里新建ajax.js 

创建一个axios对象并对外暴露

配置请求响应拦截器

import axios from "axios";// 创建axios对象并暴露该对象可以被外部访问
// 创建对象时进行头信息设置及加载上一次携带的cookie
export const ajax = axios.create({headers: {source: "h5","Content-Type": "application/x-www-form-urlencoded",             //用于指示资源的MIME类型,这个字段表明服务器要返回的内容是什么类型的数据},WithCredentials: true       // 携带cookie
})
// 请求响应拦截器,有两个参数,参数1拦截成功函数,参数2拦截失败函数
// 处理完毕要放行(返回数据)
ajax.interceptors.request.use((req)=> {console.log("拦截请求");return req;     // 不返回的话这个包就丢了
}, (err) => {return Promise.reject(err);
});ajax.interceptors.response.use((reqs)=>{console.log("拦截响应")return reqs;
}, (err) => {return Promise.reject(err);
})

请求响应拦截器可以对请求和响应拦截并对拦截的数据操作。

如下:

这里配置了如果响应状态码为401的时候如何操作

// 响应拦截
ajax.interceptors.response.use((reqs)=>{console.log("拦截响应")return reqs;
}, (err) => {if (err.response.status === 401) {console.log("未登录。。。。")}return Promise.reject(err);
})

发起请求

        在onMounted函数中调用axios.get()方法,参数是目标url。返回一个response,在then中进行处理。

        axios.get()是通过get方法发起请求,返回一个响应。

<script setup>
import axios from "axios";    
import {onMounted} from "vue";
// 此函数在页面元素加载前执行,也称为钩子函数或生命周期函数
onMounted(() => {axios.get("http://www.baidu.com").then((response) => {console.log("响应返回的数据" , response);})
})
</script>

 直接访问非本机目标会导致跨域问题,需要进一步配置

使用VantUI

ventui是一个vue组件库,和elementui不同,ventui主要面对移动端应用

npm install vant

使用vant元素 

使用vant元素

eg:轮播图

<script setup>
import {ref} from "vue";const bannerList = ref([{id :1 ,img_url: "/static/home/banner/banner1.jpg",},{id :2 ,img_url: "/static/home/banner/banner2.jpg",},{id :3 ,img_url: "/static/home/banner/banner3.jpg",}
])
</script><template><div class="home-banner-box"><van-swipe class="swipe" :autoplay="3000" indicator-color="white"><van-swipe-item v-for="item in bannerList" :key="item.id"><img :src="item.img_url" alt=""></van-swipe-item></van-swipe></div>
</template><style lang="less" scoped>
.home-banner-box{img{width: 100%;height: auto;}
}
</style>

cell单元格组件

<van-cell title="单元格" is-link />
<van-cell title="热门推荐" is-link value="全部榜单" />
<van-cell title="单元格" is-link arrow-direction="down" value="内容" />

正常是无法带有

创建django项目

创建django项目点这里

数据库设计和生成

配置数据库连接

打开setting.py,首先引入数据库依赖,然后找到DATABASES并配置。

import pymysql
pymysql.install_as_MySQLdb()DATABASES = {# 'default': {#     'ENGINE': 'django.db.backends.sqlite3',#     'NAME': BASE_DIR / 'db.sqlite3',# }'default': {'ENGINE': 'django.db.backends.mysql',       # 数据库驱动'NAME': 'trip_django',                      # 数据库名"USER": "root",                             # 登录数据库的用户名"PASSWORD": "1231",                         # 密码"HOST": "127.0.0.1",                        # 数据库IP地址"POST": "3306"                              # 数据库端口号}
}

数据库设计

打开模块的models

设计规则

字段类型

Django提供了多种字段类型,用于表示不同的数据类型。以下是一些常用的字段类型:

  • AutoField:自增列,通常不需要显式定义,因为Django会自动为每个model添加一个名为id的自增主键字段。
  • CharField:字符串字段,必须指定max_length参数。
  • BooleanField:布尔类型字段,不能为空,但可以添加Blank=True允许在表单中为空。
  • DateField:日期类型字段,可以设置auto_now(每次保存时自动更新为当前日期)和auto_now_add(仅在第一次创建时自动设置为当前日期)等选项。
  • DateTimeField:日期时间类型字段,参数与DateField相同。
  • DecimalField:十进制小数类型字段,需要指定max_digits(总位数)和decimal_places(小数位数)等参数。
  • EmailField:带有检查Email合法性的CharField。
  • FloatField:浮点类型字段。
  • IntegerField:整型字段。
  • BigIntegerField:长整型字段。
  • TextField:大文本字段,用于存储较长的字符串。
  • URLField:带有URL合法性校验的CharField。
  • ImageField:图片字段,需要Python Imaging库(Pillow)支持,可以指定height_fieldwidth_field来保存图片的高度和宽度。
  • FileField:文件字段,用于存储上传的文件,需要指定upload_to参数来指定文件上传的目录。
字段选项

除了字段类型外,还可以为字段指定一些选项来定制其行为:

  • null:如果为True,则允许该字段在数据库中存储NULL值。默认为False。
  • blank:如果为True,则在Django admin中添加数据时可以允许该字段为空。这与null不同,null是与数据库相关的,而blank是与表单验证相关的。
  • primary_key:如果为True,则该字段将作为模型的主键。通常不需要显式设置,因为Django会自动为每个模型添加一个名为id的自增主键字段。
  • choices:一个二维的元组列表,用于指定该字段的可选值。在Django admin中,这将使用select框代替文本框,并限定choices的值是元组中的值。
  • max_length:对于字符串类型的字段,指定最大长度。
  • default:为该字段指定一个默认值。
  • verbose_name:在Django admin中显示的字段名称。如果不设置,则使用属性名作为显示名称。
  • db_column:指定该字段在数据库中的列名。
  • unique:如果为True,则该字段的值在数据库中必须是唯一的。
  • db_index:如果为True,则为该字段创建数据库索引。

随后指定表名和排序规则

class Meta:db_table = 'system_slider'ordering = ['-reorder']     # 默认排序规则

eg:

from django.db import models# Create your models here.
# 数据库中表的映射类,通过该文件构建和操作数据库
class Slider(models.Model):# 轮播图name = models.CharField('名称', max_length=32)desc = models.CharField('描述', max_length=100, null=True, blank=True)types = models.SmallIntegerField('展现的位置', default=10)img = models.ImageField('图片地址', max_length=255, upload_to='%Y%m/slider')reorder = models.SmallIntegerField('排序字段', default=0, help_text="数字越大越靠前")start_time = models.DateTimeField('生效开始时间', null=True, blank=True)end_time = models.DateTimeField('生效结束的时间', null=True, blank=True)target_url = models.CharField('跳转的地址', max_length=255, null=True, blank=True)is_valid = models.BooleanField('是否有效', default=True)createdat = models.DateTimeField('创建时间', auto_now_add=True)updated_at = models.DateTimeField('修改时间', auto_now=True)class Meta:db_table = 'system_slider'ordering = ['-reorder']     # 默认排序规则

检查运行

python manage.py check

创建模型

python manage.py makemigrations

生成数据结构

生成数据结构前要先建库,库名和setting中配置的相同

python manage.py migrate

响应数据

规范相应数据结构

首先定义好格式

一个对象包裹着一个对象和一个列表

    data = {"meta": {},"object": []}

 从数据库查询数据

    # 对数据源(数据库里的数据)进行过滤,相当于在sql中加where条件quertset = Slider.objects.filter(is_valid=True)

将数据添加到响应的数据里 

    for item in quertset:data["object"].append({"id": item.id,"img_url" : item.img.url,"target" : item.target_url,"name" : item.name,})

返回响应

return http.JsonResponse(data)

 整体

from django.http import HttpResponse
from django.shortcuts import render
from django import httpfrom system.models import Slider# Create your views here.
def slider_list(request):# 规范相应数据结构data = {"meta": {},"object": []}# 对数据源(数据库里的数据)进行过滤,相当于在sql中加where条件quertset = Slider.objects.filter(is_valid=True)for item in quertset:data["object"].append({"id": item.id,"img_url" : item.img.url,"target" : item.target_url,"name" : item.name,})# 返回一个JSON格式的对象return http.JsonResponse(data)

类视图响应数据

重写查询方法

首先重写查询方法,方法名为get_queryset。

代码中Q是查询条件,可以拼接多个条件。用&符号拼接。

paginate_by = 5表示每页有多少条数据

class SightListView(ListView):paginate_by = 5     # 每页五条数据def get_queryset(self):query = Q(is_valid = True)      # Q是查询条件,该对象可以拼接多个条件# 热门is_hot = self.request.GET.get('is_hot',None)if is_hot:query = query & Q(is_hot=True)# 精选is_top = self.request.GET.get('is_top',None)if is_top:query = query & Q(is_top=True)print(query)# 景点名称搜索querySet = Sight.objects.filter(query)return querySet

重写render_to_response方法

重写render_to_response方法,这个方法用于响应前端的请求。
context类是上下文对象,记录类的属性列表,
其中包含了ListView子类SightList的所有属性及数据

for item in page_obj.object_list:的含义是遍历所有当前页的数据

    def render_to_response(self, context, **response_kwargs):# 利用上下文对象获取页面信息page_obj = context['page_obj']# 合成响应数据data = {'meta': {'total_count': page_obj.paginator.count,'page_count': page_obj.paginator.num_pages,'current_page': page_obj.number,},'objects': [],}for item in page_obj.object_list:data['objects'].append({'id': item.id,'name': item.name,'main_img': item.main_img.url,'min_price': item.min_price,'score': item.score,'province': item.province,'city': item.city,'comment_count': 0})return http.JsonResponse(data)

 

在 Django 的分页功能中,page_obj 通常是一个表示当前页的分页对象,而 page_obj.object_list 是一个包含当前页所有对象的列表。

具体来说:

  • page_obj:这是一个分页对象,它包含了关于当前页以及整个数据集分页信息的各种属性。它通常是通过 Django 的 Paginator 类和相应的页面号码来创建的。

  • page_obj.object_list:这是一个列表(或类似列表的可迭代对象),包含了根据分页逻辑从整个数据集中筛选出来的、属于当前页的对象。这些对象通常是模型实例,它们代表了数据库中的记录。

例如,如果你有一个包含 100 个对象的列表,并且你设置了每页显示 10 个对象,那么:

  • 对于第一页,page_obj.object_list 将包含列表中的前 10 个对象。
  • 对于第二页,它将包含列表中的第 11 到第 20 个对象,以此类推。

获取指定分页

 context['page_obj'].get_page(page_number)

当前视图完整代码 

from django.db.models import Q
from django.shortcuts import render
from django import http
from django.views.generic import ListViewfrom sight.models import Sightclass SightListView(ListView):paginate_by = 5     # 每页五条数据def get_queryset(self):query = Q(is_valid = True)      # Q是查询条件,该对象可以拼接多个条件# 热门is_hot = self.request.GET.get('is_hot',None)if is_hot:query = query & Q(is_hot=True)# 精选is_top = self.request.GET.get('is_top',None)if is_top:query = query & Q(is_top=True)print(query)# 景点名称搜索querySet = Sight.objects.filter(query)return querySetdef render_to_response(self, context, **response_kwargs):# 利用上下文对象获取页面信息page_obj = context['page_obj']# 合成响应数据data = {'meta': {'total_count': page_obj.paginator.count,'page_count': page_obj.paginator.num_pages,'current_page': page_obj.number,},'objects': [],}for item in page_obj.object_list:data['objects'].append({'id': item.id,'name': item.name,'main_img': item.main_img.url,'min_price': item.min_price,'score': item.score,'province': item.province,'city': item.city,'comment_count': 0})return http.JsonResponse(data)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/458942.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云智慧完成华为原生鸿蒙系统的适配, 透视宝 APM 为用户体验保驾护航

2024 年 10 月 22 日&#xff0c;首个国产移动操作系统 —— 华为原生鸿蒙操作系统 HarmonyOS NEXT 正式面世&#xff0c;成为继 iOS 和 Android 后的全球第三大移动操作系统。HarmonyOS NEXT&#xff0c;从系统内核、数据库根基&#xff0c;到编程语言创新、AI&#xff08;人工…

【WebGis开发 - Cesium】三维可视化项目教程---图层管理拓展图层透明度控制

目录 引言一、为什么要开发图层透明度控制功能二、开发思路整理1. cesium图层api查询1.1 imageryLayer 透明度1.2 primitive 透明度 三、代码编写1. 修改原有图层管理代码2. 新增页面结构3. 编写图层透明度控制方法 四、总结 引言 本教程主要是围绕Cesium这一开源三维框架开展的…

如何通过sip信令以及抓包文件分析媒体发到哪个地方

前言 问题描述&#xff1a;A的媒体没转发到B&#xff0c;B只能听到回铃音&#xff0c;没有A的说话声音&#xff0c;并且fs这边按正常的信令发送了. 分析流程 分析早期媒体发送到哪一个IP 10.19.0.1发送了一个请求给10.19.0.157这个IP&#xff0c;然而这里的SDP媒体地址&am…

react 总结+复习+应用加深

文章目录 一、React生命周期1. 挂载阶段&#xff08;Mounting&#xff09;补充2. 更新阶段&#xff08;Updating&#xff09;补充 static getDerivedStateFromProps 更新阶段应用补充 getSnapshotBeforeUpdate3. 卸载阶段&#xff08;Unmounting&#xff09; 二、React组件间的…

搭建 mongodb 副本集,很详细

搭建 mongodb 副本集&#xff0c;很详细 一、前言二、创建用户1、创建 root 用户2、创建测试用户3、修改用户密码 三、修改配置文件&#xff08;主节点&#xff09;1、开启登录认证2、加上副本集3、最终配置文件 四、副本节点1、创建副本节点目录2、编辑配置文件3、启动副本节点…

2024年四川省大学生程序设计竞赛 补题记录

文章目录 Problem A. 逆序对染色&#xff08;思维树状数组&#xff09;Problem B. 连接召唤&#xff08;贪心&#xff09;Problem E. L 型覆盖检查器&#xff08;模拟&#xff09;Problem F. 小球进洞&#xff1a;平面版&#xff08;几何&#xff09;Problem G. 函数查询Proble…

关于传输线电感

要理解自感、互感、回路电感&#xff0c;PCB表层单位长度电感约为7.5纳亨每英寸&#xff0c;内层约为9纳亨每英寸 磁力线 电流周围会产生磁场&#xff0c;可以认为磁场是由许多“力线”构成。 电流穿过与其垂直的某一平面时&#xff0c;在该平面内激起一个“磁漩涡” 形成许多…

JavaSet集合

无序&#xff08;指的是添加顺序和获取出的数据顺序不一致&#xff0c;不重复&#xff0c;无索引 既然Set没有索引&#xff0c;因此功能同上一篇Connection的功能&#xff0c;几乎没有额外的功能 HashSet的原理 为什么是无序&#xff08;要构建红黑树&#xff09;&#xff0…

【Linux学习】(9)调试器gdb

前言 Linux基础工具&#xff1a;安装软件我们用的是yum&#xff0c;写代码用的是vim&#xff0c;编译代码用gcc/g&#xff0c;调试代码用gdb&#xff0c;自动化构建用make/Makefile&#xff0c;多人协作上传代码到远端用的是git。 在前面我们把yum、vim、gcc、make、git都已经学…

逆向工程基本概念

引言 逆向工程&#xff08;Reverse Engineering&#xff09;是指从已经存在的产品或系统中提取信息&#xff0c;并理解其设计原理的过程。在软件开发中&#xff0c;逆向工程通常用于理解一个已有软件系统的内部工作原理&#xff0c;可能是为了兼容性、安全分析、修复或者改进等…

Pyhton自动化测试持续集成和Jenkins

持续集成 官方术语&#xff1a; 持续集成&#xff08;Continuous Integration&#xff09;&#xff0c;也就是我们经常说的 CI 持续集成&#xff08;CI&#xff09;是一种实践&#xff0c;可以让团队在持续的基础上收到反馈并进行改进&#xff0c;不必等到开发周期后期才寻找…

二十四、Python基础语法(变量进阶)

一、引用 在定义变量的时候, 解释器会给变量和数据分别在内存中分配内存&#xff0c;变量中保存的是数据的地址, 称为引用&#xff0c;Python 中数据的传递,传递的都是引用&#xff0c;可以使用 id(变量) 函数,获取变量中引用地址。 # 将数字1在内存中的地址储存到变量a中 a …

人工智能岗位英语面试 - 如何确保模型的可靠性和性能

确保模型的可靠性和性能 1. Precision Precision is a metric that measures how accurate the model’s positive predictions are. It calculates the ratio of true positives (correctly predicted positive cases) to the total number of predicted positives (both tr…

时间比较日期

现在需要一个获取当前时间然后对比一个月后的时间的java方法&#xff0c;比如&#xff1a;当前时间获取到是2024-10-28&#xff0c;然后我写定一个时间2024-10-29&#xff0c;这两个比大小&#xff0c;获取的当前时间要小于我写定的时间返回true否则返回false import java.time…

从头学PHP之数组输出基本函数

上期我们讲到了数组&#xff0c;数组是个特殊的变量&#xff0c;在程序中的重要程度很高&#xff0c;大部分数据处理的时候会用到这种特殊的变量&#xff0c;那么现在让我们继续深入一下吧。 上期我们打印出了数组的值&#xff0c;用print_r()或者var_dump()这俩函数&#xff0…

paddleocr使用FastDeploy 部署工具部署 rknn 模型

在 PC 端转换 pdmodel 模型为 rknn 模型和在板端使用百度飞浆开发的 FastDeploy 部署工具部署 rknn 模型 以下内容是在 PC 端系统为 Ubuntu20.04&#xff0c;板端系统为ubuntu20.04 的环境下实现的 描述&#xff1a; 官网地址 rknn_zoo RKNPU2_SDK …

【Linux】进程调度 | 进程切换上下文数据

&#x1fa90;&#x1fa90;&#x1fa90;欢迎来到程序员餐厅&#x1f4ab;&#x1f4ab;&#x1f4ab; 主厨&#xff1a;邪王真眼 主厨的主页&#xff1a;Chef‘s blog 所属专栏&#xff1a;青果大战linux 总有光环在陨落&#xff0c;总有新星在闪烁 小感慨&#xff1a; …

区块链系统控制台Console的安装与运维

【要求】 登陆Linux 服务器&#xff0c;安装、部署区块链系统控制台 Console&#xff0c;并完成节点的运维。同 时&#xff0c;检查控制台是否能够正常运行。 【任务】 1. 登陆 linux 服务器&#xff0c;进入指定操作目录按下列要求完成控制的安装与部 署&#xff0c;并将安装过…

Rust语言的优缺点以及学习建议

在编程世界的不断演变中&#xff0c;Rust 作为一种重要的语言脱颖而出。它以安全性和性能为核心&#xff0c;正在获得开发者们的广泛关注。但究竟什么是 Rust&#xff1f;它为何如此受欢迎&#xff1f;在这篇博客中&#xff0c;我们将深入探讨 Rust 的世界&#xff0c;探索它的…

【三十七】【QT开发应用】使用QVideoWidget播放视频,QT模块缺失时更新安装模块步骤(利用虚拟网址打开应用加速)

效果展示 下面有一个按钮打开视频&#xff0c;点击按钮之后会出现一个弹窗选择文件&#xff0c;默认打开的是D盘&#xff0c;并且选择的文件的类型有.mp4 .flv或者所有文件。选择正确的视频文件之后可以正常播放视频。 widget.h 主窗口头文件 #pragma once#include <QtWid…