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

Django学习收尾

 启动项目命令

python manage.py runserver

文件上传功能实现

title = "Form上传"if request.method == "GET":form = UpForm()return render(request, 'upload_form.html', {"form": form, "title": title})form = UpForm(data=request.POST, files=request.FILES)if form.is_valid():print(form.cleaned_data)# 1.读取图片内容,写入到文件夹中并获取文件的路径image_object = form.cleaned_data.get("img")# file_path = "app01/static/img{}".format(image_object.name)media_path = os.path.join("media", image_object.name)f = open(media_path, mode='wb')for chunk in image_object.chunks():f.write(chunk)f.close()# 2.将图片文件路径写入到数据库models.Boss.objects.create(name=form.cleaned_data['name'],age=form.cleaned_data['age'],img=media_path,)return HttpResponse("...")return render(request, 'upload_form.html', {"form": form, "title": title})

混合数据(ModalForm)

models.py

class City(models.Model):""" 城市 """name = models.CharField(verbose_name="名称", max_length=32)count = models.IntegerField(verbose_name="人口")# 本质上数据库也是CharField,自动保存数据。img = models.FileField(verbose_name="Logo", max_length=128)

upload.py

class UpModelForm(BootStrapForm):bootstrap_exclude_fields = ['img']class Meta:model = models.Cityfields = "__all__"def upload_modal_form(request):""" 上传文件和数据 """title = "ModelForm上传文件"if request.method == "GET":form = UpModelForm()return render(request, 'upload_form.html', {"form": form, "title": title})form = UpModelForm(data=request.POST, files=request.FILES)if form.is_valid():# 对于文件:自动保存;# 字段 + 上传路径写入到数据库form.save()return HttpResponse("成功")return render(request, 'upload_form.html', {"form": form, "title": title})

实现方式

1.自己手动去写

file_object = request.FILES.get("exc")
...

2.Form组件(表单验证) 具体文件操作还是手动自己做

request.POST
file_object = request.FILES.get("exc")

3.ModelForm(表单验证 + 自动保存数据库 + 自动保存文件)

-Media文件夹
-Models.py定义类文件要img = models.FileField(verbose_name="Logo", max_length=128, upload_to='city/')

echarts学习

怎么调用后台数据,使用ajax请求

chart_list.html

{% extends 'layout.html' %}{% block content %}
<div class="container"><div class="panel panel-default"><div class="panel-heading">折线图</div><div class="panel-body"><div id="m1" style="width: 600px;height:400px;"></div></div></div><div class="row"><div class="col-sm-7"><div class="panel panel-default"><div class="panel-heading">柱状图</div><div class="panel-body"><div id="m2" style="width: 100%;height:400px;"></div></div></div></div><div class="col-sm-5"><div class="panel panel-default"><div class="panel-heading">饼图</div><div class="panel-body"><div id="m3" style="width: 600px;height:400px;"></div></div></div></div></div>
</div>
{% endblock %}
{% block js %}
<script src="https://cdn.jsdelivr.net/npm/echarts@5.5.1/dist/echarts.min.js"></script>
<script type="text/javascript">$(function() {initBar();});function initBar() {// 初始化echarts实例var myChart = echarts.init(document.getElementById('m2'));// 初始的图表配置项var option = {title: {text: 'ECharts 入门示例'},tooltip: {},legend: {data: []},xAxis: {data: []},yAxis: {},series: []};// 发起ajax请求获取数据$.ajax({url: "/chart/bar/",type: "GET",dataType: "json",success: function(res) {// 如果请求成功,更新图表数据if (res.status) {option.legend.data = res.data.legend; // 更新图例数据option.xAxis.data = res.data.x_axis; // 更新X轴数据option.series = res.data.series_list; // 更新系列数据// 使用更新后的配置项显示图表myChart.setOption(option);}},error: function(xhr, status, error) {console.error('AJAX请求出错:', status, error);// 在实际项目中可能需要处理错误情况}});}
</script>
{% endblock %}

chart.py

from django.shortcuts import render
from django.http import JsonResponsedef chart_list(request):""" 数据统计页面 """return render(request, 'chart_list.html')def chart_bar(request):""" 构造柱状图的数据 """legend = ["张三", "李四"]series_list = [{"name": '张三',"type": 'bar',"data": [5, 20, 36, 10, 10, 20]},{"name": '李四',"type": 'bar',"data": [5, 20, 36, 10, 10, 20]},]x_axis = ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']result = {"status": True,"data": {'legend': legend,'series_list': series_list,'x_axis': x_axis,}}return JsonResponse(result)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 7.9实验室总结 SceneBuilder的使用方法+使用javafx等
  • 【Linux】:程序替换
  • 这不是在搞技术,而是在玩心态~
  • JS进阶-深入对象
  • 音视频封装demo:将h264数据和aac数据封装(mux)成FLV文件(纯手工,不依赖第三方开源库)
  • 面试题007-Java-Spring
  • 华为机试真题--字符串变换最小字符串
  • 初识STM32:寄存器编程 × 库函数编程 × 开发环境
  • ubuntu下aarch64-linux-gnu(交叉编译) gdb/gdbserver
  • 如何从数码相机恢复已删除的照片
  • Python开发—— 列表的高级操作与应用
  • spring监听事件
  • Obsidian 文档编辑器
  • R 绘图 - 饼图
  • 【ROS2】中级-编写动作服务器和客户端(Python)
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 0x05 Python数据分析,Anaconda八斩刀
  • 5、React组件事件详解
  • avalon2.2的VM生成过程
  • create-react-app做的留言板
  • gf框架之分页模块(五) - 自定义分页
  • HTML5新特性总结
  • JavaScript服务器推送技术之 WebSocket
  • js作用域和this的理解
  • Lsb图片隐写
  • magento2项目上线注意事项
  • mysql innodb 索引使用指南
  • PHP的类修饰符与访问修饰符
  • Promise初体验
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • spring cloud gateway 源码解析(4)跨域问题处理
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 将回调地狱按在地上摩擦的Promise
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 思否第一天
  • 问题之ssh中Host key verification failed的解决
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​Spring Boot 分片上传文件
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • #13 yum、编译安装与sed命令的使用
  • #pragma once与条件编译
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • %check_box% in rails :coditions={:has_many , :through}
  • (1)常见O(n^2)排序算法解析
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (8)STL算法之替换
  • (C++二叉树05) 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (pojstep1.3.1)1017(构造法模拟)
  • (理论篇)httpmoudle和httphandler一览
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (论文阅读30/100)Convolutional Pose Machines